LLVM-如何将AST转换为IR

LLVM-如何将AST转换为IR,llvm,llvm-clang,llvm-gcc,llvm-ir,Llvm,Llvm Clang,Llvm Gcc,Llvm Ir,我知道解析器生成的AST用于在前端生成IR 我想知道如何解析AST,然后将其转换为IR(prob汇编或位码) AST是一棵树,从AST到IR的转换涉及哪些步骤。从Clang AST发射LLVM IR发生在Clang的code gen阶段。此阶段的代码位于lib/CodeGen/(相对于Clang的源根)。不需要解析AST,因为Clang在内存数据结构中有AST。代码生成本质上是AST的递归遍历,它向模块发出IR。如果您对其中的任何特定步骤感兴趣,最好的检查方法是查看代码。谢谢Eli。请您再解释一

我知道解析器生成的
AST
用于在前端生成IR

我想知道如何解析AST,然后将其转换为IR(prob汇编或位码)


AST是一棵树,从AST到IR的转换涉及哪些步骤。

从Clang AST发射
LLVM IR
发生在Clang的
code gen
阶段。此阶段的代码位于
lib/CodeGen/
(相对于Clang的源根)。不需要解析AST,因为Clang在内存数据结构中有AST。代码生成本质上是AST的递归遍历,它向模块发出IR。如果您对其中的任何特定步骤感兴趣,最好的检查方法是查看代码。

谢谢Eli。请您再解释一下“将红外发射到模块中的AST行走”过程中发生了什么?我的意思是,AST如何转换为红外?那是一个映射文件还是别的什么?@Sam在这里详细解释这个过程会占用很多时间和空间,你最好通过yourself@MarcoA.,谢谢你的回复。能否给出一个非常简短的解释,以便我在深入研究代码之前有一个大致的了解?@Sam:mishr给出的链接是一个从简单AST发出LLVM IR的极好的简单示例。简单,因为输入语言很简单。真正的Clang AST表示的语言不是简单的(C++),因此对它们进行遍历也是非常复杂的。