【正文】
成 ? 代碼生成要考慮的主要問題 ? 基本塊的代碼生成 (在一個基本塊范圍內(nèi)考慮如何充分利用寄存器的問題 ) ? 從 dag生成代碼 l 代碼生成要考慮的主要問題 ——具體細(xì)節(jié)依賴于目標(biāo)機器和操作系統(tǒng) 共同的問題: 1. 充分利用寄存器 基本塊中 全局 寄存器分配:不把寄存器平均分配給各個變量使 用,而是從可用的寄存器中分出幾個,固定分配給幾個變量單 獨使用。標(biāo)準(zhǔn) ——以各變量在循環(huán)內(nèi)需要訪問主存單元的次數(shù) 為標(biāo)準(zhǔn)。 可從基本塊的出口由后向前掃描,對每個變量建立相應(yīng)的待用 信息鏈和活躍變量信息鏈。這里假定變量都是活躍的,臨時變量都是非 活躍的。對每個四元式 i: A := B op C ,依次執(zhí)行下述步驟: a ) 把符號表中變量 A 的待用信息和活躍信息附加到四元式 i 上。 (由于在 i 中對 A 的定值只能 在 i 以后的四元式才能引用,因而對 i 以前的四元式來說 A 是不活躍也不可能是待用的) c ) 把符號表中變量 B 和 C 的待用信息和活躍信息附加到四元 式 i 上。 注意,以上 a )和 b ), c )和 d )的次序不能顛倒。 ( 1 ) ( 2 ) ( 3 ) ( 4 ) 表示四元式序號。待用信息和活躍信息在四元式上的標(biāo)記如下所示:( 1 ) T( 3) L: =A( 2) LBFL( 2 ) U( 3) L: =AFLCFL( 3 ) V( 4) L: =TFF+U( 4) L( 4 ) DFL: =VFF+UFF2 寄存器描述和地址描述為隨時掌握各寄存器的情況, 寄存器描述數(shù)組 R V A L U E : 描述每個寄存器當(dāng)前的狀況 變量地址描述數(shù)組 A V A L U E :表示變量的存放情況3 基本塊的代碼生成算法假設(shè)只有 A := B o p C 的四元式序列A . 對每個四元式 i: A := B o p C ,依次執(zhí)行下述步驟:1 . 以四元式 i: A := B o p C 為參數(shù),調(diào)用過程 g et re g ( i : A := B o pC ) 。B .處理完基本塊中所有四元式之后,對現(xiàn)行值在某寄存器 R中的每個變量 M ,若它在出口之后使活躍的,則生成 STR , M ,放到主存中。 uvdutvcaubatcacabad??????????????::::)()()(:代碼序列 語句 生成的代碼 寄存器描述器 地址描述器t : = a - b M OV a,R 0SUB b,R0空寄存器R0包含 t t 在 R 0 中u: = a - c M OV a,R 1SUB c,R 1R0包含 tR1包含 ut 在 R0中u 在 R1中v: = t + u ADD R 1 ,R 0 R0包含 vR1包含 uu 在 R1中v 在 R0中d: = v + u ADD R 1 ,R 0M OV R0,dR0包含 d d 在 R0中d 在 R0中和存儲器中從 dag生成目標(biāo)代碼 例:賦值語句 T 4 :=A+B(E(C+D)) 四元式序列 G T 1 : =A+B T 2 : =C+D T 3 : =ET 2 T 4 : =T 1 T 3 DAG : A B E C