ZHCU881D May 2020 – May 2024
在某些情况下,编译器可以通过一种称为阶段折叠 的转换,减少软件流水线循环的最小安全迭代计数。有关阶段折叠的信息显示在软件流水线信息注释块中。示例如下所示。
阶段折叠始终有助于缩减代码大小。阶段折叠通常有利于提高性能,因为它可以减少软件流水线循环的最小安全迭代计数,这样当循环执行的次数很少时,软件流水线循环很可能执行(速度更快),而且不必将执行转移到重复循环(速度更慢且不是软件流水线)。
;* Epilog not entirely removed
;* Collapsed epilog stages : 2
;*
;* Prolog not removed
;* Collapsed prolog stages : 0
;*
;* Max amt of load speculation : 128 bytes
;*
;* Minimum safe iteration count : 3 (after unrolling)
上例中的反馈显示了两个结尾阶段已折叠。但是,编译器无法折叠任何开场阶段,所以无法将软件流水线循环的最小安全迭代计数减小到 1(这是最好的情况)。 软件流水线循环开场或结尾无法删除的技术原因很复杂,编程人员也很难影响这种结果。
执行阶段折叠时,编译器可能生成推测式执行加载指令的代码,意味着加载结果可能得不到使用。在编译器需要推测式执行加载指令的情况下,如果访问的地址超出了合法存储器的范围,则编译器只对不会导致异常的加载指令执行此操作。有关“Max amt of load speculation”的反馈告知您加载推测将访问的地址超出正常地址访问范围的程度。