Ich habe einen IR mit meinem Pass generiert, innerhalb einer Funktion in diesem IR würde ich gerne zu einem Basisblock der Caller Funktion springen, innerhalb der Caller Funktion ext_callee function aufgerufen wird dies: LLVM IR Sprung zu einem Basisblock innerhalb einer anderen Funktion
%4 = call i1 @ext_callee(i32 32, i32 %3, i32 -4, i8* blockaddress(@tobecalled, %5), i8* blockaddress(@tobecalled, %7)).
die letzten beiden Parameter sind die basicblock Adressen I Funktion innerhalb dieser ext_callee springen möchte. Ich habe versucht, indirectbr Befehl mit einem der blockaddress Parameter zu verwenden, aber wenn ich das IR starte, fordert es Segmentfehler an. Ich habe LLVM-Dokumente durchsucht, aber nicht gefunden, wie man auf Basisblöcke einer anderen Funktion springt. Hat jemand eine Ahnung? Vielen Dank!
Danke, ich dachte, dass die Funktionsumfangsregel im IR zuerst gebrochen werden könnte. Es ist dann ein wenig schwierig. :( – shikai
Betrachten Sie beispielsweise Funktionsextraktion. Wie es dann funktionieren würde? –