2016-03-23 10 views
1

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() 

Antwort

2

Die LLVM IR Datei, die Sie ist falsch formatiert vorgesehen - es ist terminator instructions auf seine Basisblöcke fehlen (außer %entry in @f). Offenbar haben Sie einen Fehler in Ihren benutzerdefinierten Optimierungen.

+1

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

+0

@rennomarcus Wenn es eine separate Frage ist, frage bitte separat :-) (und füge das gesamte Snippet ein, das dir Probleme bereitet) – Oak