基于LLVM的编译器三段式设计:
(1)前端Clang:负责对输入代码进行解析,对输入代码中的错误进行验证和诊断,然后将解析的代码转换成LLVM IR(源代码—AST—LLVM IR),包括词法分析器、语法分析器、语义分析器、LLVM IR代码生成器。
(2)优化器:对LLVM IR有选择性进行多遍分析和优化,生成执行速度更快的LLVM IR。具有两种文件表示形式,便于人工理解的.ll文件和二进制编码形式的.bc文件。
(3)后端:将LLVM IR转换成与目标架构相关的汇编代码
优点:
(1)编译器代码复用,若要支持新的编程语言,只需实现新的前端,优化器和后端可以复用;若要支持新的硬件设备,只需实现新的后端。
(2)使用统一的IR,对于新的语言或新的设备,优化器都无需修改。
LLVM主要