2016-03-23 35 views
1

私は、コンパイラによって生成されたビットコードLLVMからプログラムを実行しようとしているが、私はlliコマンドを実行すると、それはエラーを返しますエラー時に直接

lli-3.6: test2.ll:9:1: error: expected instruction opcode 

clang -S -emit-llvmで生成された.llを持つlliを使用するとうまくいきます。しかし、このコードには多くの最適化があります。私は手動でそれらのいくつかを挿入しようとしましたが、動作しませんでした。

私の問題は、自分のコードの構造が正しいかどうか、あるいはインタープリタが正しく動作するための何かがないことです。もともと、私はコード内でJITを使用しようとしましたが、ライブラリでエラーが増えていて、ドキュメンテーションは役に立ちませんでした。

マイLLVMのビットコードは以下の通りです:

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

答えて

2

LLVM IRは、あなたが不正れ提供されたファイル - それはその基本ブロックにterminator instructionsを欠けている(@f%entryを除きます)。カスタム最適化にバグがあるようです。

+1

まずは、ありがとう!コメントの中で私がここで尋ねているのは別のエラーであることは分かっていますが、今は '期待値トークン'に関するエラーが発生しています。私はすでに '%0 = load i32 *%b'と'%tmp_eq = icmp eq i32%2、i32 25'の両方の値でi32に変更しましたが、それでも動作しません。私は何ができるのか知っていますか? – mk2

+0

@rennomarcus別途ご質問の場合は、別途ご相談ください:-)(問題を起こしているスニペットを含めてください) – Oak

関連する問題