2015-05-13 29 views
2

將抽象語法樹表達式轉換爲SSA基本塊需要以線性順序寫出表達式中的所有操作,例如, x * y + 1按此順序轉換爲包含*+的操作列表。在基本塊中包含原子值

通常在操作列表中包含變量和文字提取?即以上是否應列出長度爲2或5的列表?

在一方面,加載全局變量的值,或一個恆定,到寄存器是將最終不得不被調度的操作。

在另一方面,決定什麼樣的價值觀將生活在寄存器中的東西通常過程中或SSA形式轉換離開後進行。第三方面,在線性序列中包含原子值意味着您可以通過迭代基本塊和操作來回答諸如「該函數訪問什麼全局變量」這樣的問題,而不必遍歷每個操作的參數。

是否還有其他我缺少的注意事項?

澄清:局部變量名一般消失在SSA(有沒有必要對他們來說,你可以只使用一個直接指針,以生成該值的操作)。我在想事情還是需要的名字 - 常量,全局變量名,局部變量,其地址已被採取等

回答

2

這取決於你希望你的優化做什麼。

如果你想有一個很大的自由安排操作數取(也許是因爲他們是昂貴的),你會想給他們明確的,所以你可以操縱他們。 (舊的Cray機器有數據和地址寄存器:您可以加載地址寄存器並開始對數據寄存器的提取,然後執行其他操作,最後在沒有其他可計劃的計算時觸摸數據寄存器)。

如果您不太在乎,你可以將整個基本塊的,有很多的輸入和輸出的單SSA節點模型。