4
對於基本塊,我希望將條件跳轉更改爲無條件跳轉。所以如果一個基本塊有兩個後繼者,我想把這個邊緣移除到其中一個後繼者。我想要基本塊直接跳轉到其中一個後繼者。我怎樣才能做到這一點?如何從LLVM中的終止符指令中刪除後繼者
爲了說明我的觀點,我想改變
A
/\
/ \
B C
到
A
\
\
C
對於基本塊,我希望將條件跳轉更改爲無條件跳轉。所以如果一個基本塊有兩個後繼者,我想把這個邊緣移除到其中一個後繼者。我想要基本塊直接跳轉到其中一個後繼者。我怎樣才能做到這一點?如何從LLVM中的終止符指令中刪除後繼者
爲了說明我的觀點,我想改變
A
/\
/ \
B C
到
A
\
\
C
我認爲最簡單的方法將只是創建一個新的無條件分支指令,然後替換舊有它。所以,像這樣:
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
BranchInst* Old = ...
BranchInst* New = BranchInst::Create(Old->getSuccessor(X));
ReplaceInstWithInst(Old, New);
哪裏X
爲0或1,這取決於如果你想在「真」分支或「假」分支。