20200828-Kaleidoscope(第四期)-孙少策.pdf
需积分: 0 155 浏览量
更新于2020-12-16
收藏 372KB PDF 举报
《LLVM新手入门教程——构建万花筒语言》
在编程世界中,LLVM是一个强大的编译器基础设施,它提供了一套工具集用于构建编译器、分析工具以及优化中间代码。Kaleidoscope是LLVM官方教程中设计的一个简单的编程语言,用于演示如何一步步构建一个编译器前端。这个教程通过实现万花筒语言(Kaleidoscope)的语法和功能,深入浅出地介绍了LLVM的基础知识。
万花筒语言的定义包括函数声明、外部函数调用和条件语句。例如,`extern printd(x);` 是对外部函数 `printd` 的声明,它接受一个双精度浮点数作为参数。`Read extern: declare double @printd(double)` 表示这个声明在LLVM IR(Intermediate Representation)中是如何表示的。
接着,`smaller` 函数展示了如何使用LLVM IR来实现条件分支。在LLVM IR中,`fcmp ult` 是浮点数的无符号小于比较操作,`fcmp` 指令用于比较浮点数,`ult` 是"unsigned less than"的缩写。`fcmp ult double %x, %y` 比较 `%x` 和 `%y` 是否满足 `%x` 小于 `%y` 的条件,返回一个布尔值 `i1`。如果 `%x` 小于 `%y`,则执行 `%then` 标签的代码,否则执行 `%else` 标签的代码。`br i1 %cmptmp, label %then, label %else` 是LLVM IR中的分支指令,根据 `%cmptmp` 的布尔值决定跳转到哪个标签。
在 `smaller` 函数的主体中,`%cmptmp = fcmp ult double %x, %y` 进行了比较,然后根据结果执行相应的分支。`then:` 和 `else:` 分别是两个可能的分支,它们通过 `br` 指令连接,并在每个分支末尾使用 `br label %ifcont` 回到相同的合并点 `%ifcont`。在这里,我们看到了LLVM IR中的 Phi节点(%iftmp = phi double [ %calltmp, %then ], [ %calltmp1, %else ]),它是LLVM IR中处理控制流合并的一种方式,它将不同路径上的值融合在一起。
LLVM IR提供了丰富的运算符和指令,如浮点数比较的`fcmp`指令,以及控制流程的`br`指令,使得我们能够构建复杂的控制结构。此外,`fcmp`指令还支持多种比较模式,如`oeq`(等于),`olt`(小于),`one`(不等于)等,可以满足各种比较需求。对于涉及浮点数的比较,还需要考虑NaN(Not a Number)的情况,`ordered`和`unordered`标志就是用来处理这种特殊情况的。
通过Kaleidoscope语言的学习,我们可以理解LLVM IR的基本构造和控制流的表示,这对于进一步学习和使用LLVM进行编译器开发或代码优化是非常有价值的。通过实践这个教程,开发者能够掌握LLVM IR的基础,并为构建自己的编译器或分析工具打下坚实的基础。
ppcust
- 粉丝: 38
- 资源: 728
最新资源
- 前端分析-2023071100789
- 基于纯手工HTML与CSS构建的田东家乡介绍网站设计源码
- 基于鸿蒙操作系统的芯片评估板自检系统源码
- manatee电磁噪声振动计算softwareManatee 1.09 电机电磁振动噪声NVH终结者 带教程,带教程,带教程重要的话说3遍 史上最强后处理软件,甩jmag、Maxwell、flux几
- 基于Python的Django框架开发的subaoApi设计源码
- 基于Owin+融云的LayIM3.0 .NET版本设计源码
- 单向光伏并网逆变器 图一单向光伏并网逆变器整体结构图 图二并网电流与电压曲线图 图三mppt控制最大功率追踪图 图四直流母线电压曲线图
- 基于Python Django框架的旅游网站后端设计源码
- 基于Kotlin语言的Gradle统一依赖管理设计源码
- 基于PyQt5框架的ExcelDiffer设计源码
- COMSOL裂缝地层的THM耦合,离散裂缝模型,随机复杂裂缝,适合地热能研究 增强地热系统,热流固耦合的开采过程
- 基于2020.02.06快照的xadmin JavaScript/Python/HTML/CSS/Shell五语言混合设计源码
- 基于Vue框架的计算机协会招新系统前端微服务设计源码
- BUCK多种控制策略对比 图一BUCK主电路图与控制策略方法 图二采用开环控制波形 图三开环调节过程 图四单电压闭环控制波形 图五单电压调节过程
- 永磁同步电机(PMSM)MATLAB仿真 直接转矩控制 转速外环 转矩跟磁链内环控制 转矩脉动去下图 能够明显减小电机转矩脉动
- 基于JavaScript的UscIoV跨链交互区块链平台设计源码