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