编译原理 教学课件 作者 康慕宁 林奕 讲稿_8.ppt

编译原理 教学课件 作者 康慕宁 林奕 讲稿_8.ppt

ID:50066906

大小:648.00 KB

页数:51页

时间:2020-03-08

编译原理 教学课件 作者 康慕宁 林奕 讲稿_8.ppt_第1页
编译原理 教学课件 作者 康慕宁 林奕 讲稿_8.ppt_第2页
编译原理 教学课件 作者 康慕宁 林奕 讲稿_8.ppt_第3页
编译原理 教学课件 作者 康慕宁 林奕 讲稿_8.ppt_第4页
编译原理 教学课件 作者 康慕宁 林奕 讲稿_8.ppt_第5页
资源描述:

《编译原理 教学课件 作者 康慕宁 林奕 讲稿_8.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、第8章代码生成内容代码生成的基本功能代码生成的不同方式代码生成的关键技术指令筛选指令调度寄存器分配代码生成和软件调试8.1代码生成的基本功能代码生成技术就是将由各种中间表示所记录的程序信息最终映射到特定硬件或虚拟机平台所提供的指令和资源的关键技术8.2代码生成的不同方式生成汇编代码生成绝对地址的目标代码生成浮动地址的目标代码8.3代码生成的关键技术简介希望编译器不依赖于具体硬件平台因此,一般要求中间语言不依赖于硬件平台生成代码时,必须考虑硬件平台的特性指令集机器体系结构(决定指令的执行开销与代价)寄存器中间代码与目标代码的异同第一

2、,中间代码指令到机器指令的映射不是一一对应的,且机器指令集通常支持多种不同的寻址方式。第二,调整一个指令序列中部分指令的执行顺序,有可能在保证与原指令序列语义相同的同时,提高系统的运行速度或降低对资源的要求(如要求更少的寄存器)。第三,中间代码不使用寄存器,或假设寄存器的数量是无限的。第四,底层硬件可能提供硬件并行计算能力,必须生成能够使这些硬件资源效率充分发挥的目标代码序列。8.3.3指令筛选技术简介对于同一种操作,通常存在不止一种指令序列能够完成相同的功能以上指令序列都可完成x=x*2但不同的指令序列引起的执行代价却可能存在很

3、大差别指令筛选的主要任务,就是按照某种准则(更快、占用空间更小、功耗更低等),选取一种代价较小的指令序列来作为中间表示的代码实现方案。关于指令选择,主要可采用基于树的模式匹配等技术完成,窥孔优化技术和BURS(Bottom-UpRewritingSystem,自底向上重写系统)技术可用于设计有效的指令筛选器。指令筛选的基本思想和技术(1)指令的树表示由于抽象语法树可以提供更多地选择机会,更有利于得到高效的指令序列,因此下面以基于树重写的方法为例,对指令筛选技术的基本思想进行简要介绍。指令筛选的例子指令筛选的例子指令筛选的例子抽象语

4、法树的例子x=b+4*c[5]自底向上的树重写系统(BottomUpRewritingSystem)的基本思想BURS技术(BottomUpRewritingSystem)对抽象语法树进行遍历。在遍历的过程中,根据每个节点的类型,与各指令的抽象树结构进行匹配。如果匹配,则在该节点处增加标记,直至所有可能的标记都被识别。指令序列生成和筛选通过上述技术,得到标记后的抽象语法树遍历抽象语法树,根据不同指令序列的代价,选择恰当的序列作为生成的结果。计算代价的结果例子:指令筛选的结果Load_Const5,R1--------代价1Load

5、_Addrc,R2--------代价3Add_Scaled_Regsizeof(int),R1,R2,R3--------代价4Load_MemByRegR3,R4--------代价3Load_Const4,R5--------代价1Mult_RegR4,R5,R6--------代价4Add_Memb,R6,R7--------代价3MovR7,x--------将表达式的结果存入变量中指令筛选的说明(1)二元指令的情况IntelCPU等指令集中,二元指令非常常见。如二元加法指令“addr1,r2”由于这一原因,直接使用这种

6、二元指令将导致对寄存器的直接分配和插入额外的内存操作。而这一工作本来应该由寄存器分配器负责。因此,为了使代码生成器的结构更加清晰,并提供更多优化的机会,指令筛选时一般都采用类似四元式的中间表示。由于寄存器分配由单独的阶段完成,因此在进行指令筛选时,假设机器可以提供无限多个寄存器。当进行寄存器分配时,分配算法将根据实际CPU的寄存器数量,对这些寄存器进行重新分配。指令筛选的说明(2)寄存器命名问题仅利用上面介绍的树重写技术,无法处理图8-2中x*2的后两种翻译。但是,我们完全可以增加特定的处理机制来识别运算方式的转换:当发现x*2的

7、两个操作数中保含2时,可以明确知道其可以翻译为多个加法或左移运算。此后,仍可继续使用树重写技术继续处理其他部分的内容。指令筛选的说明(3)多种实现方式完成相同功能指令筛选的说明(4)从三地址伪指令到二地址指令的映射把三地址指令转换为二地址指令是比较直观的。可以采用如下方式:Add_RegR1,R2,R3=>MovR’,R1/*增加一个新的寄存器R’*/AddR1,R2/*R1+R2R1*/MovR3,R1/*R1+R2R3*/MovR1,R4/*恢复R1的旧值*/如果R1在此后不再使用,则新增的MovR’,R1将成为多于的指令

8、。对此,可重复执行代码优化算法进行无用指令的消除。线性窥孔优化是针对线性代码的优化技术,也可用于指令筛选。窥孔优化通过扫描线性代码中一个窗口内的代码段,识别潜在优化点并进行代码改进。窥孔优化可以将BURS生成的指令序列进行改进。指令筛选的说明(5)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。