广义的LLVM其实就是指整个LLVM编译器架构,包括了前端、后端、优化器、众多的库函数以及很多的模块;而狭义的LLVM其实就是聚焦于编译器后端功能(代码生成、代码优化、JIT等)的一系列模块和库。
Clang其实大致上可以对应到编译器的前端,主要处理一些和具体机器无关的针对语言的分析操作
Source Code --- 前端 --- 优化器 --- 后端 --- Machine Code
这样支持一种新的编程语言只需重新实现一个前端,支持一种新的目标架构只需重新实现一个后端,前端和后端连接枢纽就是LLVM IR。
llvm后端负责进行将IR翻译成asm代码,对asm代码进行汇编生产目标平台程序(机器码)
工具:
llc命令将LLVM源输入编译为用于特定体系结构的汇编语言。 然后可以将汇编语言输出通过本机汇编器和链接器传递,以生成本机可执行文件。
链接器lld:将每个O文件合并成一个,将符号绑定到地址上。lld即LLVM的内置链接器。
备注:在2017年5月,lld已经支持ELF、PE/COFF、 和Mach-O。在lld支持不完全的情况下,用户可以使用其他项目,如GNU ld链接器。 lld支持链接时优化。当LLVM链接时优化被启用时,LLVM可以输出bitcode而不是本机代码,而本机代码生成由链接器优化处理。