2012-11-09 26 views
4

對於基本塊,我希望將條件跳轉更改爲無條件跳轉。所以如果一個基本塊有兩個後繼者,我想把這個邊緣移除到其中一個後繼者。我想要基本塊直接跳轉到其中一個後繼者。我怎樣才能做到這一點?如何從LLVM中的終止符指令中刪除後繼者

爲了說明我的觀點,我想改變

 A 
    /\ 
/ \ 
    B  C 

 A 
     \ 
     \ 
     C 

回答

6

我認爲最簡單的方法將只是創建一個新的無條件分支指令,然後替換舊有它。所以,像這樣:

#include "llvm/Transforms/Utils/BasicBlockUtils.h" 

BranchInst* Old = ... 
BranchInst* New = BranchInst::Create(Old->getSuccessor(X)); 
ReplaceInstWithInst(Old, New); 

哪裏X爲0或1,這取決於如果你想在「真」分支或「假」分支。