我见过很多优化缩略词,例如
dce, inline, constmerge, constprop, dse, licm, gvn, instcombine, mem2reg, scalarrepl
虽然我可以推断dce
消除了死代码,但我遇到很多其他问题。
是否有一个带有描述的LLVM优化列表的网页,其中每个优化的具体内容是什么?
亲切的问候, Roay
答案 0 :(得分:4)
LLVM文档包含analysis and transformation passes的列表。你列出的所有都属于转换过程。详细说明有时简洁的文档:
inline
内联函数(duh!)。constmerge
重复相同的常量。constprop
进行简单的常量折叠(只有带有常量参数的指令)dse
消除了明显无意义的内存写入(相当于a = 1; a = 2;
- > a = 2;
)。licm
,循环不变代码运动,在循环的每次迭代中移动相同的计算,以便它们只执行一次。instcombine
使用单个等效指令替换多个指令(例如,等同于a + 1 + 1
- > a + 2
)。mem2reg
将堆栈分配转换为SSA寄存器。如果只是通过alloca
为本地人分配空间并将它们用作指针,那么前端会更简单,但是优化传递在SSA上工作,因此这个传递将尽可能多的alloca
转换为SSA scalarrepl
用单个成员替换聚合类型(例如,不是使用两个i32成员来处理结构对象,而是使用两个i32寄存器)。