首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >eraseFromParent() LLVM的故障分割

eraseFromParent() LLVM的故障分割
EN

Stack Overflow用户
提问于 2022-02-07 05:04:59
回答 1查看 188关注 0票数 1
代码语言:javascript
运行
复制
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。但是,不管我怎么尝试,它最终都是分割错误!需要一些指导,这里请

代码语言:javascript
运行
复制
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.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-07 07:01:59

首先,这不是一个分割错误,而是一个断言,它告诉你什么地方出了问题。特别是,该消息解释说,除非指令的任何用途仍在功能中,否则不能删除它。

通常,您首先创建一个新指令,用新的结果(通过Value::replaceAllUsesWith())替换所有要删除的指令,然后再擦除。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71013749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档