私はLLVMを使用してストア命令を取得し、それを別の命令に置き換えて、次のようなものを取得できるようにしています
store i64 %0, i64* %a
そしてそれを
store i64 <value>, i64* %a
私は使用しました
llvm::Value *str = i->getOperand(1);
古い命令が使用しているアドレスを取得してから、新しいストアを作成します (i は現在の命令の場所であるため、このストアは置換するストアの前に作成されます)
StoreInstr *store = new StoreInst(value, str, i);
次に、置き換えたストアを削除します
i->eraseFromParent();
しかし、次のエラーが表示されます: 削除中: i64% 使用は、Def が破棄された後もスタックしています: store i64 , i64* %a と、値が破棄されたときにアサーションが "空を使用" && が使用するという失敗メッセージが失敗します。
どうすればこれを回避できますか?ストア命令を作成してから LLVM の ReplaceInstWithInst を使用したいのですが、挿入する場所を指定せずにストア命令を作成する方法が見つかりません。私はまた、私の問題を100%解決するわけではありません。
ストアを交換する前に追加します。命令 i を照合し、i->eraseFromParent を実行する前に必要な値を取得しているため、それが問題の一部であるかどうかはわかりません。私は、eraseFromParent が i を次のストア命令に移動すると想定しています。