我使用任意IL構建CFG,並想將該CFG轉換回IL。 CFG中頂點的順序當然不等於原始IL指令的順序。將CFG轉換爲IL
這很好,但過於複雜一些東西。想象:
Jump 'B'
'C': Return
'B': Jump 'C'
這將導致一個流圖是這樣的:(跳轉B) - >(跳轉C) - >(返回) 當然,這是一個簡化的例子,但轉換出來時,它示出了該問題的CFG。
在學術界有沒有關於此主題的任何信息?我認爲自下而上遍歷圖將非常優雅,但在更復雜的情況下不起作用。
解決方案可能是自頂向下並搜索CF合併,但在這種情況下,我無法正確處理循環。所以唯一的辦法就是尋找可能的CF合併,如果它發生的話。如果沒有,我們必須有一個循環,這意味着循環是首選,並在之後評估連續路徑。這聽起來像是一個可解決的問題,但它也非常昂貴,並且可能存在更加優雅的解決方案。除了一個循環在考慮一個「break」語句時還可能導致CF合併。
一條指令需要一個標籤,因爲它是一個基本塊的領導者,它沒有前任,或者多於一個前輩,或者只有一個前輩,但是前輩具有多於一個後輩。 – inv 2010-08-04 00:56:23