【问题标题】:Is LLVM IR a graph?LLVM IR 是图吗?
【发布时间】:2021-09-05 07:10:49
【问题描述】:

我正在编译器优化领域开始新的研究。 首先,我正在研究几篇相关的不同论文,并遇到了一些不同的优化技术。

我目前正在研究的一个主要问题是编译器将输入源代码转换为图形(例如控制流、数据流、链表等),然后对图形执行优化并生成机器码。代码到图形到代码。例如,JavaScript 引擎中的 JIT 编译器,即 V8、ChakraCore 等。

然后,我遇到了 LLVM IR。由于之前的搜索,我对代码优化的印象是在上面解释的图表上进行的。但是,我不相信 LLVM 就是这种情况,但我不确定。我发现有一些工具可以从 LLVM IR 生成控制流图,但这并不意味着它正在优化图。

所以,我的问题是“LLVM IR 是图表吗?”如果不是,它如何优化代码?直接代码到代码?

【问题讨论】:

标签: llvm compiler-optimization llvm-ir


【解决方案1】:

LLVM IR(以及它的后端形式,Machine IR)是一个传统的three-address code IR,因此从技术上讲,它不是某种意义上的图形 IR,例如sea-of-nodes IR 是。但它包含几个图结构:基本块图 (Control Flow Graph) 和数据依赖图 (SSA def-use chains),用于简化优化。此外,在后端的指令选择阶段,原始 LLVM IR 会临时转换为真正的图 IR - SelectionDAG

【讨论】:

  • 优秀的答案。只有一件事要补充:如何优化代码是每次传递的问题。 LLVM 通常不会回答这个问题,而是将其留给每次传递。大多数传递使用输入代码和一个或多个支持数据结构的组合,它们可以自己构建,get from an "analysis pass",如果传递特定于特定前端,则从前端构建。
  • @arnt 谢谢你的澄清!随意将其合并到此答案中或添加一个新答案(以便可以 +1)。
  • 非常感谢您的回答!
  • 感谢“节点海”的参考——正是我一直在努力寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-17
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
  • 2012-04-07
  • 2014-10-30
  • 1970-01-01
相关资源
最近更新 更多