LLVM: Anweisung dominiert nicht alle Verwendungen

Ich teile alle Basisblöcke mit einer minimalen Anzahl von Anweisungen auf (normalerweise 3-5):

llvm::SplitBlock(BasicBlock, &*BasicBlockiter, Pass);

und versuchen, Objektdatei von IR zu bekommen

llc -filetype=obj 2.ll

Ich habe folgende Fehlermeldungen erhalten:

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

und

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!"

und

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

Ich denke, dass die Anweisungen nach dem Teilen in verschiedenen Basisblöcken liegen. Wenn ich den Block in 10-15 Anweisungen aufteile, ist alles in Ordnung. Wie kann ich diese Fehler vorhersagen / prüfen und vermeiden?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage