Ich versuche, ein Programm aus dem LLVM laufe Bitcode erzeugt durch meinen Compiler, aber wenn ich den lli
Befehl ausführen gibt es einen FehlerFehler bei der direkten Ausführung von Programm von LLVM Bitcode (erwarteter Befehlsopcode)
lli-3.6: test2.ll:9:1: error: expected instruction opcode
Wenn ich die lli
mit der .ll von generiert funktioniert es. In diesem Code gibt es jedoch viele Optimierungen. Ich habe versucht, einige von ihnen manuell einzufügen, aber es hat nicht funktioniert.
Mein Problem ist, dass ich nicht weiß, ob die Struktur meines Codes korrekt ist, oder ob es gerade etwas fehlt, damit der Interpreter richtig funktioniert. Ursprünglich habe ich versucht, das JIT im Code zu verwenden, aber es gab mir mehr Fehler bei den Bibliotheken und die Dokumentation war nicht hilfreich.
Mein llvm Bitcode ist folgende:
%struct.test = type { i32, i32 }
define internal void @test_program() {
entry:
%a = alloca i32
store i32 5, i32* %a
call void @printf(i32 3)
%bar = alloca %struct.test
}
define internal void @f(i32 %x) {
entry:
%b = alloca i32
%mul = mul i32 6, 2
%add = add i32 %mul, 3
%add1 = add i32 10, %add
store i32 %add1, i32* %b
%tmp_eq = icmp eq i32* %b, i32 25
br i1 %tmp_eq, label %cond_true, label %cond_false
cond_true: ; preds = %entry
store i32 40, i32* %b
cond_false: ; preds = %entry
store i32 50, i32* %b
}
declare void @printf()
Zuerst, danke! Ich weiß, dass es ein weiterer Fehler ist, den ich hier in den Kommentaren stelle, aber es wirft jetzt einen Fehler über 'Erwartungswert-Token' auf. Ich habe bereits beide Werte auf i32 mit folgenden Zeilen geändert: '% 0 = lade i32 *% b' und'% tmp_eq = icmp eq i32% 2, i32 25' aber es funktioniert immer noch nicht. Weißt du, was ich tun könnte? – mk2
@rennomarcus Wenn es eine separate Frage ist, frage bitte separat :-) (und füge das gesamte Snippet ein, das dir Probleme bereitet) – Oak