llvm/clang

llvm是一个底层编译器,它最大的优点是将后端和前端分开,所以广义的llvm指的是一个llvm前端,llvm中端和llvm后端。所以如果需要支持一种新语言,只需要实现一个新的前端;如果需要支持一个新的目标架构,只需要实现一个后端。前端和后端的纽带就是LLVM IR。

前端:将一个源程序转成一个LLVM IR的编译器过程:要经过语法分析器,词法分析器,语义分析器,LLVM IR生成器等,clang执行了与前端有关的一些步骤。

后端:用于汇编码和机器码的生成。将LLVM IR转换成目标架构的汇编代码或者二进制代码。

LLVM IR:中间表示,llvm优化器会对IR做优化。

llvm IR的中间表示有三种形式(1).ll(文本可读);(2).bc(二进制文件)(3)内存代码

       .ll文件结构;

        (1)Module(模板):是llvm IR的顶级容器,包含目标机器信息等信息。

        (2)function(函数):包含很多基本快。

        (3)basicblock(基本块):包含很多指令,基本块最后的指令会指向跳转的基本块。

        (4)instruction(指令):llvm ir中最小的可执行单位,没个指令占一行。

       .ll文件中的标识符:

                @为前缀的是全局变量;%为前缀的是局部变量。

                标识符以前缀为开头的两个原因:

                        (1)为了避免于保留关键字发生冲突,如果以后需要将关键字进行扩展,就不会产生麻烦。

                        (2)如果有没有命名的变量,可以直接命名,而不用担心与字符表发生冲突。

                局部变量的分类:

                (1)按照是否命名来分类;

                                命名类:如%a;

                                非命名类:编译器会自动按照阿拉伯数字生成,如%1;

                (2)按照分配方式分类:

                                寄存器分配的局部变量;%1 = some value;

                                栈分配的局部变量:%a = alloca value ;栈分配的局部变量,访问和存储只能用load和store。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值