11 2目标代码生成2_第1页
11 2目标代码生成2_第2页
11 2目标代码生成2_第3页
11 2目标代码生成2_第4页
11 2目标代码生成2_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,编译原理,第十一章代码生成,2,第十一章代码生成,目标代码形式代码生成着重考虑的问题一个简单代码生成器待用信息活跃信息寄存器描述信息变量地址描述信息代码生成算法,3,代码生成算法,对每个四元式:i:A:=BopC,依次执行:1.以四元式:i:A:=BopC为参数,调用函数过程GETREG(i:A:=BopC),返回一个寄存器R,用作存放A的寄存器。2.利用AVALUEB和AVALUEC,确定B和C现行值的存放位置B和C。如果其现行值在寄存器中,则把寄存器取作B和C,4,3.如果BR,则生成目标代码:LDR,BopR,C否则生成目标代码opR,C如果B或C为R,则删除AVALUEB或AVAL

2、UEC中的R。4.令AVALUEA=R,RVALUER=A。,代码生成算法,5,5.若B或C的现行值在基本块中不再被引用,也不是基本块出口之后的活跃变量,且其现行值在某寄存器Rk中,则删除RVALUERk中的B或C以及AVALUEB或AVALUEC中的Rk,使得该寄存器不再为B或C占用。,及时腾空,代码生成算法,6,寄存器分配:GETREG(i:A:=BopC)返回一个用来存放A的值的寄存器,1.尽可能用B独占的寄存器2.尽可能用空闲寄存器3.抢占非空闲寄存器,寄存器分配,7,寄存器分配:GETREG(i:A:=BopC)返回一个用来存放A的值的寄存器1如果B的现行值在某个寄存器Ri中,RVA

3、LUERi中只包含B,此外,或者B与A是同一个标识符,或者B的现行值在执行四元式A:=BopC之后不会再引用,则选取Ri为所需要的寄存器R,并转4;,1.尽可能用B独占的寄存器2.尽可能用空闲寄存器3.抢占非空闲寄存器,8,寄存器分配:GETREG(i:A:=BopC)返回一个用来存放A的值的寄存器1如果B的现行值在某个寄存器Ri中,RVALUERi中只包含B,此外,或者B与A是同一个标识符,或者B的现行值在执行四元式A:=BopC之后不会再引用,则选取Ri为所需要的寄存器R,并转4;2如果有尚未分配的寄存器,则从中选取一个Ri为所需要的寄存器R,并转4;,1.尽可能用B独占的寄存器2.尽可能

4、用空闲寄存器3.抢占非空闲寄存器,9,3从已分配的寄存器中选取一个Ri为所需要的寄存器R。最好使得Ri满足以下条件:占用Ri的变量的值也同时存放在该变量的贮存单元中,或者在基本块中要在最远的将来才会引用到或不会引用到。要不要为Ri中的变量生成存数指令?,1.尽可能用B所在的寄存器2.尽可能用空闲寄存器3.抢占非空闲寄存器,10,要不要为Ri中的变量生成存数指令?对RVALUERi中每一变量M,如果M不是A,或者如果M是A又是C,但不是B并且B也不在RVALUERi中,则(1)如果AVALUEM不包含M,则生成目标代码STRi,M(2)如果M是B,或者M是C但同时B也在RVALUERi中,则令A

5、VALUEM=M,Ri,否则令AVALUEM=M(3)删除RVALUERi中的M4给出R,返回。,3.如果BR,则生成目标代码:LDR,BopR,C否则生成目标代码opR,C如果B或C为R,则删除AVALUEB或AVALUEC中的R,11,例:基本块1.T:=A-B2.U:=A-C3.V:=T+U4.W:=V+U设W是基本块出口之后的活跃变量,只有R0和R1是可用寄存器,生成的目标代码和相应的RVALUE和AVALUE:,12,中间代码目标代码RVALUEAVALUE,T:=AB,U:=AC,V:=TU,W:=VU,LDR0,ASUBR0,B,R0含有T,T在R0中,LDR1,ASUBR1,C,R0含有TR1含有U,T在R0中U在R1中,ADDR0,R1,R0含有VR1含有U,V在R0中U在R1中,ADDR0,R1,R0含有W,W在R0中,ST

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论