LLVM IR 是一个图吗?
Is LLVM IR a graph?
我正在编译器优化领域开始新的研究。
首先,我正在研究几篇不同的相关论文,并遇到了一些不同的优化技术。
我目前关注的一个主要问题是编译器将输入源代码转换为图形(例如控制流、数据流、链表等),然后对图形进行优化的技术并产生机器码。代码到图形到代码。例如,JavaScript 引擎中的 JIT 编译器,即 V8、ChakraCore 等
然后,我遇到了 LLVM IR。由于较早的搜索,我对代码优化的印象是在如上所述的图表上进行。但是,我不相信 LLVM 会出现这种情况,但我不确定。我发现有一些工具可以从 LLVM IR 生成控制流图,但这并不意味着它正在优化图。
所以,我的问题是“LLVM IR 是一个图吗?”如果没有,它如何优化代码?直接代码到代码?
LLVM IR(及其后端形式,Machine IR)是传统的 three-address code IR so technically is not a graph IR in the sense e.g. sea-of-nodes IR is. But it contains several graph structures in it: a graph of basic blocks (Control Flow Graph) and a graph of data dependencies (SSA def-use chains) which are used to simplify optimizations. In addition, during instruction selection phase in backend original LLVM IR is temporarily converted to a true graph IR - SelectionDAG。
我正在编译器优化领域开始新的研究。 首先,我正在研究几篇不同的相关论文,并遇到了一些不同的优化技术。
我目前关注的一个主要问题是编译器将输入源代码转换为图形(例如控制流、数据流、链表等),然后对图形进行优化的技术并产生机器码。代码到图形到代码。例如,JavaScript 引擎中的 JIT 编译器,即 V8、ChakraCore 等
然后,我遇到了 LLVM IR。由于较早的搜索,我对代码优化的印象是在如上所述的图表上进行。但是,我不相信 LLVM 会出现这种情况,但我不确定。我发现有一些工具可以从 LLVM IR 生成控制流图,但这并不意味着它正在优化图。
所以,我的问题是“LLVM IR 是一个图吗?”如果没有,它如何优化代码?直接代码到代码?
LLVM IR(及其后端形式,Machine IR)是传统的 three-address code IR so technically is not a graph IR in the sense e.g. sea-of-nodes IR is. But it contains several graph structures in it: a graph of basic blocks (Control Flow Graph) and a graph of data dependencies (SSA def-use chains) which are used to simplify optimizations. In addition, during instruction selection phase in backend original LLVM IR is temporarily converted to a true graph IR - SelectionDAG。