057、Loop Invariant Code Motion(循环不变代码外提)从一次性能调优的“翻车”说起去年做一款边缘AI推理引擎时,遇到一个诡异的性能瓶颈。模型在PC上跑得飞快,部署到ARM Cortex-A72上,同样的循环体,帧率直接腰斩。我盯着反汇编出来的代码看了半天,发现编译器居然把一条乘法指令留在了循环内部——那条指令的源操作数在整个循环过程中根本没变过。当时第一反应是“GCC的O2优化是不是没开全”,结果检查编译选项,该开的都开了。后来手动把那条乘法提到循环外面,性能直接回升40%。这件事让我意识到:循环不变代码外提(LICM)不是教科书里那种“锦上添花”的优化,它是实打实能救命的。尤其当你面对嵌入式场景下的有限算力、有限缓存、有限功耗时,少一次冗余计算,可能就是帧率从15fps到25fps的差距。什么是循环不变代码?别被名字骗了“循环不变”这四个字听起来很学术,说白了就是:循环体里那些每次迭代结果都一样的计算。比如:for(inti=