LLVM新手入门:万花筒语言教程
需积分: 9 79 浏览量
更新于2024-08-30
收藏 214KB PDF 举报
"20200905-Kaleidoscope(第七期)-孙少策.pdf"
这篇文档是关于Kaleidoscope编程语言的 LLVM 新手入门教程,由孙少策分享。Kaleidoscope 是一个简单的玩具语言,常用于演示如何构建编译器前端和LLVM后端。LLVM是一个开源的编译器基础设施项目,提供了一套模块化的、高度可重用的编译器和工具链技术。
在教程中,作者首先介绍了如何定义和实现一个基本的乘法运算符(`mul`)。这里展示了LLVM IR(Intermediate Representation)代码,这是LLVM编译器内部使用的中间表示。IR代码如下:
```llvm
@mul(double %x, double %y) {
entry:
%y2 = alloca double, align 8
%x1 = alloca double, align 8
store double %x, double* %x1, align 8
store double %y, double* %y2, align 8
%x3 = load double, double* %x1, align 8
%y4 = load double, double* %y2, align 8
%multmp = fmul double %x3, %y4
ret double %multmp
}
```
这段代码定义了一个名为`mul`的函数,它接受两个双精度浮点数(`double`类型)作为参数,并返回它们的乘积。通过`alloca`指令分配内存,然后使用`store`指令存储参数值,接着使用`load`指令读取这些值,最后通过`fmul`指令进行浮点数乘法,并返回结果。
文档还展示了如何使用Clang编译器将C++源代码与生成的LLVM IR代码链接,创建并运行一个可执行程序。例如,`test.cpp`包含了调用`mul`函数的C++代码,而`output.o`是`mul`函数的LLVM IR编译结果。编译和链接过程如下:
1. 使用`clang++ -c test.cpp -o test.o` 编译`test.cpp`,生成未链接的目标文件`test.o`。
2. 使用`clang++ test.o output.o -o test` 链接`test.o`和`output.o`,生成可执行文件`test`。
3. 运行`./test`启动程序,用户可以输入两个数字并看到它们的乘积。
此外,文档还提到了其他LLVM相关的头文件,如`InstCombine`、`Scalar`和`GVN`等,这些都是LLVM优化框架的一部分。`InstCombine`包含了一系列用于合并和简化IR指令的工具,`Scalar`和`GVN`(Global Value Numbering)则涉及更高级的优化,如死代码消除、常量折叠、公共子表达式消除等。这些优化技术能够提高编译后代码的性能。
这篇文档提供了LLVM新手入门的指导,包括了自定义语言的编译到LLVM IR的过程,以及如何将IR代码与C++代码结合,创建完整的可执行程序。同时,还暗示了LLVM的优化能力,这对于理解LLVM编译器基础设施和开发自己的编译器或工具链非常有帮助。
点击了解资源详情
101 浏览量
点击了解资源详情
129 浏览量
101 浏览量
111 浏览量
127 浏览量
2019-09-18 上传
2019-09-18 上传
ppcust
- 粉丝: 38
- 资源: 728
最新资源
- ParaAloe
- 上学期高一年级组工作计划
- LBS^2 milw0rm模板
- angular2-test:Angular2游乐场
- 东方日报
- cat-and-mouse
- Hawk-GUI:Hawk的Web界面,用于在Web上存储,处理和显示报告
- aif-interactive-map-frontend:AIF交互式地图的前端代码
- make_dataset.rar
- 各种角度的路面裂痕.rar
- absoduler.js:绝对调度程序-事件调度程序实时同步多个设备
- 光子的颜色-项目开发
- git-app_test
- 国土所2014年工作计划
- PJBlog3 BeijingNO.1模板
- nucamp_bootstrap:Nucamp Bootstrap项目网站