2012-08-26 24 views

回答

2

是的,有。

首先,請注意,您需要區分「每條BB路徑必須通過A」和「有一條路徑可能導致BB」。

我認爲你正在尋找的第一種情況 - 告訴我們,如果基本塊BB的繼任者是一個基本塊的執行必須通過去B.

當這種情況發生時,我們說「A支配B」。檢查支配地位的界面是通過DominatorTree類(在通行證的getAnalysisUsage函數中添加)。有關示例,請參閱writing an llvm pass)。

+0

謝謝Guy,我通過使用DominatorTree得到了第一個案例。但是現在我還需要第二種情況,那就是「有一條從A到BB的路徑」。任何想法我們可以用它來做什麼? – pythonic

+0

我不確定是否有一個LLVM方法可以做到這一點(沒有AFAIK) - 但是所有的信息都被編碼在基本塊及其後繼列表(AKA函數的調用圖)中。它實際上是一個有向圖 - 因此您可以從節點A運行BFS,並查看是否可以到達節點B. –