基于旋轉(zhuǎn)的別名保護寄存器中的寄存器分配的制作方法
【專利摘要】一種系統(tǒng)可以包括優(yōu)化器/調(diào)度器,用于對一組指令進行調(diào)度,計算調(diào)度的指令組的數(shù)據(jù)相關(guān)性、檢查約束和/或防檢查約束,以及,基于數(shù)據(jù)相關(guān)性、檢查約束和/或防檢查約束,為調(diào)度的指令組分配別名寄存器。在一個實施例中,優(yōu)化器用于釋放未使用的寄存器,以減少用來保護調(diào)度的指令的別名寄存器。優(yōu)化器進一步將偽指令插入到合并的指令之后,以中斷檢查約束和防檢查約束中的循環(huán)。
【專利說明】基于旋轉(zhuǎn)的別名保護寄存器中的寄存器分配
[0001]背景
[0002]硬件/軟件共同設(shè)計的系統(tǒng)可以利用動態(tài)二進制優(yōu)化來改善性能。對于對存儲器指令的動態(tài)二進制優(yōu)化,可能需要存儲器別名信息。動態(tài)二進制優(yōu)化可以為原子區(qū)中的推測性的存儲器優(yōu)化利用硬件別名檢查。當(dāng)加載指令被推測性地重新排序到存儲指令之前并且它們之間有可能的存儲器別名時,加載指令可能需要設(shè)置別名保護寄存器,其存儲器地址存儲在其中。響應(yīng)于存儲指令被執(zhí)行,存儲指令可以檢查帶有其存儲器地址的別名保護寄存器來檢測錯誤推測。錯誤推測可能會導(dǎo)致整個區(qū)域的回滾和非優(yōu)化的或不太優(yōu)化的代碼的重新執(zhí)行。
[0003]附圖簡述
[0004]此處所描述的本發(fā)明是作為示例說明的,而不僅限于各個附圖的圖形。為說明簡單和清楚起見,圖形中所示出的元件不一定是按比例繪制的。例如,為了清楚起見,某些元件的尺寸可以相對于其他元件而放大。此外,在合適的情況下,在不同的圖形中參考標(biāo)簽重復(fù)使用,以表示對應(yīng)的或類似的元件。
[0005]圖1A是根據(jù)本發(fā)明的一個實施例的示例性系統(tǒng)的框圖。
[0006]圖1B是根據(jù)本發(fā)明的一個實施例的另一示例性系統(tǒng)的框圖。
[0007]圖1C是根據(jù)本發(fā)明的一個實施例的再一個示例系統(tǒng)的框圖。
[0008]圖2A-2K是根據(jù)本發(fā)明的某些實施例的基于旋轉(zhuǎn)的別名保護寄存器中的寄存器分配的示意圖。
[0009]圖3是根據(jù)本發(fā)明的一些實施例的流程圖。
[0010]詳細(xì)描述
[0011]下面的描述說明了提供別名寄存器分配算法,以減少基于旋轉(zhuǎn)的別名保護寄存器中的寄存器使用的技術(shù)。技術(shù)的實現(xiàn)不局限在計算系統(tǒng)中;它可以被任何執(zhí)行環(huán)境用于類似的目的,諸如,例如,任何其他數(shù)字/電子設(shè)備。在下面的描述中,闡述了諸如邏輯實現(xiàn)、操作碼、指定操作數(shù)的手段、資源分區(qū)/共享/重復(fù)實現(xiàn),系統(tǒng)組件的類型和相互關(guān)系,以及邏輯分區(qū)/集成選擇之類的很多具體細(xì)節(jié),以便提供對本發(fā)明的更全面的理解。然而,本發(fā)明可以在沒有這樣的具體細(xì)節(jié)的情況下實施。在其他情況下,沒有詳細(xì)示出控制結(jié)構(gòu)和完全軟件指令序列,以便不至于使本發(fā)明變得模糊。
[0012]說明書中對〃 一個實施例"、〃實施例"、〃示例實施例〃等等的引用表示所描述的實施例可包括特定特征、結(jié)構(gòu)或特性,但是,每一個實施例可以不一定包括該特定特征、結(jié)構(gòu)或特征。此外,這樣的短語不一定是指同一個實施例。此外,當(dāng)結(jié)合一個實施例描述特定特征、結(jié)構(gòu)或特性時,認(rèn)為在本領(lǐng)域技術(shù)人員學(xué)識范圍內(nèi),可以與其他實施例一起實施這樣的特征、結(jié)構(gòu)或特性,無論是否對此明確描述。
[0013]可以使用硬件、軟件、固件或其任何組合來實現(xiàn)本發(fā)明的各實施例。本發(fā)明的各實施例還可實現(xiàn)為存儲在機器可讀取的介質(zhì)中的可以由一個或多個處理器讀取和執(zhí)行的指令。機器可讀的介質(zhì)可以包括用于以機器(例如,計算設(shè)備)可讀的形式存儲或傳輸信息的任何機制。例如,機器可讀的介質(zhì)可以包括,只讀存儲器(ROM);隨機存取存儲器(RAM);磁盤存儲介質(zhì);光存儲介質(zhì);閃存設(shè)備;電的、光學(xué)的、聲音或其他形式的傳播信號(例如,載波、紅外信號、數(shù)字信號等等);及其他。
[0014]下面的描述可以包括只用于描述性的目的而不應(yīng)該理解為限制性的諸如第一、第二等等之類的術(shù)語。
[0015]圖1A示出了系統(tǒng)100的示例性實施例的框圖。系統(tǒng)100可以包括處理器102。處理器102可以包括任何類型的能夠執(zhí)行軟件和/或處理數(shù)據(jù)信號的處理器。在一個實施例中,處理器102可以包括復(fù)雜指令集計算機(CISC)微處理器、精簡指令集計算(RISC)微處理器、超長指令字(VLIW)微處理器、實現(xiàn)指令集的組合的處理器,或任何其他處理器設(shè)備,諸如數(shù)字信號處理器,諸如微處理器、數(shù)字信號處理器或微控制器。
[0016]雖然圖1A只示出了一個這樣的處理器102,但是,系統(tǒng)100中可以有一個或多個處理器,一個或多個處理器可以包括多個線程、多個核等等。本增強不僅限于計算系統(tǒng)。本發(fā)明的替換實施例可以用于使用統(tǒng)一可擴展固件接口(UEFI)基本輸入/輸出系統(tǒng)(BIOS)的諸如手持式設(shè)備和嵌入式應(yīng)用之類的任何形狀因子設(shè)備中。手持式設(shè)備的某些示例包括蜂窩電話、網(wǎng)際協(xié)議設(shè)備、數(shù)碼相機、個人數(shù)字助理(PDA),或諸如上網(wǎng)本或筆記本之類的手持式PC。嵌入式應(yīng)用可包括微控制器、數(shù)字信號處理器(DSP)、單片系統(tǒng)、網(wǎng)絡(luò)計算機(NetPC)、機頂盒、網(wǎng)絡(luò)中樞、廣域網(wǎng)(WAN)交換機,或任何其他系統(tǒng)。
[0017]處理器102可以耦合到系統(tǒng)邏輯芯片104。例如,在所示出的實施例中,系統(tǒng)邏輯芯片104可以是存儲器控制器中樞(MCH)。在一個實施例中,MCH104可以提供到系統(tǒng)存儲器106的存儲器路徑120用于指令和數(shù)據(jù)存儲和/或用于例如圖形命令、數(shù)據(jù)和紋理的存儲。存儲器路徑120可以包括存儲器總線。MCH104可以在系統(tǒng)100中的處理器102、系統(tǒng)存儲器106、及其他組件之間定向數(shù)據(jù)信號,并在處理器102、系統(tǒng)存儲器106、以及系統(tǒng)I/O之間橋接數(shù)據(jù)信號。存儲器106可以是硬盤、軟盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、閃存,或可由處理器102讀取的任何其他類型的介質(zhì)。
[0018]MCH104可以通過本地I/O互連來耦合到I/O控制器中樞(ICH) 108。在一個實施例中,本地I/O互連可以是諸如外圍組件互連(PCI)總線之類的高速I/O總線。ICH108可以,例如,通過本地I/O互連,提供到一個或多個I/O設(shè)備的連接。某些示例可以包括數(shù)據(jù)存儲設(shè)備118、音頻1/0120、鍵盤/鼠標(biāo)1/0122,以及網(wǎng)絡(luò)控制器116,或其他集成的I/O組件,諸如集成的驅(qū)動器電子設(shè)備(IDE),局域網(wǎng)(LAN)和串行擴展端口,諸如通用串行總線(USB)、PCI插槽(未示出)、無線收發(fā)器,舊式I/O控制器等等。數(shù)據(jù)存儲設(shè)備118可以包括硬盤驅(qū)動器、軟盤驅(qū)動器、CD-ROM設(shè)備、閃存設(shè)備,或其他大容量存儲設(shè)備。
[0019]參考圖1A,諸如閃存112之類的非易失性存儲器可以通過,例如,低管腳數(shù)(LPC)總線,耦合到ICH108。BIOS固件114可以駐留在閃存112中,引導(dǎo)程序可以執(zhí)行來自閃存,或固件的指令。雖然圖1A示出了閃存112中的BIOS固件114,但是,在某些實施例中,BIOS固件114可以存儲在諸如固件中樞之類的其他非易失性存儲器等等中。在一個實施例中,BIOS固件114可以通過統(tǒng)一可擴展固件接口(UEFI)固件或任何其他固件來實現(xiàn)。
[0020]雖然圖1A示出了系統(tǒng)100,但是,根據(jù)本發(fā)明的各實施例可以用于任何其他硬件體系結(jié)構(gòu)中,諸如使用多個處理器核的平臺,或使用處理器或協(xié)同處理器的平臺,使用1/0中樞的平臺,或可以使用嵌入在處理器內(nèi)的存儲器控制等等。
[0021]圖1B示出了實現(xiàn)本發(fā)明的原理的系統(tǒng)140的替換實施例。系統(tǒng)140可以包括處理器142。處理器142可以包括任何類型的能夠執(zhí)行軟件和/或處理數(shù)據(jù)信號的處理器。在一個實施例中,處理器142可以包括如上文對于處理器102所提及的任何類型的處理器或處理器設(shè)備。在一個實施例中,處理器142可以通過存儲器路徑(未示出)耦合到用于指令和數(shù)據(jù)存儲和/或用于,例如,圖形命令、數(shù)據(jù)和紋理的存儲的系統(tǒng)存儲器144。在另一個實施例中,處理器142可以通過PCI互連耦合到一個或多個外圍組件互連(PCI)端口 160 ;然而,在某些實施例中,PCI端口 160可能不是必需的。存儲器144可以是硬盤、軟盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、閃存,或可由處理器142讀取的任何其他類型的介質(zhì)。
[0022]雖然圖1B只示出了一個這樣的處理器142,但是,系統(tǒng)140中可以有一個或多個處理器,一個或多個處理器可以包括多個線程、多個核等等。本增強不僅限于計算機系統(tǒng)或數(shù)據(jù)處理設(shè)備系統(tǒng)。本發(fā)明的替換實施例可以用于使用統(tǒng)一可擴展固件接口(UEFI)基本輸入/輸出系統(tǒng)(BIOS)的諸如手持式設(shè)備和嵌入式應(yīng)用之類的任何形狀因子設(shè)備中。手持式設(shè)備的某些示例包括蜂窩電話、網(wǎng)際協(xié)議設(shè)備、數(shù)碼相機、個人數(shù)字助理(PDA),或諸如上網(wǎng)本或筆記本之類的手持式PC,或諸如平板電腦或智能電話之類的智能設(shè)備等等。嵌入式應(yīng)用可包括微控制器、數(shù)字信號處理器(DSP)、單片系統(tǒng)、網(wǎng)絡(luò)計算機(NetPC)、機頂盒、網(wǎng)絡(luò)中樞、廣域網(wǎng)(WAN)交換機,或任何其他系統(tǒng)。
[0023]處理器142可以耦合到系統(tǒng)邏輯芯片146。例如,在所示出的實施例中,系統(tǒng)邏輯芯片146可以是平臺控制器中樞(PCH)。在一個實施例中,PCH146可以,例如,通過本地I/O互連,提供到一個或多個I/O設(shè)備的連接。在一個實施例中,本地I/O互連可以是諸如外圍組件互連(PCI)總線之類的高速I/O總線。PCH146可以在處理器142和系統(tǒng)140中的一個或多個其他組件之間定向數(shù)據(jù)信號或其他信息,并在處理器142和系統(tǒng)I/O之間橋接數(shù)據(jù)信號或信息。
[0024]一個或多個組件的某些示例可以包括數(shù)據(jù)存儲設(shè)備142、一個或多個PCI端口154、網(wǎng)絡(luò)控制156、USB端口 158。在一個實施例中、數(shù)據(jù)存儲設(shè)備152可以包括硬盤驅(qū)動器、軟盤驅(qū)動器、CD-ROM設(shè)備、閃存設(shè)備,或其他大容量存儲設(shè)備。雖然圖1B示出了組件的某些示例,但是PCH146可以提供到任何其他組件的連接,諸如音頻I/O、鍵盤/鼠標(biāo)1/0,及其他集成I/O組件,諸如集成的驅(qū)動器電子設(shè)備(IDE)、局域網(wǎng)(LAN)及其他串行擴展端口,無線收發(fā)器,舊式I/O控制器等等。
[0025]參考圖1B,諸如閃存148之類的非易失性存儲器可以通過,例如,低管腳數(shù)(LPC)總線,耦合到PCH146。BIOS固件150可以駐留在閃存148中,引導(dǎo)程序可以執(zhí)行來自閃存或固件的指令。雖然圖1B示出了閃存148中的BIOS固件150,但是,在某些實施例中,BIOS固件150可以存儲在諸如固件中樞之類的其他非易失性存儲器等等中。在一個實施例中,BIOS固件150可以通過統(tǒng)一可擴展固件接口(UEFI)固件或任何其他固件來實現(xiàn)。
[0026]雖然圖1B示出了系統(tǒng)140,但是,根據(jù)本發(fā)明的各實施例可以用于任何其他硬件和軟件體系結(jié)構(gòu)中,諸如使用多個處理器核的平臺,或使用處理器或協(xié)同處理器的平臺,使用I/o集線器的平臺,或可以使用嵌入在處理器內(nèi)的存儲器控制等等。
[0027]圖1C示出了可以實現(xiàn)本發(fā)明的原理的系統(tǒng)160的另一實施例。系統(tǒng)160可以包括處理器162。處理器162可以包括任何類型的能夠執(zhí)行軟件和/或處理數(shù)據(jù)信號的處理器。處理器162可以包括如上文對于處理器102所提及的任何類型的處理器或處理器設(shè)備。系統(tǒng)160可以包括存儲器163,該存儲器163可以通過互連168或諸如總線、存儲器路徑等等之類的任何其他連接耦合到處理器162。存儲器163的示例可以包括硬盤、軟盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、閃存、易失性存儲器設(shè)備或非易失性存儲器設(shè)備,或任何其他類型的可由處理器162讀取的介質(zhì)。在另一個實施例中,處理器162可以耦合到網(wǎng)絡(luò)組件164,網(wǎng)絡(luò)組件164可以包括,例如,有線網(wǎng)絡(luò)連接和/或無線網(wǎng)絡(luò)連接或任何其他網(wǎng)絡(luò)連接。處理器162可以進一步耦合到I/O控制器165,該I/O控制器165可以耦合到一個或多個I/O設(shè)備166。圖1C示出了系統(tǒng)160的實施例;在某些實施例中,系統(tǒng)160可以包括可以以硬件、軟件、固件或它們的任何組合來實現(xiàn)的一個或多個其他組件。在另一個實施例中,系統(tǒng)160的示例可以包括如上文對于圖1A或IB所提及的任何形狀因子設(shè)備或裝置。
[0028]圖2A是根據(jù)本發(fā)明的一個實施例的不意圖。參考編號210可以表不可以具有store_0 (存儲_0)、store_l等等的順序的原始代碼或指令,如圖2A所示。在一個實施例中,原始代碼可以在原子區(qū)內(nèi);然而,在某些實施例中,原子區(qū)可能不是必需的。在一個實施例中,可以將原始代碼210重新排序或調(diào)度到可以相對于原始代碼具有不同的序列或順序的調(diào)度的代碼或指令220。例如,指令220a可以表示存儲器存儲指令Store_5,該存儲器存儲指令store_5可以被調(diào)度到由,例如,執(zhí)行邏輯執(zhí)行的第一指令。圖2A的實施例可以使用基于旋轉(zhuǎn)的別名保護寄存器,這些寄存器可以允許每一個存儲器指令設(shè)置別名保護寄存器,并針對帶有比特屏蔽的一組別名保護寄存器進行檢查。
[0029]在一個實施例中,可以使用基于旋轉(zhuǎn)的別名檢查。別名保護寄存器可以以環(huán)形緩存器或基于AHPTR (別名首部指示符)270旋轉(zhuǎn)的循環(huán)隊列來組織,AHPTR270可以指向環(huán)形緩存器的首部。存儲器指令可以指定相對于當(dāng)前AHPTR270的別名保護寄存器編號0RD230(帶有可能的折回)。例如,參考圖2A,基于原始代碼的順序,可以在環(huán)形緩存器的首部設(shè)置第一指令storej)的帶有寄存器ORD “O”的第一別名保護寄存器,第二指令storej可以指定帶有寄存器ORD “I”的第二別名保護寄存器,等等。在另一個實施例中,存儲器指令可以具有P比特以表示,諸如處理器102或142之類的硬件或任何其他執(zhí)行邏輯可以為當(dāng)前指令設(shè)置帶有寄存器編號AHPTR+0RD的別名保護寄存器。在一個實施例中,可以檢查[AHPTR+ORD, AHPTR)的范圍中的寄存器。例如,如果AHPTR=2,ORD=I,并且總的寄存器編號是5 (例如,0-4),則可以檢查[3,2)范圍內(nèi)的寄存器3,寄存器4,寄存器O和寄存器I。在一個實施例中,可以使用折回。
[0030]存儲器指令可以具有C比特以表示,諸如處理器之類的硬件或任何其他執(zhí)行邏輯可以檢查所有帶有寄存器編號>=AHPTR+0RD (帶有可能的折回)的別名保護寄存器。響應(yīng)于指令調(diào)度,可以基于指令的原始執(zhí)行順序,為調(diào)度的指令分配帶有編號0RD230的別名保護寄存器。例如,在圖2A中,作為原始程序執(zhí)行的順序,可以分配帶有0RD230的別名保護
寄存器。
[0031]在另一個實施例中,存儲器指令可以指定旋轉(zhuǎn)編號R0T,該ROT可以表示別名首部指示符可以旋轉(zhuǎn)ROT中所指出的量。在一個實施例中,可以使用旋轉(zhuǎn)值ROT來表示可以釋放AHPTR和AHPTR+R0T之間的所有別名保護寄存器(帶有可能的折回,包括AHPTR,排除AHPTR+R0T),例如,在執(zhí)行指令之前。在一個實施例中,諸如處理器102或142之類的硬件可以將AHPTR旋轉(zhuǎn)R0T,并清除AHPTR和AHPTR+R0T之間的別名保護寄存器的所有有效比特。
[0032]在一個實施例中,響應(yīng)于設(shè)置帶有P比特的別名保護寄存器,硬件可以為寄存器設(shè)置有效比特。例如,帶有,例如,邏輯“I”的有效比特可以表示可以通過,例如,硬件,檢查的有效別名保護寄存器。在另一個實施例中,帶有邏輯值,例如,“O”的有效比特可以表示可以不檢查相應(yīng)的別名保護寄存器。例如,圖2A的數(shù)字參考編號240可以表示“valid_all (有效_全部)”,“valid_all ”可以包括一組一個或多個別名保護寄存器的一組一個或多個有效比特。在一個實施例中,“valid_all”240中的有效比特的數(shù)量可以與別名保護寄存器的數(shù)量和/或調(diào)度的指令的數(shù)量相同;然而,在某些實施例中,有效比特的數(shù)量可以不同于調(diào)度的指令的數(shù)量。例如,基于原始代碼的順序,可以在valid_all240的最高階比特設(shè)置最后一個指令store_5的帶有ORD“5”的別名保護寄存器的有效比特,并可以在valid_all240的最低階比特設(shè)置第一指令store_0的帶有ORD “O”的別名保護寄存器的有效比特,等等;然而,在某些實施例中,可以按不同的順序提供valid_all240中的有效比特。在某些實施例中,valid_all240中的有效比特可以具有基于別名保護寄存器的ORD的順序。
[0033]例如,valid_all字段240a可以是“000000”,“000000”可以表示對于指令“st0re_5”(調(diào)度的序列中的第一指令),可以不檢查別名保護寄存器中的任何一個。valid_all字段240b可以涉及調(diào)度的代碼中的后續(xù)指令“store_2”。valid_all字段240b可以是“ 100000”,其中,有效比特“ I”可以對應(yīng)于前一指令“store_5”,并可以表示可以檢查“st0re_5”的別名保護寄存器。而且,240b中的有效比特“00000”可以表示,可以不檢查store_2 其本身、store_0、load_4 (加載 _4)、store_l, load_3 的別名保護寄存器。
[0034]參考圖2A,valid_st (有效_st)字段250可以涉及存儲指令,并可以包括一組一個或多個有效比特。例如,valid_st250可以與valid_all240的不同之處在于,加載指令的別名保護寄存器的有效比特可以具有valid_st250中的邏輯值“O”。在一個實施例中,諸如102或142之類的硬件或其他執(zhí)行邏輯可以為,例如,所有別名保護寄存器維持有效比特,并在執(zhí)行每一個指令之前,計算比特屏蔽260,用于檢查。加載指令可以不檢查另一個加載指令。從load_3的比特屏蔽260a可以看出,可以沒有l(wèi)oad_4的有效比特(例如,邏輯值“1”),或可以不斷言load_4的別名保護寄存器的有效比特。在另一個實施例中,對于load_3的比特屏蔽260a,可以沒有按原始執(zhí)行順序排序在load_3之前的store_0,store_l,和store_2的有效比特。硬件可以為所有指令(例如,valid_all240)以及只為存儲指令(例如,valid_st250),維持單獨的有效比特。存儲指令可以檢查valid_all240,加載指令可以只檢查valid_st250。
[0035]圖2A示出了諸如處理器或任何其他執(zhí)行邏輯之類的硬件維持valid_all240、valid_st250并基于0RD230,例如,以C語言語義,計算屏蔽260的公式的實施例。圖2A的基于旋轉(zhuǎn)的別名保護寄存器的寄存器分配的算法可以按它們的原始程序順序為每一個指令分配寄存器,在圖2A中示為“寄存器0RD”230??梢允褂迷撍惴▉肀WC在別名檢查中沒有假陰性或假陽性。參考圖2A,在一個實施例中,每一個指令都可以具有P/C比特(未示出),但是可以不具有R0T。在再一個實施例中,諸如處理器或任何其他執(zhí)行邏輯之類的硬件可以運行帶有0RD/P/C230的調(diào)度的代碼220,并計算valid_all240、valid_st250和valid_mask (有效_屏蔽)260,以執(zhí)行別名檢查。
[0036]參考圖2B,示出了寄存器分配的實施例。在一個實施例中,可以使用圖2B的寄存器分配來減少基于旋轉(zhuǎn)的別名保護寄存器方案中所使用的別名保護寄存器的數(shù)量,并可能不生成假陽性或假陰性。圖2B的實施例可以與指令調(diào)度和優(yōu)化集成,并可以用于動態(tài)優(yōu)化。在一個實施例中,不是每一個存儲器指令都可以設(shè)置別名保護寄存器,并且不是每一個存儲器指令都可以檢查其他別名保護寄存器。例如,在圖2B中,storej)、^^01^_1和load_3中一個也不可以設(shè)置別名保護寄存器,因為沒有指令可以檢查它們。Store_5可以不檢查任何其他別名保護寄存器,因為它被調(diào)度為區(qū)域中的第一指令。圖2B的實施例可以使用三個寄存器,而并非六個寄存器。
[0037]參考圖2B,store_5、store_2和load_4可能需要保護(例如,它們的P比特可以設(shè)置為1,它們的C比特(未示出)可以設(shè)置為0),可以給它們分別分配帶有ORD編號2,0,和I的寄存器。Store_0、store_l和load_3可能不需要保護,并可能只檢查其他別名寄存器(例如,它們的P比特可以設(shè)置為0,它們的C比特可以設(shè)置為I)。圖2B示出了基于0RD,P和C計算valid_all240、valid_st250和屏蔽260的實施例。
[0038]圖2C示出了寄存器分配的另一實施例。在圖2C的實施例中,響應(yīng)于判斷store_l和load_4可以不訪問同一個存儲器,例如,通過軟件分析,store_l可以不檢查load_4。圖2C的實施例可以使用兩個寄存器。參考圖2C,可以保護st0re_5、st0re_2 (例如,它們的P比特=1),可以給它們分別分配帶有0RD1,以及O的寄存器。store_0, load_4, store_l以及l(fā)oad_3 (例如,它們的P比特=0,C比特=1)可以只檢查其他別名寄存器。在圖2A到2C的各實施例中,寄存器分配可以遵循原始程序順序。例如,如果在原始程序中第一指令將在第二指令之前執(zhí)行,則第一指令的寄存器編號可以不大于第二指令。
[0039]圖2D示出了寄存器分配的再一個實施例。參考圖2D,示出了數(shù)據(jù)相關(guān)性的實施例。例如,可以定義相關(guān)性Al—A2,如果I)以原始程序順序,指令A(yù)l將在指令A(yù)2之前執(zhí)行;2) Al和A2可以訪問同一個存儲器;3)A1和A2中的至少一個是存儲指令。圖2D進一步示出了檢查約束的實施例。例如,響應(yīng)于,例如,指令調(diào)度器推測Al和A2在運行時可能不會沖突,指令調(diào)度器可以將A2移動到Al之前。例如,指令調(diào)度器可以通過軟件來實現(xiàn)。如果Al — A2,并且指令A(yù)2被重新排序到Al之前,則A2可以設(shè)置要由Al檢查的別名保護寄存器。可以定義檢查約束Aloc A2,如果1)A1—A2;2)通過調(diào)度,A2被重新排序到Al之前。在一個實施例中,指令A(yù)l可以響應(yīng)于Alic A2,檢查指令A(yù)2。在某些實施例中,檢查約束可以不是過渡的。例如,Al=C A2和A2二c A3可以不暗示Al=c A3
[0040]在一個實施例中,檢查約束Al=c A2可以判斷哪一個指令可以設(shè)置別名保護寄存器,哪些指令可以檢查其他指令。例如,檢查約束Al=C A2可以判斷指令A(yù)2可以設(shè)置帶有P比特的新別名保護寄存器,而指令A(yù)l (帶有C比特)可以檢查指令A(yù)2。圖2D示出了原始程序順序的寄存器分配的實施例。例如,如圖2D所示,load_l和load_3可以基于相應(yīng)的檢查約束和/或數(shù)據(jù)相關(guān)性,設(shè)置帶有P比特的新別名保護寄存器,如圖2D所示。寄存器O和I可以根據(jù)它們的原始程序順序分別分配到load_l和load_3。Store_2可以檢查在store_2之前調(diào)度的指令load_3的寄存器I。Store_0可以檢查在store_0之前調(diào)度的指令load_l的寄存器O。在圖2D的實施例中,可以沒有檢查約束store_0—c load_3 (例如,
store_0可以不訪問帶有l(wèi)oad_3的同一存儲器),并且store_0可能不需要檢查load_3。
[0041]圖2E示出了不在原始程序順序里的寄存器分配的實施例。例如,參考圖2E,可以按與它們的原始程序順序相反的順序,分別將寄存器O和I分配給load_3和load_l。參考圖2E,Load_3的寄存器O (0RD0/P)可以只由Store_2檢查(0RD0/C)。在圖2E的實施例中,在Store_2之后,可以不檢查寄存器O。參考圖2F,可以旋轉(zhuǎn)AHPTR達ROT “1”,以釋放寄存器O。例如,寄存器O可以在load_l的執(zhí)行開始時旋轉(zhuǎn)和釋放;然而,在某些實施例中,寄存器O可以被釋放,例如,響應(yīng)于寄存器可能已經(jīng)被檢查并可能不被任何其他指令使用。在另一個實施例中,旋轉(zhuǎn)可以在store_2的執(zhí)行之后執(zhí)行。響應(yīng)于旋轉(zhuǎn),AHPTR可以增大I(例如,當(dāng)前AHPTR=I)。對于相對于當(dāng)前AHPTR計數(shù)的后續(xù)指令,ORD仍可以是“O”。圖2E和圖2F可以執(zhí)行相同別名檢查。例如,圖2F可以利用旋轉(zhuǎn)將寄存器編號減少為I個寄存器。
[0042]在圖2F的利用旋轉(zhuǎn)的寄存器分配的實施例中,可以響應(yīng)于store_2已經(jīng)檢查寄存器0,load_3所使用的寄存器O通過寄存器旋轉(zhuǎn)來釋放。在此實施例中,可以使用一個寄存器。圖2F示出了基于0RD,P,C,ROT和寄存器計數(shù)REG (例如,I)來計算valid_all、valid_st和屏蔽的實施例。在一個實施例中,可以相對于AHPTR,計算公式中的val id_al 1、valid_st和屏蔽。例如:
[0043]mask(n) =valid_all (η)& ~ ((1?0RD (η)) -1),如果 η 是存儲且 C(n);
[0044]=valid_st (n)& ~((1?0RD (n)) -1),如果 n 是加載且 C (n).[0045]在一個實施例中,硬件可以循環(huán)地將屏蔽左移位,達AHPTR,以便檢查。在一個實施例中,“循環(huán)地左移位”可以將屏蔽中的比特向左移,并向右折回溢出比特。例如,對于屏蔽00001111,循環(huán)地左移位2,會導(dǎo)致00111100。在圖2F的實施例中,可以相對于AHPTR,計算valid_all、valid_st,以及屏蔽。例如,如果AHPTR=2,屏蔽00001111可以表示寄存器2到寄存器5具有屏蔽值“ I”,寄存器6、7、0、I中每一個都可以具有屏蔽值“O”。
[0046]可以使用圖2G的實施例來基于與指令調(diào)度集成的檢查約束和防檢查約束來提供寄存器分配。在一個實施例中,如果`Al=C A2,Al的寄存器Al可以不大于A2的,以便Al檢查A2。在某實施例中,在寄存器分配中可以使用檢查約束和防檢查約束,來避免別名檢查中的假陽性。在一個實施例中,可以定義防檢查約束Al = ac A2,如果1)A1 — A2 ;2)A1可以基于檢查約束AO=C Al,來設(shè)置別名保護寄存器;3)A2可以基于檢查約束A2=c A3來檢查某些別名保護寄存器;以及4)調(diào)度可以不將A2重新排序在Al之前。
[0047]在一個實施例中,基于防檢查約束Alsac A2,Al的寄存器編號可以小于A2,以防止A2檢查Al (例如,以避免可能的假陽性)??梢允褂脵z查約束來減少或最小化寄存器分配中的約束,例如,以防止檢查中的假陰性,可以使用防檢查約束來減少/最小化寄存器分配中的額外的約束,例如,以防止檢查中的假陽性。
[0048]當(dāng)用完別名寄存器時,可以使用圖2G的實施例來動態(tài)地限制調(diào)度。參考圖2G,可以在調(diào)度過程中遞增地構(gòu)建檢查約束和防檢查約束??梢灾豁憫?yīng)于指令被調(diào)度,分配指令的寄存器。如果Al=C A2或Al=ac A2,則可以延遲對于A2的寄存器分配,直到分配Al的寄存器。在圖2G的實施例中,P (A) ,C(A)、ORD (A)和ROT(A)可以分別表示指令A(yù)的P比特、C比特、ORD和R0T。在一個實施例中,優(yōu)化器/調(diào)度器可以被用來跟蹤在一個或多個指令的執(zhí)行過程中,例如,在調(diào)度過程中,可能發(fā)生的AHPTR變化。在一個實施例中,優(yōu)化器/調(diào)度器可以,例如,通過軟件來實現(xiàn)。例如,AHPTR_AT(A)可以為延遲的寄存器分配,在執(zhí)行指令A(yù)時記錄AHPTR。R(A)可以表示是否分配A的寄存器。在圖2G的實施例中,在所有檢查指令的指令都被調(diào)度之后(例如,基于檢查約束),可以延遲對于指令的寄存器分配。在一個實施例中,可以釋放一個或多個已分配的寄存器,例如,在相應(yīng)的調(diào)度的指令之后(例如,只在下一調(diào)度的指令的開始時)。雖然圖2G的實施例可以使用列表調(diào)度,但是,可以擴展一些實施例,以與諸如模調(diào)度之類的任何其他調(diào)度技術(shù)一起協(xié)作。
[0049]參考圖2G,可以與指令調(diào)度集成的寄存器分配的實施例。在一個實施例中,實施例可以檢查它是否用完寄存器(例如,ORD(A) >=REG)。參考圖2G,ORD(A)可以涉及三個變量,可以表示寄存器計數(shù)的REG、AHPTR和AHPTR_AT (A)。AHPTR可以始終可用。變量“REG”可以被若干個指令包圍,P(A)=I和!R(A),P(A)可以表示指令A(yù)可能需要新寄存器來設(shè)置保護,!R(A)可以表示指令A(yù)的寄存器還沒有分配。例如,變量“REG”可以被其寄存器分配被延遲的若干個指令包圍。在一個實施例中,AHPTR可以保持按調(diào)度的順序增大。AHPTR_AT(A)可以為延遲的寄存器分配,在執(zhí)行指令A(yù)時記錄AHPTR。在一個實施例中,可以計數(shù)延遲的寄存器分配,以阻止寄存器溢出。
[0050]在一個實施例中,優(yōu)化器/調(diào)度器可以在調(diào)度過程中跟蹤諸如變量REG、AHPTR,AHPTR_AT之類的信息,以估計是否有一個或多個別名保護寄存器待被分配給調(diào)度的指令或它是否用完寄存器。在一個實施例中,響應(yīng)于用完寄存器,可以防止任何新指令A(yù)的重新排序(即,P(A)=1)。在一個實施例中,可以按它們的原始執(zhí)行順序來調(diào)度剩余指令,以避免重新排序。
[0051]圖2H示出了可以使用別名寄存器的處理存儲器優(yōu)化的實施例。如果第二存儲器操作可能與它們之間的某些存儲器操作有沖突,則優(yōu)化可能是推測性的。例如,推測性的存儲器優(yōu)化可以使用別名寄存器保護和檢查。可以在指令調(diào)度之前應(yīng)用優(yōu)化,可以在指令調(diào)度過程中執(zhí)行別名寄存器分配:然而,在某些實施例中,指令優(yōu)化可能不是必需的。響應(yīng)于優(yōu)化和在調(diào)度過程中,已優(yōu)化的代碼可以在邏輯上被視為將消除的指令合并到其他指令,而合并的指令/代碼可以用于所有消除的指令上的別名檢查。參考圖2H,在store-load(存儲-加載)消除282的實施例中,代碼可以在邏輯上被視為將load_2合并到store_l。在1ad-1oad (加載-加載)消除284,代碼可以在邏輯上被視為將load_2合并到load_l。在store-store-elimination (存儲-存儲-消除)286,代碼可以在邏輯上被視為將store_l合并到store_2。在一個實施例中,合并的指令可以包含一個或多個邏輯指令/代碼。
[0052]在對于合并的指令的調(diào)度過程中,可以考慮合并的指令中的邏輯指令上的約束。例如,在圖21所不的代碼中,可以從store_0到load_3應(yīng)用store-load-elimination(存儲-加載-消除)。在優(yōu)化之后以及在調(diào)度中,當(dāng)調(diào)度storej)時,可以考慮storej)和load_3上的約束。在圖21中,示出了寄存器分配。參考圖21,在優(yōu)化中,Store_2可以檢查Load_3, Store_0 可以檢查 Load_l。響應(yīng)于 Load_3 和 Store_0 被合并到 Store_0, Store_2可以檢查Store_0, Store_0可以檢查Load_l。Store_0和Load_l可能需要保護(P比特=1),并可以被分配寄存器O, I。Store_2和Store_0可以對照寄存器O檢查(C比特=1)。Store_0可以在設(shè)置保護(P比特=1)之前檢查寄存器0,如此,Store_0可以不檢查其本身。
[0053]在某些實施例中,合并的指令可能在數(shù)據(jù)相關(guān)性中包含循環(huán),這可能會導(dǎo)致檢查/防檢查約束中的循環(huán)。例如,檢查/防檢查約束中的循環(huán)可以被表示為:store」)(load_3)—c load_l —ac store_2—c store—O (load_3)n 在一個實施例中,如果
檢查/防檢查約束包含循環(huán),則分配別名保護寄存器可能會導(dǎo)致假陰性和假陽性。
[0054]圖2J示出了插入偽加載以中斷約束循環(huán)的實施例。參考2J,在一個實施例中,合并的指令可以使用一個或多個別名保護寄存器來中斷約束循環(huán)。在另一個實施例中,可以將可以與合并的指令訪問同一個存儲器但是相對于合并的指令可以使用不同的別名保護寄存器的偽存儲器指令插入在合并的指令緊接的后面。在一個實施例中,硬件可以實現(xiàn)偽存儲器指令,以只執(zhí)行別名保護/檢查,而沒有實際存儲器訪問,以減少開銷。
[0055]在一個實施例中,如果約束循環(huán)可能不頻繁地發(fā)生,當(dāng)約束循環(huán)即將發(fā)生時,可以插入偽存儲器操作。例如,在調(diào)度過程中,可以跟蹤有關(guān)合并的指令中的每一個邏輯指令的P/C比特的信息。在P/C比特位于合并的指令中的一個或多個邏輯指令的情況下,可以插入偽存儲器指令以分區(qū)P/C比特。在某些實施例中,如果合并的指令中的一個或多個邏輯指令訪問同一個存儲器,則可以避免合并的指令中的一個或多個邏輯指令上的ρ/c比特設(shè)置。例如,在圖2H所示的加載-加載消除情況下,響應(yīng)于Load_2檢查的指令可以始終由Load_l檢查,Load_2上的C比特可以不設(shè)置。類似地,響應(yīng)于檢查Load_l的指令可以始終檢查Load_2,Load_l上的P比特可以不設(shè)置。在一個實施例中,可以保留至多三個邏輯指令上的C/P比特,諸如帶有C比特的最早的指令,帶有P比特的最近的指令和帶有P比特的最近的存儲,不管有多少邏輯指令被合并到合并的指令中。圖2J的實施例示出了使用偽存儲器指令來中斷循環(huán)的示例。
[0056]在某些實施例中,偽存儲器指令可以中斷循環(huán),但是,可以不刪除檢查/防檢查約束。響應(yīng)于別名保護寄存器可能不足以用于調(diào)度,在循環(huán)的情況下,可以不執(zhí)行偽存儲器指令的調(diào)度。例如,在圖2J所示的調(diào)度中,響應(yīng)于在調(diào)度load_l之后沒有別名保護寄存器,可以不調(diào)度store_0或store_2中的任何一個,如果對于任何一個調(diào)度需要至少多一個別名保護寄存器的話。圖2J的實施例可以示出,如果store_0將被調(diào)度,則對于將要被store_2檢查的du_y_load (偽_加載)可能需要新別名保護寄存器。如果store_2將被調(diào)度,則對于可能被store_0 (load_3)檢查的store_2,可能需要新別名保護寄存器。在一個實施例中,store_2的調(diào)度可以基于store_2的新別名保護寄存器的可用性來執(zhí)行。例如,響應(yīng)于判斷store_2的新別名保護寄存器可能不存在或可能不可用,可以不調(diào)度store_2。
[0057]在一個實施例中,可以預(yù)留若干個別名寄存器。例如,數(shù)量可以等于合并的指令中的消除的指令的數(shù)量。如果按它們的原始順序(對于合并的指令,其第一邏輯指令的順序)調(diào)度了所有剩余的指令,則只有重新排序的邏輯指令可以使用額外的別名寄存器。在預(yù)留了別名寄存器的情況下,可以在沒有用完寄存器的情況下執(zhí)行調(diào)度。
[0058]圖2K描繪了可以擴展圖2G中的寄存器分配以處理寄存器溢出和約束循環(huán)的算法的實施例。參考圖2K,實施例可以為所有合并的指令預(yù)留寄存器計數(shù)。在一個實施例中,可以按照合并的指令中的消除的指令的數(shù)量來預(yù)留別名寄存器,以避免用完寄存器。在另一個實施例中,如果按它們的原始順序(對于合并的指令,其第一邏輯指令的順序)調(diào)度了所有剩余的指令,則只有重新排序的邏輯指令可能需要額外的別名寄存器。
[0059]圖3示出了方法的實施例。圖3的流程可以被用來對原始代碼執(zhí)行優(yōu)化和調(diào)度。在一個實施例中,在圖3的流程可以使用如圖2A到2K所示的一個或多個實施例。在一個實施例中,可以使用圖3的流程來實現(xiàn)可以優(yōu)化和/或調(diào)度原始代碼的優(yōu)化器/調(diào)度器。在一個實施例中,優(yōu)化器/調(diào)度器可以通過軟件來實現(xiàn);然而,在某些實施例中,優(yōu)化器/調(diào)度器可以通過硬件、軟件、固件和/或它們的任何組合來實現(xiàn)。在框302中,優(yōu)化器/調(diào)度器可以計算指令A(yù)l和A2之間的諸如Al — A2之類的數(shù)據(jù)相關(guān)性。在框304中,優(yōu)化器/調(diào)度器可以預(yù)留若干個別名寄存器,以阻止由于一個或多個合并的指令而導(dǎo)致的寄存器溢出。在一個實施例中,別名寄存器的數(shù)量可以等于合并的指令的數(shù)量;然而,在某些實施例中,別名寄存器的數(shù)量可以具有不同的值。在框306中,優(yōu)化器/調(diào)度器可以選擇一個指令,例如,第二指令A(yù)2,來調(diào)度,直到調(diào)度完原始代碼中的所有指令。
[0060]在框308中,響應(yīng)于判斷所選第二指令A(yù)2的調(diào)度可能會導(dǎo)致別名寄存器溢出,優(yōu)化器/調(diào)度器可以返回到框306,其中,優(yōu)化器/調(diào)度器可以選擇除第二指令A(yù)2以外的第三指令A(yù)3。響應(yīng)于在框306中選擇第三指令A(yù)3,優(yōu)化器/調(diào)度器可以判斷第三指令A(yù)3是否可以用完別名寄存器(框308)。如果是,則優(yōu)化器/調(diào)度器可以繼續(xù)選擇不同的指令來調(diào)度,直到判斷所選指令可能不會導(dǎo)致別名寄存器溢出。優(yōu)化器/調(diào)度器可以響應(yīng)于判斷所選指令可能不會導(dǎo)致別名寄存器溢出,來調(diào)度所選指令(框308)。在框310中,優(yōu)化器/調(diào)度器可以向約束圖(例如,如圖2K所示)添加涉及調(diào)度的指令(例如,A3)的約束,并設(shè)置相應(yīng)的C/P比特。在一個實施例中,優(yōu)化器/調(diào)度器可以向約束圖或任何其他結(jié)構(gòu)中添加對于調(diào)度的指令A(yù)3的檢查約束和/或防檢查約束。在框312中,優(yōu)化器/調(diào)度器可以插入偽存儲器操作或代碼,以阻止約束圖中的循環(huán)。在一個實施例中,優(yōu)化器/調(diào)度器可以刪除不需要的C/P比特,如果調(diào)度的指令A(yù)3是合并的指令的話。在另一個實施例中,如果調(diào)度的指令在多個邏輯指令上具有C/P比特,則優(yōu)化器/調(diào)度器可以插入一個或多個偽存儲器操作或指令以分區(qū)C/P比特。在另一個實施例中,如果調(diào)度的指令不需要別名寄存器,則流程可以返回到框306以選擇和調(diào)度下一指令(框314)。在框316中,優(yōu)化器/調(diào)度器可以通過旋轉(zhuǎn)釋放已分配的別名寄存器。例如,釋放可以響應(yīng)于已分配的別名寄存器已經(jīng)被檢查并且沒有其他指令要對照已分配的寄存器檢查來實現(xiàn)。在一個實施例中,可以在下一指令的執(zhí)行開始時釋放別名保護寄存器。在另一個實施例中,可以延遲當(dāng)前指令所使用的別名保護寄存器的分配,直到在下一指令的執(zhí)行開始時釋放寄存器。在框316中,可以響應(yīng)于旋轉(zhuǎn),來更新AHPTR。在框318中,如果約束圖中的約束阻止對于調(diào)度的指令的別名寄存器分配,例如,如果有來自未被調(diào)度的后續(xù)指令的一個或多個約束,則優(yōu)化器/調(diào)度器可以延遲對于當(dāng)前調(diào)度的指令的寄存器分配。在一個實施例中,可以響應(yīng)于后續(xù)指令正在被調(diào)度,分配當(dāng)前調(diào)度的指令的別名寄存器。
[0061]例如,流程可以返回到框306,以選擇并調(diào)度下一指令。在框320中,響應(yīng)于判斷對于當(dāng)前調(diào)度的指令的寄存器分配可能不需要被延遲,優(yōu)化器/調(diào)度器可以為調(diào)度的指令分配別名寄存器。在框322中,響應(yīng)于為調(diào)度的指令分配新別名寄存器,優(yōu)化器/調(diào)度器可以刪除與調(diào)度的指令相關(guān)的約束,和/或可以遞歸地為其寄存器分配由于約束而被延遲的調(diào)度的指令分配別名寄存器。
[0062]在一個實施例中,圖2A到2K和圖3的各實施例可以用于對于基于旋轉(zhuǎn)的別名保護寄存器的寄存器分配。在一個實施例中,各實施例可以被用來減少基于旋轉(zhuǎn)的別名保護中所使用的寄存器的數(shù)量。例如,減少別名寄存器可以用于優(yōu)化優(yōu)點和性能。減少別名寄存器可以被用來實現(xiàn)別名硬件的減少,以節(jié)省管芯區(qū)和功耗。盡管圖3的方法被示為包括過程的序列,但是,某些實施例中的方法可以以不同的順序執(zhí)行所示出的過程。盡管如圖3和/或圖2A到2K所示的各實施例可以通過優(yōu)化器/調(diào)度器來實現(xiàn),但是,在某些實施例中,優(yōu)化和調(diào)度指令可以分別由優(yōu)化器和調(diào)度器分開地實現(xiàn),或在某些實施例中,諸如寄存器分配邏輯之類的一個或多個邏輯可以被用來實現(xiàn)圖3和/或圖2A到2K的各實施例。在另一個實施例中,優(yōu)化和調(diào)度指令可以通過優(yōu)化器或者調(diào)度器來實現(xiàn)。盡管如此處所提及的各實施例可以涉及存儲和/或加載指令,但是,在某些實施例中,可以使用任何其他存儲器指令。
[0063]盡管參考各實施例描述了本發(fā)明的某些特征,但是,描述不旨在以限制性方式來解釋。對本發(fā)明涉及的所屬【技術(shù)領(lǐng)域】的專業(yè)人員顯而易見的對各實施例的各種修改,以及本發(fā)明的其他實施例被認(rèn)為在本發(fā)明的精神和范圍內(nèi)。
【權(quán)利要求】
1.一種方法,包括: 對一組指令執(zhí)行調(diào)度; 計算所述調(diào)度的指令組的數(shù)據(jù)相關(guān)性; 計算所述調(diào)度的指令組的檢查約束;以及 基于所述數(shù)據(jù)相關(guān)性和所述檢查約束,為所述調(diào)度的指令組分配別名寄存器。
2.如權(quán)利要求1所述的方法,還包括: 計算所述調(diào)度的指令組的防檢查約束;以及 進一步基于所述防檢查約束,為所述調(diào)度的指令組分配別名寄存器。
3.如權(quán)利要求1所述的方法,還包括: 響應(yīng)于所述別名寄存器已經(jīng)被檢查,通過旋轉(zhuǎn),釋放為所述指令組中的第一調(diào)度的指令而分配的別名寄存器;以及 將所述釋放的別名寄存器分配到第二調(diào)度的指令。
4.如權(quán)利要求1所述的方法,還包括: 響應(yīng)于判斷要被調(diào)度的第一指令是導(dǎo)致別名寄存器溢出,選擇所述指令組中的第二指令來執(zhí)行所述調(diào)度。
5.如權(quán)利要求1所述的方法,還包括: 合并所述指令組中的至少兩個指令來提供合并的指令;以及 在所述指令組中插入偽指令以中斷所述檢查約束中的一個或多個循環(huán)。
6.如權(quán)利要求1所述的方法,還包括: 將偽指令插入到所述指令組中的合并的指令之后,其中,所述偽指令是與所述合并的指令訪問同一個存儲器,并是與所述合并的指令使用不同的別名寄存器。
7.一種系統(tǒng),包括: 處理器;以及 優(yōu)化器,用于優(yōu)化要被所述處理器執(zhí)行的一組原始代碼,將所述優(yōu)化的代碼調(diào)度到調(diào)度的代碼中,以及基于所述調(diào)度的代碼的數(shù)據(jù)相關(guān)性和約束中的至少一個,將新別名寄存器分配到所述調(diào)度的代碼。
8.如權(quán)利要求7所述的系統(tǒng),其中,所述優(yōu)化器進一步計算所述調(diào)度的代碼的所述數(shù)據(jù)相關(guān)性和所述約束。
9.如權(quán)利要求7所述的系統(tǒng),其中,所述優(yōu)化器進一步響應(yīng)于判斷所述分配的別名寄存器將不被所述調(diào)度的代碼檢查,旋轉(zhuǎn)分配的別名寄存器,以釋放所述新別名寄存器的所述分配的別名寄存器。
10.如權(quán)利要求7所述的系統(tǒng),其中,所述優(yōu)化器進一步優(yōu)化所述原始代碼以提供合并的代碼,并且響應(yīng)于所述合并的代碼在所述合并的代碼中的多個邏輯代碼上包括C/P比特,插入偽代碼以分區(qū)所述C/P比特,具有C/P比特。
11.如權(quán)利要求7所述的系統(tǒng),其中,所述優(yōu)化器進一步優(yōu)化所述原始代碼以提供合并的代碼,并將偽代碼插入到所述合并的代碼之后,以中斷所述約束中的一個或多個循環(huán),其中,所述偽代碼與所述合并的代碼訪問同一個存儲器,并與所述合并的代碼使用不同的別名寄存器。
12.如權(quán)利要求7所述的系統(tǒng),其中,所述優(yōu)化器進一步響應(yīng)于檢測到所述約束中的一個或多個循環(huán),延遲對于所述調(diào)度的代碼的所述寄存器分配,阻止對于所述調(diào)度的代碼的所述別名寄存器分配。
13.如權(quán)利要求12所述的系統(tǒng),其中,所述優(yōu)化器進一步將偽代碼插入到所述寄存器分配延遲的代碼之后,以中斷所述約束中的所述循環(huán),其中,所述偽代碼與所述寄存器分配延遲的代碼訪問同一個存儲器,并與所述寄存器分配延遲的代碼使用不同的別名寄存器。
14.如權(quán)利要求12所述的系統(tǒng),其中,所述約束包括檢查約束或防檢查約束。
15.如權(quán)利要求7所述的系統(tǒng),其中,所述優(yōu)化器進一步響應(yīng)于所述新別名寄存器正在被分配,刪除所述調(diào)度的代碼的所述約束。
16.包含當(dāng)由處理系統(tǒng)執(zhí)行時導(dǎo)致計算系統(tǒng)執(zhí)行以下操作的指令的機器可讀取的介質(zhì): 調(diào)度一組指令; 計算所述調(diào)度的指令組的約束; 基于所述約束,為調(diào)度的指令中的一個分配新別名寄存器。
17.如權(quán)利要求16所述的機器可讀取的介質(zhì),其中,還包括響應(yīng)于被執(zhí)行導(dǎo)致所述計算系統(tǒng)執(zhí)行以下操作的多個指令: 釋放未使用的已分配的別名寄存器并為所述新別名寄存器分配所述釋放的寄存器。
18.如權(quán)利要求16所述的 機器可讀取的介質(zhì),其中,還包括響應(yīng)于被執(zhí)行導(dǎo)致計算設(shè)備執(zhí)行以下操作的多個指令: 在所述調(diào)度的指令組中插入偽調(diào)度指令以中斷所述約束中的循環(huán)。
【文檔編號】G06F9/06GK103502945SQ201180070544
【公開日】2014年1月8日 申請日期:2011年11月29日 優(yōu)先權(quán)日:2011年4月7日
【發(fā)明者】王誠, 吳友峰 申請人:英特爾公司