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