浅谈编译(一)

gewenbin
gewenbin
gewenbin
188
文章
15
评论
2020年12月26日19:22:12 评论 489

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
编译器运行方式
可执行程序

 

gewenbin
  • 本文由 发表于 2020年12月26日19:22:12
  • 转载请务必保留本文链接:http://www.databusworld.cn/9809.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: