版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、代碼生成 代碼生成 代碼生成的輸入 各種中間代碼形式 目標代碼與目標機器模型 簡單的代碼生成器 基本塊dag圖及代碼生成 目標代碼 絕對地址目標代碼 可重定位的目標 linker/loader 匯編代碼 assembler 目標機器模型 指令形式 op 源,目的 尋址模式 絕對地址:op m, r r op (m)r 寄存器:op r1,r2 r2 op r1 r2 變址:op r1,c(r2) (c+r2) op r1 (c+r2) 間接變址、間接寄存器 直接量 op $c, r r + c r 簡單代碼生成器 寄存器描述 記錄寄存器的使用情況,即某寄存器中存放 的是哪(些)個名字(變量)的
2、值。 名字地址描述 名字(變量)的當前值的存放場所,如放在 寄存器或主存(數(shù)據(jù)區(qū))或者棧里等。 簡單代碼生成器(續(xù)) 代碼生成算法 對基本塊中三地址代碼,p: x := y op z, 1)調(diào)用函數(shù)getreg( ),返回存放計算結果的場所l(一般 為寄存器r,也可能是存儲單元); 2)若y的值不在l中,產(chǎn)生指令:mov y, l (查y的名字地 址描述獲得y值的存放場所y); 3)產(chǎn)生指令:op z,l ( z是z值的存放場所),修改x的 名字描述和相關寄存器描述; 4)若y和/或z在p之后不再引用、出口不活躍且其值在寄存 器中,則修改其相應寄存器和名字地址描述; 5)在塊出口處,將所有活躍
3、名字值刷新到相應存儲單元。 簡單代碼生成器(續(xù)) 函數(shù)getreg(p:x := y op z): 返回計算結果存放場所l, 1)若某寄存器r僅含y的值且p后不再引用和不活 躍,則返回r;(好處是可以省掉裝載y值的指 令mov y,l) 2)返回某個空閑寄存器r; 3)若x必須使用寄存器,則此時“搶占”某個寄 存器r。 查看r的描述,如果名字a的值在r中 則產(chǎn)生轉儲指令mov r,ma (ma:a的存儲單 元),并修改相應的描述;(關鍵是如何搶占 及剝奪哪些名字的寄存器使用權) 4)使用x的存儲單元 e.g.1 簡單代碼生成 三地址碼序列: t := a b u := a + c v := t
4、 + u w:= v + u 可用寄存器r0,r1 初始,名字a、b和c的值均在相應存儲單元中 tac目標代碼reg name t:=a-bmov a, r0 sub b, r0 r0含t t在r0 u:=a+c mov a, r1 r0含t t在r0 add c, r1 r1含u u在r1 v:=t+u add r1, r0 r0含v v在r0 r1含u u在r1 w:=v+u add r1, r0 r0含w w在r0 e.g.1 簡單代碼生成 其它語句的代碼生成 語句 i 在ri i 在mi i 在棧中 a := bi mov b(ri),r mov mi,r mov si(bp),r m
5、ov b(r),r mov b(r),r ai := b mov b,a(ri) mov mi,r mov si(bp),r mov b,a(r) mov b,a(r) si是i在棧中偏移,bp是當前活動記錄基址。 指針操作語句:a := * b *a := b 轉移語句 goto x jmp x if x op y goto z 根據(jù)寄存器內(nèi)容是否滿足以下條件: 負、零、正、非負、非零、非正 如 if x y goto z : y x r 判別r非負(實施轉移) 根據(jù)條件碼轉移 如 if x x則轉z at i = 0; /printf(%ldn, (i=i+1)+(i=i+1)+(i=i+
6、1); case 1 /printf(%ldn, (+i)+(+i)+(+i); case 2 /printf(%ldn, (i+)+(i+)+(i+); case 3 return 0; case 1 case 2 case 3 movl $0,-4(%ebp) movl -4(%ebp),%edx incl %edx movl %edx,%eax movl %eax,-4(%ebp) movl -4(%ebp),%edx incl %edx movl %edx,%ecx movl %ecx,-4(%ebp) addl %ecx,%eax movl -4(%ebp),%edx incl %e
7、dx movl %edx,%ecx movl %ecx,-4(%ebp) addl %ecx,%eax pushl %eax pushl $.lc0 call printf movl $0,-4(%ebp) incl -4(%ebp) incl -4(%ebp) movl -4(%ebp),%eax movl -4(%ebp),%edx addl %edx,%eax incl -4(%ebp) addl -4(%ebp),%eax pushl %eax pushl $.lc0 call printf movl $0,-4(%ebp) movl -4(%ebp),%eax movl -4(%eb
8、p),%edx addl %edx,%eax movl %eax,%edx addl -4(%ebp),%edx pushl %edx incl -4(%ebp) incl -4(%ebp) incl -4(%ebp) pushl $.lc0 call printf 基本塊的dag圖示 基本塊內(nèi)優(yōu)化變換 合并已知量 刪除冗余運算公共子表達式 刪除死代碼 基本塊dag構造 (不考慮別名、數(shù)組或指針) 對于每條語句:x := y op z (1)分別尋找代表y或z的當前值的結點,若沒有 的話,構造它們的初始結點; (2)利用已有的算符op的結點或新建一個op結點 (左、右子樹分別標記為y和z),將
9、x標記在旁邊; (3)如果x在其他結點邊上有標記(x0 x的初始值 除外),則去除這個標記; (4)x := y ,不必建立新結點而將x標記在y對應的 結點旁。 基本塊dag構造 4 i0 * t1 (1)t1 := 4 * i (2)t2 := a t1 (3)t3 := 4 * i (4)t4 := b t3 (5)t5 := t2 * t4 (6)t6 := prod + t5 (7)prod := t6 (8)t7 := i + 1 (9)i := t7 (10)if i = 20 goto (1) 基本塊dag構造 (1)t1 := 4 * i (2)t2 := a t1 (3)t3
10、 := 4 * i (4)t4 := b t3 (5)t5 := t2 * t4 (6)t6 := prod + t5 (7)prod := t6 (8)t7 := i + 1 (9)i := t7 (10)if i = 20 goto (1) 4 i0 *t1 a =t2 基本塊dag構造 (1)t1 := 4 * i (2)t2 := a t1 (3)t3 := 4 * i (4)t4 := b t3 (5)t5 := t2 * t4 (6)t6 := prod + t5 (7)prod := t6 (8)t7 := i + 1 (9)i := t7 (10)if i = 20 goto
11、(1) 4 i0 * t1,t3 a =t2 基本塊dag構造 (1)t1 := 4 * i (2)t2 := a t1 (3)t3 := 4 * i (4)t4 := b t3 (5)t5 := t2 * t4 (6)t6 := prod + t5 (7)prod := t6 (8)t7 := i + 1 (9)i := t7 (10)if i = 20 goto (1) 4 i0 * t1,t3 a =t2 b =t4 基本塊dag構造 (1)t1 := 4 * i (2)t2 := a t1 (3)t3 := 4 * i (4)t4 := b t3 (5)t5 := t2 * t4 (6
12、)t6 := prod + t5 (7)prod := t6 (8)t7 := i + 1 (9)i := t7 (10)if i = 20 goto (1) 4 i0 * t1,t3 a =t2 b =t4 *t5 基本塊dag構造 (1)t1 := 4 * i (2)t2 := a t1 (3)t3 := 4 * i (4)t4 := b t3 (5)t5 := t2 * t4 (6)t6 := prod + t5 (7)prod := t6 (8)t7 := i + 1 (9)i := t7 (10)if i = 20 goto (1) 4 i0 * t1,t3 a =t2 b =t4
13、*t5 + prod0 t6 基本塊dag構造 (1)t1 := 4 * i (2)t2 := a t1 (3)t3 := 4 * i (4)t4 := b t3 (5)t5 := t2 * t4 (6)t6 := prod + t5 (7)prod := t6 (8)t7 := i + 1 (9)i := t7 (10)if i = 20 goto (1) 4 i0 * t1,t3 a =t2 b =t4 *t5 + prod0 t6,prod 基本塊dag構造 (1)t1 := 4 * i (2)t2 := a t1 (3)t3 := 4 * i (4)t4 := b t3 (5)t5 :
14、= t2 * t4 (6)t6 := prod + t5 (7)prod := t6 (8)t7 := i + 1 (9)i := t7 (10)if i = 20 goto (1) 4 i0 * t1,t3 a =t2 b =t4 *t5 + prod0 t6,prod 1 + t7 基本塊dag構造 (1)t1 := 4 * i (2)t2 := a t1 (3)t3 := 4 * i (4)t4 := b t3 (5)t5 := t2 * t4 (6)t6 := prod + t5 (7)prod := t6 (8)t7 := i + 1 (9)i := t7 (10)if i = 20
15、 goto (1) 4 i0 * t1,t3 a =t2 b =t4 *t5 + prod0 t6,prod 1 + t7,i 基本塊dag構造 (1)t1 := 4 * i (2)t2 := a t1 (3)t3 := 4 * i (4)t4 := b t3 (5)t5 := t2 * t4 (6)t6 := prod + t5 (7)prod := t6 (8)t7 := i + 1 (9)i := t7 (10)if i = 20 goto (1) 4 i0 * t1,t3 a =t2 b =t4 *t5 + prod0 t6,prod 1 + t7,i20 = (1) 基本塊dag構造
16、 (1)t1 := 4 * i (2)t2 := a t1 (3)t3 := 4 * i (4)t4 := b t3 (5)t5 := t2 * t4 (6)t6 := prod + t5 (7)prod := t6 (8)t7 := i + 1 (9)i := t7 (10)if i = 20 goto (1) (1)t1 := 4 * i (2)t2 := a t1 (3)t4 := b t1 (4)t5 := t2 * t4 (5)prod := prod + t5 (6)i := i + 1 (7)if i = 20 goto (1) dag優(yōu)化后 特殊情況下(副作用)注銷節(jié)點 f數(shù)組元素 f指針訪問 f過程調(diào)用 f多變量共享存貯 基本塊dag構造 基本塊dag構造 x := a i a j := y z := a i x := a i z := x a j := y dag優(yōu)化后 但如果 在 i=j 且 ai y時,變換前后語義不等價。 解決方案:在構造a i 或a j 時,注銷所有=或= 節(jié)點,即不利用已有節(jié)點(做為公共子表達式), 而構造一個新的節(jié)點。 由dag生成代碼 dag中節(jié)點重
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合伙合同糾紛審理思路
- 2025年山南貨運資格證考題
- 2025年南通a2貨運資格證考試題
- 2025年西寧年貨運從業(yè)資格證
- 2025年長春貨運資格證模擬考試題庫下載
- 《蜱螨及蜱螨病》課件
- 房地產(chǎn)銷售班組實名管理
- 石材助理勞動合同范例
- 招標投標流程優(yōu)化保證
- 大型游樂場預應力施工合同
- 《基于Halbach分布的初級永磁直線電機的電磁設計與分析》
- 紀檢委員工作職責
- 2024年辦公室檔案管理工作總結模版(3篇)
- 2025年小學五年級數(shù)學(北京版)-分數(shù)的意義(三)-3學習任務單
- 網(wǎng)絡信息安全工程師招聘面試題及回答建議(某大型央企)2025年
- 2024年煤礦個人工作總結例文(4篇)
- 兒童青少年肥胖食養(yǎng)指南(2024年版)
- 數(shù)字化轉型成熟度模型與評估(DTMM)國家標準解讀 2024
- 河南省名校八校聯(lián)考2024-2025學年高二上學期期中模擬考試語文試題(含答案解析)
- 聘請專家的協(xié)議書(2篇)
- 《新的實驗》教學課件1
評論
0/150
提交評論