4
我正在編寫LLVM Pass。我的通道需要知道哪個塊是合併塊,即具有多於1個前輩的塊。我如何在我的代碼中測試這個?在LLVM中,如何檢查塊是否爲合併塊
我正在編寫LLVM Pass。我的通道需要知道哪個塊是合併塊,即具有多於1個前輩的塊。我如何在我的代碼中測試這個?在LLVM中,如何檢查塊是否爲合併塊
可以遍歷所有的前輩是這樣的:
#include "llvm/Support/CFG.h"
BasicBlock *BB = ...;
for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
BasicBlock *Pred = *PI;
// ...
}
您可以驗證如果BB有使用不止一種的前身:
BasicBlock *BB = ...;
if (BB->getSinglePredecessor() != null) /// one predecessor
{ ... }
else /// more than one predecessor
{ ... }