欢迎来到天天文库
浏览记录
ID:51593156
大小:121.00 KB
页数:15页
时间:2020-03-25
《编译原理课件(hdu)CHAPTER10(Code Generation).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Chapter10CodeGeneration代码生成器(CodeGenerator)运行时存储管理(Run-timestoragemanagement)关于寄存器分配(Registerallocation)简单代码生成算法(ACode-GenerationAlgorithm)7/23/2021110代码生成代码生成器P513Fig.9.1输入:(经优化后的)三地址代码、符号表输出:目标代码7/23/2021210代码生成目标代码的形式绝对机器语言代码都是绝对地址,放在内存的固定地方,可立即执行可重定位的机器语言代码可重定位的多个目标模块,需经连接装配,然后执行汇编
2、语言代码生成比较容易,但需汇编7/23/2021310代码生成运行时存储管理上一讲内容的具体实现P522-528Fig.9.4—9.67/23/2021410代码生成关于寄存器分配只考虑在一个基本块内如何分配寄存器以提高代码的运行效率分配的原则:计算引用的变量值和计算结果尽量放在寄存器中,直到寄存器不够用在离开基本块前将寄存器的内容放到内存中在一个基本块内后边不再被引用的变量所占用的寄存器应尽早释放7/23/2021510代码生成下次引用信息:x在语句I中定值x能够到达J语句,J中引用了x称J是I中变量x的下次引用信息同时,称x在点I是活跃的(因为在后面会被引用)7
3、/23/2021610代码生成获取基本块内每个变量的下次引用信息和活跃信息符号表中每个变量的记录项都有下次引用信息栏和活跃信息栏假设每个变量在出口处活跃,临时变量不活跃从基本块的出口处向前扫描每一条三地址语句具体步骤如下:7/23/2021710代码生成1、置初值,对每个变量置为“无下次引用”,“活跃”或“非活跃”2、从基本块出口向前扫描每条三地址代码(I:x:=yopz)(1)把变量x的下次引用信息和活跃信息附加到语句标号I上7/23/2021810代码生成(2)把变量x的下次引用信息栏和活跃信息栏分别置为“无下次引用”和“非活跃”(3)把变量y和z的下次引用信息
4、和活跃信息附加到语句标号I上(4)把变量y和z的下次引用信息栏置为“I”,活跃信息栏置为“活跃”7/23/2021910代码生成例子:(P539)基本块含有下面四条代码,A、B、C、D是变量,T、U、V是临时变量(1)T:=A-B(2)U:=A-C(3)V:=T+U(4)D:=V+U7/23/202110变量名下次引用信息活跃信息初值初值AF(2)(1)LLLBF(1)LLCF(2)LLDFFLFTF(3)FFLFUF(4)(3)FFLLFVF(4)FFLF7/23/20211110代码生成表中列从左向右变化是从后向前扫描三地址代码的结果,F表示“无下次引用”和“非
5、活跃”,L表示“活跃”标记了下次引用信息和活跃信息的三地址代码:(1)T[(3)L]:=A[(2)L]–B[FL](2)U[(3)L]:=A[FL]–C[FL](3)V[(4)L]:=T[FF]+U[(4)L](4)D[FL]:=V[FF]+U[FF]7/23/20211210代码生成简单代码生成算法只考虑一个基本块范围内的目标代码生成寄存器描述器(针对每个寄存器)——记录每个寄存器的当前内容地址描述器(针对每个运行时刻名字)——记录每个名字存放的一个或多个地址寄存器描述器和地址描述器的具体实现(采用何种数据结构)不考虑7/23/20211310代码生成算法:P53
6、7函数getregP538例子:P539example9.5Fig9.107/23/202114TheEnd!7/23/202115
此文档下载收益归作者所有