我正在编译器优化领域开始新的研究。首先,我正在研究几篇相关的不同论文,并遇到了一些不同的优化技术。
我目前正在研究的一个主要事情是编译器的技术,将输入源代码转换为图形(例如控制流、数据流、链表等),然后对图形执行优化并生成机器代码. 代码到图形到代码。例如,JavaScript 引擎中的 JIT 编译器,即 V8、ChakraCore 等。
然后,我遇到了 LLVM IR。由于较早的搜索,我对代码优化的印象是在上面解释的图形上进行。但是,我不相信 LLVM 是这种情况,但我不确定。我发现有一些工具可以从 LLVM IR 生成控制流图,但这并不意味着它正在优化图。
所以,我的问题是“LLVM IR 是图形吗?” 如果不是,它如何优化代码?直接代码到代码?
LLVM IR(及其后端形式,Machine IR)是传统的三地址代码 IR,因此从技术上讲,它不是图 IR,例如节点海 IR。但它包含几个图结构:基本块图(控制流图)和数据依赖图(SSA def-use 链),用于简化优化。此外,在后端的指令选择阶段,原始 LLVM IR 临时转换为真实图 IR- SelectionDAG。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句