llvm编译器实战 第六章 后端

不错的后端讲解

1、LLVM 后端组织结构的概述

在这里插入图片描述
在这里插入图片描述
上图是整个后端的流程图。从LLVM IR开始一直到生成Assembly或者是Object code,涵盖了LLVM后端的整个过程。

代码生成器的不同阶段描述

(1)指令选择阶段:

在这里插入图片描述

(2)指令调度

在这里插入图片描述

(3)寄存器分配

在这里插入图片描述

(4)代码输出

在这里插入图片描述
在这里插入图片描述

后端代码结构

lib目录及其子文件夹CodeGen、MC、TableGen和Target
在这里插入图片描述

目标无关的代码生成器库

在这里插入图片描述

指令选择阶段介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、如何解释描述后端的各种TableGen文件

3、LLVM中的指令选择

4、指令调度和寄存器分配

在这里插入图片描述
从LLVM IR开始,直到Instruction selection环节的过程中的所有步骤,此图比较核心的部分,就是不断的和Target lowering不断的交互。这里涉及到了DAG中目标相关node和目标无关node。很多资料介绍后端的时候,在没生成Machine code instruction的时候,都叫平台无关或者目标无关,其实是不严谨的。从SelectionDAG nodes开始,已经开始有目标依赖的指令加入到DAG node。这也是Target lowering的主要作用,生成相关的目标依赖的指令。
在这里插入图片描述图3是Register allocation环节的内部流程,当然也包含了一个狭义的Register allocation环节。这里将包含了虚拟寄存器的MachineInstr最终转变为包含了物理寄存器的MachineInstr。

5、代码输出

在这里插入图片描述
图4表明了Code emission的整个过程。这个过程将MachineInst转化为MCInst,然后再根据需要转化为assembly或者是binary instruction(Object Code)。在这个过程之中,一个重点就是要明白MachineInst(MI)和MCInst的区别。MachineInst是Machine instructions,MCInst是machine code instructions。前者要比后者包含的信息更多一些,后者不光可以从后端生成,还可以通过binary code反汇编出来。

6、如何自定义后端编译流程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值