すべての基本ブロックを最小数の命令 (通常は 3 ~ 5) で分割しています。
llvm::SplitBlock(BasicBlock, &*BasicBlockiter, Pass);
IRからオブジェクトファイルを取得しようとしています
llc -filetype=obj 2.ll
次のエラーが発生しました。
Instruction does not dominate all uses!
%1 = alloca i32
%mul = load i32* %1
Instruction does not dominate all uses!
%1 = alloca i32
%99 = load i32* %1
と
While deleting: i32 %
Use still stuck around after Def is destroyed: %var = alloca i32
Assertion failed: use_empty() && "Uses remain when a value is destroyed!"
と
error: expected instruction opcode
invoke.cont2: ; preds = %main_block, %invoke
.cont
IR:
invoke.cont2: ; preds = %main_block, %invoke.cont
%call4 = invoke i32 @_ZStorSt13_Ios_OpenmodeS_(i32 8, i32 16)
to label %invoke.cont3 unwind label %lpad1
store i32 %call4, i32* %var4
分割後、命令は別の基本ブロックに配置されていると思います。ブロックを 10 ~ 15 の命令に分割すると、すべて問題ありません。このエラーを予測/確認して回避するにはどうすればよいですか?