私はLLVMパスを書いています。私のパスは、どのブロックがマージ ブロックであるか、つまり、複数の先行ブロックを持つブロックであるかを知る必要があります。コードでこれをテストするにはどうすればよいですか?
1 に答える
4
次のように、すべての前任者を反復処理できます。
#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
{ ... }
于 2012-04-12T00:17:53.117 に答える