删除一组llvm指令

删除一组llvm指令,llvm,instructions,Llvm,Instructions,我想知道如何删除LLVM中的一组指令。 我尝试了以下内容(基于llvm开发人员邮件列表中的一篇文章) 除最后一次迭代外,所有操作都按预期进行。 有人知道为什么吗?(我尝试过使用gdb,但它在 最后一次迭代)构建循环的方式使内部代码尝试删除无效的迭代器:it==it\u end。一个简单的如果(it==it\u end)继续在it++之后将有帮助 不确定LLVM iterables是如何构建的,但是对于stl容器,erase将返回一个递增的迭代器,因此您甚至不需要奇怪的循环。简单地看一下这个例子似

我想知道如何删除LLVM中的一组指令。 我尝试了以下内容(基于llvm开发人员邮件列表中的一篇文章)

除最后一次迭代外,所有操作都按预期进行。 有人知道为什么吗?(我尝试过使用gdb,但它在
最后一次迭代)

构建循环的方式使内部代码尝试删除无效的迭代器:
it==it\u end
。一个简单的
如果(it==it\u end)继续
it++
之后将有帮助

不确定LLVM iterables是如何构建的,但是对于stl容器,
erase
将返回一个递增的迭代器,因此您甚至不需要奇怪的循环。简单地看一下这个例子似乎可以证实这一点

// delete all instructions between [start,end)

void deleteAllInstructionsInRange(Instruction* startInst,Instruction* endInst)
{
    BasicBlock::iterator it(startInst);
    BasicBlock::iterator it_end(endInst);
    it_end--;

    Instruction* currentInst ;

    while(it != it_end )
    {
        currentInst = &*it;

       // this cannot be done at the end of the while loop.
       // has to be incremented before "erasing" the instruction
        ++it;

        if (!currentInst->use_empty())
        {   
            currentInst->replaceAllUsesWith(UndefValue::get(currentInst->getType()));
        }

        currentInst->eraseFromParent();


    }

}