Используя Instruction::moveBefore(Instruction *movPos) в LLVM IR

Как переместить Instruction в BasicBlock(пусть BB1) в другой BasicBlock(пусть BB2), когда BB1 и BB2 находятся в одной и той же функции? Я писал проход LLVM для выполнения этой части кода:

if(cur_fun->getName() == "main"){
    int i = 1;
    Instruction &I_nx_bl = (cur_fun->front()).getSingleSuccessor()->front();
    for(Instruction &I : cur_fun->front()){
        if(i == 2){
            I.moveAfter(&I_nx_bl);
        }
        i++;
    }

}

в программе, чей CFG:

каждый раз, используя эту функцию, я получал ошибку:

bool IsReverse = false; bool IsConst = false;llvm::ilist_iterator<OptionsT, IsReverse, IsConst>::reference = llvm::Instruction&]: Assertion `!NodePtr->isKnownSentinel()' failed.

0 ответов

Другие вопросы по тегам