LLVM Code Generator

LLVM Language Reference Manual

网上有很多翻译的很好的博客,这里直接借鉴过来学习

The LLVM Target-Independent Code Generator
  1. llvm目标无关的代码生成包含6个部分:
    include/llvm/Target:抽象目标描述接口,机器的各个方面重要特性的描述
    include/llvm/CodeGen:用来表示目标的代码生成的类,足够抽象以代表任何目标机器的机器码,常量池entries和跳转表在这里显示暴露。
    MC 层:用来表示目标文件级的代码 的类和算法,这些类表示组装级结构,如标签,section, 指令。这里没有常量池entries和跳转表。
    lib/CodeGen:用来实现本机代码生成的个阶段实现的目标无关的算法,寄存器分配,调度,堆栈帧表示等。
    lib/Target:特定机器抽象目标描述接口的实现。这些机器描述使用llvm提供的组件,为特定目标编译代码生成器。
    lib/ExecutionEngine/JIT:目标无关的JIT组件
  2. 根据你感兴趣的部分阅读对你有用的代码生成器的部分。
    target description and machinecode representation类:不管哪部分,都需要熟悉它们。
    implement the target decription类和llvm code representation(就是llvm language manual):为一个新目标写一个后端。
    target-description and machine code representation classes:实现一个新的代码生成器算法。
    3.代码生成器的高级设计步骤
    Instruction Selection:在目标指令集中表述输入的llvm代码,将llvm代码转化为一个目标指令的DAG(有向无环图)
    Scheduling and Formation:决定目标指令的DAG中的指令顺序,有序地将这些指令发射为MachineInstrs。
    SSA-based Machine Code Optimizations:包含一系列的机器代码优化,操作目标为由指令选择生成的SSA-form。
    Register Alloation:将目标代码从SSA形式的无数个虚拟寄存器文件转换成目标使用的具体寄存器文件。
    Prolog/Epilog Code Insertion:一旦函数的机器代码已经生成,栈空间数量的要求已知,序言和终止码可以被添加,抽象堆栈位置引用可以被消除。这个阶段负责框架指针消除和追斩打包等优化。
    Late Machine Code Optimizations:最终的机器码优化,如泄露代码调度和peephole优化。
    Code Emission:最后一步是为当前函数输出代码,以目标汇编格式或者机器码格式。
  3. Target description 类
    TargetMachine类:get*Info,如getInstrInfo getRegisterInfo getFrameInfo等,可被具体目标继承实现抽象类,DataLayout是唯一一个需要目标描述的类
    DataLayout类:描述目标如何为结构分配内存,不同数据类型的对齐方式,指针大小,目标是大端还是小端的。
    TargetLowering 类:被基于SelectionDAG的指令选择器用来描述如何将llvm代码降级为SelectionDAG操作:
    —-各种值类型的初始寄存器类
    —-目标机器天然支持的操作
    —-setcc(根据条件设置字节)操作返回的类型
    —-用于改变数量的类型
    —-各种高级特征,如可以将一个常量变成一个乘法序列是否是有利的
    TargetRegisterInfo类:描述目标的寄存器文件和寄存器间的交互。代码生成器中的寄存器用无符号整数表示,物理寄存器则是互不相同的小编号。寄存器0被保留作为标志值。除了per-register描述,TargetRegisterInfo类放出一组特定处理器的寄存器类,每一个寄存器类包含着相同特征的寄存器集合。每一个SSA中由指令选择器创建的虚寄存器有一个关联的寄存器类,当寄存器分配开始时,它会使用集合里的物理寄存器代替虚寄存器。这些类的特定目标实现由寄存器文件的TableGen描述自动生成。
    TargetInstrInfo类:描述目标支持的机器指令。它把握堆栈增长的方向,每个函数入口的已知的堆栈队列,局部位置的偏移。偏移指从函数入口处的堆栈指针到函数数据被存储的位置。
    TargetSubtarget类
    TargetJIT

5.
未完待续

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值