是否有包含 LLVM 优化列表的网页?

Roa*_*pol 4 compiler-construction llvm compiler-optimization

我见过许多优化缩写词,例如。

dce, inline, constmerge, constprop, dse, licm, gvn, instcombine, mem2reg, scalarrepl

虽然我可以推断出这dce是消除死代码,但我在处理许多其他问题时遇到了麻烦。

是否有一个包含 LLVM 优化列表和描述的网页,它们中的每一个究竟是做什么的?

亲切的问候,罗伊

小智 5

LLVM 文档包含分析和转换过程的列表。你列出的都属于转换通道。详细说明有时简洁的文档:

  • inline 内联函数(废话!)。
  • constmerge 去重相同的常量。
  • constprop 做简单的常量折叠(只有带有常量参数的指令)
  • dse消除了明显无意义的内存写入(相当于a = 1; a = 2;-> a = 2;)。
  • licm,循环不变代码运动,将每次迭代中相同的计算移出循环,以便它们只执行一次。
  • GVN 是global value numbering的通用首字母缩写词。
  • instcombine用一条等效指令(例如,等效于a + 1 + 1-> a + 2)替换多条指令。
  • mem2reg将堆栈分配转换为 SSA 寄存器。如果前端只是通过为本地分配空间alloca并将它们用作指针,则前端会简单得多,但是优化传递在 SSA 上工作,因此该传递将尽可能多的allocas 转换为 SSA。
  • scalarrepl 用单个成员替换聚合类型(例如,不要用两个 i32 成员来处理结构对象,而是使用两个 i32 寄存器)。