LLVM IR 理解
LLVM IR有三个不同的形式:
内存中编译中间语言(IR)
保存在硬盘上的 bitcode(.bc
文件,适合快速被一个 JIT 编译器加载)
一个可读性的汇编语言表示(.ll
文件)。
LLVM为高效编译转换和分析,提供一个强大的中间表示。LLVM 的三种不同的形式都是等价的。以下是三种表示的转化方式。
LLVM 语言在轻量、底层、同时富有表现力,类型化,易于扩展。LLVM IR 语言目标是成为一种"通用中间语言",通过足够低层次,使高级语言可以清晰的映射。通过提供类型信息,LLVM IR 语言可作为优化的目标:
例如,通过指针分析,可以证明,一个 C 自动变量,从不当前函数之外访问,允许被提升到一个简单的 SSA 值,而不是一个堆变量。
LLVM接口构建IR代码
LLVM提供很多API,用于操作IR。使用这些接口,直接在内存中生成IR,直接运行,输出结果。(开发一种新的编程语言,完成词法语法解析后,利用LLVM 接口生成有效的中间代码,很快编译到目标平台上。)
LLVM IR 结构:
llvm是编译器后端,前端词语法分析,要生成机器代码。首先定义一个虚拟机,生成字节代码,将代码转化成对应系统结构。编译过程中,加入了流程控制,让开发者介入。
开发一种新的编程语言,在词法,语法解析完成后,生成中间代码,然后优化,最后编译成目标机器码。llvm 中间代码,效率高,可读性好。按照语法规则,利用llvm操作IR接口,生成等价的IR。如何编译成目标代码呢?llvm不仅仅是虚拟机,实现了模块化的优化策略和多种后端,后面都交给llvm。
总之:开发一种新编程语言,需要完成词法和语法解析,根据接口,生成可用的IR。
LLVM IR编译归纳图