2016-03-23 20 views
1

benim derleyici tarafından üretilen bitcode LLVM bir programı çalıştırmak çalışıyorum ama lli komutunu çalıştırdığınızda bir hata verirHata olduğunda direkt

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

'u clang -S -emit-llvm tarafından oluşturulan ile kullandığımda çalışır. Yine de bu kodda birçok optimizasyon var. Bazılarını el ile eklemeye çalıştım ama işe yaramadı.

Sorunum, kodumun yapısının doğru olup olmadığını veya tercümanın düzgün çalışması için belirli bir noktayı eksik mi bilmiyorum. Aslında, JIT'i kodda kullanmayı denedim, ancak kütüphaneler ile bana daha fazla hata veriyordu ve dokümantasyon yararlı değildi.

Benim LLVM bitcode şudur:

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

cevap

2

LLVM IR Eğer hatalı biçimlendirilmiş şartıyla dosya - bu temel bloklar üzerinde terminator instructions eksik (@f yılında %entry hariç). Özel optimizasyonlarınızda bir hata var gibi görünüyor.

+1

İlk önce, teşekkürler! Burada yorumlarda sorduğum başka bir hata olduğunu biliyorum, ancak şimdi "beklenen değer belirteci" hakkında bir hata atıyor. Her iki değere zaten aşağıdaki satırlarla i32 olarak değiştirdim: '% 0 = yük i32 *% b' ve'% tmp_eq = icmp eq i32% 2, i32 25' ama yine de çalışmıyor. Ne yapabileceğimi biliyor musun? – mk2

+0

@rennomarcus bu ayrı bir soru ise, lütfen ayrı olarak sorun. :-) (ve size sorun veren tüm snippet'i dahil edin) – Oak

İlgili konular