bool runOnFunction(Function &F) override {
outs() << "Inside Function: "<<F.getName()<<"\n";
int i = 0;
map<int, Instruction*> work;
for(BasicBlock &BB : F)
for(Instruction &I : BB){
if(i == 15)
work.insert({i, &I});
i++;
}
std::map<int, Instruction*>::iterator it = work.begin();
it->second->eraseFromParent();
return true;
}
以上是我的代码片段。在这里,在上面的代码中,我想随机删除一条指令。只是为了知道如何使用这个api。但是,不管我怎么尝试,它最终都是分割错误!需要一些指导,这里请
Inside Function: change_g
While deleting: i32 %
Use still stuck around after Def is destroyed: %add = add nsw i32 <badref>, %l
opt: /home/user/llvm-project/llvm/lib/IR/Value.cpp:103: llvm::Value::~Value(): Assertion `materialized_use_empty() && "Uses remain when a value is destroyed!"' failed.
发布于 2022-02-07 07:01:59
首先,这不是一个分割错误,而是一个断言,它告诉你什么地方出了问题。特别是,该消息解释说,除非指令的任何用途仍在功能中,否则不能删除它。
通常,您首先创建一个新指令,用新的结果(通过Value::replaceAllUsesWith()
)替换所有要删除的指令,然后再擦除。
https://stackoverflow.com/questions/71013749
复制相似问题