我正在与 LLVM 合作以获取存储指令并将其替换为另一个指令,以便我可以使用类似的东西
store i64 %0, i64* %a
并将其替换为
store i64 <value>, i64* %a
我用过
llvm::Value *str = i->getOperand(1);
获取我的旧指令正在使用的地址,然后我通过创建一个新存储(我是当前指令位置,所以这个存储将在我要替换的存储之前创建)
StoreInstr *store = new StoreInst(value, str, i);
然后我删除了我已经替换的商店
i->eraseFromParent();
但是我收到错误消息:删除时:i64% Use 在 Def 被销毁后仍然卡住: store i64 , i64* %a 和 Assertion “use empty” && 使用的失败消息在值被销毁失败时仍然存在。
我怎么能解决这个问题?我很想创建一个存储指令,然后使用 LLVM 的 ReplaceInstWithInst,但是我找不到一种方法来创建存储指令而不给它一个插入自身的位置。我也不是 100% 会解决我的问题。
我会在更换商店之前添加它,我匹配一条指令 i,然后在执行 i->eraseFromParent 之前获取我需要的值,所以我不确定这是否是我的问题的一部分;我假设 eraseFromParent 将 i 移动到以下存储指令。