如果循环完全不符合软件流水线的要求,则会显示以下消息:
- 错误的循环结构。此错误非常罕见,可能源于以下原因:
- 在 C 代码内循环中插入了 asm 语句
- 复杂的控制流,例如GOTO语句和中断
- 循环包含调用。有时,编译器可能无法内联处于循环中的函数调用。由于编译器无法内联函数调用,因此无法对循环进行软件流水化处理。
- 太多指令。到软件流水线的循环中有太多指令。
- 禁用软件流水线。软件流水已被命令行选项禁用,例如,当使用 --disable_software_pipeline 选项、不使用 --opt_level=2(或 -O2)或 --opt_level=3(或 -O3)选项或使用 --opt_for_speed=0 或 --opt_for_speed=1 选项时。
- 未初始化的迭代计数器。迭代计数器可能未设置为初始值。
- 抑制以防止代码扩展。由于 --opt_for_speed=2 选项,软件流水线可能被抑制。当使用 --opt_for_speed=2 选项时,在不太乐观的情况下会禁用软件流水线以减小代码大小。如需启用流水线,请使用 --opt_for_speed=4 或 --opt_for_speed=5。
- 无法识别迭代计数器。循环迭代计数器无法被识别或在循环体中使用不当。