LLVM
参考这篇博客:
https://www.kanxue.com/book-37-410.htm#%E8%B5%B7%E6%BA%90%E4%B8%8E%E5%8F%91%E5%B1%95。
1. LLVM编译器框架
LLVM编译器的大致组成如下:
- 不同语言编写的源文件被翻译成未被优化的LLVM IR
- LLVM IR经过优化生成优化后的LLVM IR
- 优化后的LLVM IR再翻译成具体的平台机器码
这里介绍一下IR是什么,IR全称为Intermediate Representation,指的是编译器对于源程序进行扫描后生成的内部表示,代表源程序的语义和语法结构,编译器的各个阶段都在IR上进行分析或优化变换,它对编译器的整体结构、效率和健壮性都有着极大的影响,并对编译器的可移植性以及代码生成起到关键作用。
不同的编译器的实现使用了不同的IR,并且可能使用不止一种IR。比如LLVM使用的是LLVM IR,GCC使用了AST/GENERIC、GIMPLE、RTL三种IR。
2. LLVM编译器总结
我们这里不考虑交叉编译,仅讨论在x86平台的编译情况。以C语言为例,C语言程序的编译器运行的平台为x86 cpu,编译后的C语言程序的执行平台是x86 cpu,编译器本身的运行方式是作为另外的可执行程序运行。总结以上三点是为了方便和后面文章中的GLSL语言还有OpenCL C语言做对比。如下所示:
编译器名字
|
LLVM CLANG
|
编译器作用
|
将C语言翻译成x86 cpu机器码
|
编译器运行平台
|
x86 cpu
|
编译后程序运行平台
|
x86 cpu
|
编译器运行方式
|
可执行程序
|
评论