网站大量收购闲置独家精品文档,联系QQ:2885784924

编译方法、技术与实践 课件 第五章 目标代码生成.pdf

编译方法、技术与实践 课件 第五章 目标代码生成.pdf

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第五章目标代码生成

提纲

◼代码生成概要

◼指令集架构

◼基本块与流图

◼指令选择算法

◼寄存器分配算法

◼窥孔优化

◼代码生成器构建

代码生成器的位置

•根据中间表示生成代码

•代码生成器之前可能有一个优化组件

•代码生成器的三个主要任务

–指令选择:选择适当的指令实现IR语句

–寄存器分配和指派:把哪个值放在哪个寄存器中

–指令排序:按照什么顺序安排指令执行

代码生成器中的问题

◼正确性、易于实现、测试和维护

◼输入IR的选择

四元式、三元式、字节代码、堆栈机代码、后缀表示、

抽象语法树、DAG、…

◼目标程序

RISC、CISC、可重定向代码、汇编语言、堆栈机

◼指令选择

影响因素:IR层次、指令集特性、目标代码质量

◼寄存器分配和指派

◼求值顺序

提纲

◼代码生成概要

◼指令集架构

◼基本块与流图

◼指令选择算法

◼寄存器分配算法

◼窥孔优化

◼代码生成器构建

目标语言

◼三地址机器的模型

目标语言

◼三地址机器的模型

◼指令集

加载:LDdst,addr

◼把地址addr中的内容加载到dst所指寄存器

保存:STx,r

◼把寄存器r中的内容保存到x中

目标语言

◼三地址机器的模型

◼指令集

加载:LDdst,addr

◼把地址addr中的内容加载到dst所指寄存器

保存:STx,r

◼把寄存器r中的内容保存到x中

计算:OPdst,src1,src2

◼把src1和scr2中的值运算后将结果存放到dst中

无条件跳转:BRL

◼控制流转向标号L的指令

条件跳转:Bcondr,L

◼对r中的值进行测试,如果为真则转向L

提纲

◼代码生成概要

◼指令集架构

◼基本块与流图

◼指令选择算法

◼寄存器分配算法

◼窥孔优化

◼代码生成器构建

基本块和流图

◼中间代码的流图表示法

中间代码划分成为基本块(basicblock)

◼控制流只能从第一个指令进入

◼除基本块的最后一个指令外,控制流不会跳转/停机

结点:基本块

边:指明了基本块的执行顺序

◼流图可以作为优化的基础

指出了基本块之间的控制流

可以根据流图了解到一个值是否会被使用等信息

划分基本块的算法

◼输入:三地址指令序列

◼输出:基本块的列表

◼方法:

确定基本块的首指令

◼第一个三地址指令

◼任意一个条件或无条件转移指令的目标指令

◼紧跟在一个条件/无条件转移指令之后的指令

确定基本块

◼每个首指令对应于一个基本块:从首指令开始到下一

个首指令

基本块划分的例子

◼第一个指令

1

◼跳转指令的目标

3、2、13

◼跳转指令的下一条指令

10、12

◼基本块:

1-1;2-2;3-9;10-11;

12-12;13-17

练习

(1)b=1

(2)n=10

(3)d=l+n

(4)c=2

(5

您可能关注的文档

文档评论(0)

balala11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档