周知cpu為方便亂序執(zhí)行,內(nèi)部會(huì)使用重命名寄存器技術(shù)消除數(shù)據(jù)依賴(war和waw)。編譯器在如下場(chǎng)景也會(huì)用到重命名
1. 靜態(tài)單賦值。過程內(nèi)的每個(gè)變量唯一定義一次,原有相同的則會(huì)重命名,包括phi結(jié)點(diǎn)的定值
2. bb表調(diào)度。為消除反相關(guān)依賴即war,可以重命名讀操作使用或?qū)懖僮鞫x的值,這樣能調(diào)度產(chǎn)生總時(shí)鐘周期更少的指令序列,但可能增加寄存器壓力導(dǎo)致溢出而新增了長(zhǎng)延遲操作(內(nèi)存加載/存儲(chǔ))并迫使另一輪調(diào)度
3. ebb表調(diào)度。對(duì)于某一ebb的一條路徑p,p存在過早退出路徑pe,p和pe的公共前綴是基本塊b,當(dāng)調(diào)度p時(shí),如果某個(gè)操作i向后移動(dòng)到b,且i定義的值殺死了pe上的同名值,那么需要重命名i的定值。若i的定值被重命名,且其在p的出口處是活躍的,則調(diào)度器需要在出口處復(fù)制回原來的名字
4. trace表調(diào)度。蹤跡不同于ebb路徑,它允許中間存在多個(gè)前驅(qū)即入口的基本塊,而后者不能。當(dāng)調(diào)度存在多入口的塊b的某蹤跡t時(shí),t上的某操作i可能前向移動(dòng)跨越b(t外的代碼路徑需作補(bǔ)償),若i殺死了一個(gè)活躍范圍跨越b的值,則需要重命名i的定值;同理,若i向后移動(dòng)跨越b且殺死了t上的某值,則需重命名i的定值,這時(shí)t外的代碼路徑補(bǔ)償可以使用同一名字
posted on 2023-09-06 23:35
春秋十二月 閱讀(65)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
Compiler