Как удалить преемника из инструкции терминатора в LLVM

Для базового блока я хочу изменить условный переход на безусловный переход. Поэтому, если в базовом блоке было два преемника, я хочу удалить ребро одному из преемников. Я хочу, чтобы основной блок сразу перешел к одному из преемников. Как я могу это сделать?

Чтобы проиллюстрировать свою точку зрения, я хочу изменить

      A
/  \
/    \
B      C

в

     A
\
\
C

4

Решение

Я думаю, что самый простой способ будет просто создать новую безусловную инструкцию перехода, а затем заменить старую. Итак, что-то вроде:

#include "llvm/Transforms/Utils/BasicBlockUtils.h"
BranchInst* Old = ...
BranchInst* New = BranchInst::Create(Old->getSuccessor(X));
ReplaceInstWithInst(Old, New);

куда X 0 или 1, в зависимости от того, хотите ли вы иметь «истинную» ветвь или «ложную» ветвь.

6

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector