ZHCUAQ1F july 2015 – april 2023
当循环是软件流水线循环时,循环前的注释块提供以下信息:
此信息在注释块中显示如下:
;*Minimum required memory pad : 5 bytes
;*Minimum threshold value : --speculate_loads=7
;*
;*For further improvement on this loop, try option --speculate_loads=14
为了安全起见,此示例循环要求在此循环中引用的数组数据前后至少填充 5 个字节。此填充可以包含其他程序数据。此填充不会被修改。在许多情况下,阈值(即,实现特定调度和级别折叠所需的 --speculate_loads 参数的最小值)与填充相同。但是,如果不同,注释块也会包含最小阈值。在这种循环中,阈值必须至少为 7 才能实现这种级别的折叠。
编译器和链接器可以通过 --speculate_loads 选项的 auto 参数(即 --speculate_loads=auto 或 -mh=auto)提供自动加载推测。通过 auto 参数可以更轻松地使用推测加载优化并从中受益。此选项可以生成最多 256 字节的推测加载,超出可以为编译器分配的内存。
此外,编译器将信息传递给链接器以帮助自动确保所需的前置填充和后置填充:
但是,也可以通过 --speculate_loads=n 选项明确指定推测加载阈值,其中 n 至少是所需的最小填充(如前所述),但还需要考虑更大的阈值是否有助于进一步折叠。如果适用,还会提供此信息。例如,在上述注释块中,阈值 14 可能有助于进一步折叠。如果为 --speculate_loads 选择 auto 参数,编译器将自动考虑更大的阈值。