簡體   English   中英

如何從LLVM中的終止程序指令中刪除后繼程序

[英]How to remove a successor from a terminator instruction in 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,取決於您是否要使用“ true”分支或“ false”分支。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM