【正文】
. 簡單的代碼生成器 (基本塊內(nèi)) 在一個基本塊范圍內(nèi)考慮如何充分利用寄存器的問題: l 盡可能地讓該變量的值保留在寄存器中 l 盡可能引用變量在寄存器中的值 待用信息:若在一個基本塊中,變量 A 在四元式 i 中被定 值,在 i 后面的四元式 j 中要引用 A 值,且從 i 到 j 之間沒有其 它對 A 的定值點,這時我們稱 j是四元式 i 中對變量 A 的待用 信息或稱下次引用信息,同時也稱 A 是活躍的,若 A 被多次 引用則可構(gòu)成待用信息鏈與活躍信息鏈。 可從基本塊的出口由后向前掃描,對每個變量建立相應(yīng)的待用 信息鏈和活躍變量信息鏈。 計算待用信息的算法: 對各基本塊的符號表中的 “待用信息 ” 欄和 “活躍信息 ” 欄置初值,即把 “待用信息 ” 欄置 “非待用 ” ,對 “活躍 信息 ” 欄按在基本塊出口處是否為活躍而置成 “活躍 ” 或 “非活躍 ” 。這里假定變量都是活躍的,臨時變量都是非 活躍的。 符號表中增加 “ 待用信息 ” 欄和 “ 活躍信息 ”欄 從基本塊出口到基本塊入口由后向前依次處理每個四元 式。對每個四元式 i: A := B op C ,依次執(zhí)行下述步驟: a ) 把符號表中變量 A 的待用信息和活躍信息附加到四元式 i 上。 b ) 把符號表中變量 A 的待用信息欄和活躍信息欄分別置為 “非待用 ” 和 “非活躍 ” 。 (由于在 i 中對 A 的定值只能 在 i 以后的四元式才能引用,因而對 i 以前的四元式來說 A 是不活躍也不可能是待用的) c ) 把符號表中變量 B 和 C 的待用信息和活躍信息附加到四元 式 i 上。 d ) 把符號表中變量 B 和 C 的待用信息欄置為 “ i ”,活躍信 息欄置為 “活躍 ” 。 注意,以上 a )和 b ), c )和 d )的次序不能顛倒。 例: 若用 A , B , C , D 表示變量,用 T , U , V 表示中間變量,有四元式如下:( 1 ) T : = A B( 2 ) U : = A C( 3 ) V : = T + U( 4 ) D : = V + U其名字表中的待用信息和活躍信息如下表,用 “ F ”表示 “非待用” “非活躍”,用 “ L ”表示活躍。 ( 1 ) ( 2 ) ( 3 ) ( 4 ) 表示四元式序號。待用信息和活躍信息 待用信息 活躍信息變量名初值 待用信息鏈 初值 活躍信息鏈A F ( 2 ) ( 1 ) L L LB F ( 1 ) L LC F ( 2 ) L LD F F L FT F ( 3 ) F F L FU F ( 4 ) ( 3 ) F F L L FV F ( 4 ) F F L F表中 “待用信息鏈”與 “活躍信息鏈”的每列從左至右為每從后向前掃描一個四元式時相應(yīng)變量的信息變化情況,空白處為沒變化。待用信息和活躍信息在四元式上的標(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