[LLVMdev] function failing to run in Jit

Andrew Ferguson andrewf at idlearts.com
Sun Jul 24 18:44:50 PDT 2011


Is there any reason this generated code won't run in the Jit?
I've pretty much got everything else working for my front end 
which all runs fin in the Jit but I can't get global arrays to work. 

; ModuleID = 'test'
target datalayout =
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32"
target triple = "i686-pc-linux-gnu"

@MyArray = external global [1000 x i32]

define i32 @foo(i32 %a, i32 %b) {
Entry:
  %mul = mul i32 %b, %a
  %ptr = getelementptr inbounds [1000 x i32]* @MyArray, i32 0, i32 %a
  store i32 %mul, i32* %ptr, align 4
  ret i32 %a
}

Comparing it to the web compiled c equivalent I can't see any relevant
difference.  

; ModuleID = '/tmp/webcompile/_925_0.bc'
target datalayout =
"e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
target triple = "x86_64-linux-gnu"

@array = common global [1000 x i32] zeroinitializer, align 32 ; <[1000 x
i32]*> [#uses=1]

define i32 @foo(i32 %a, i32 %b) nounwind {
entry:
  %0 = mul nsw i32 %b, %a                         ; <i32> [#uses=1]
  %1 = sext i32 %a to i64                         ; <i64> [#uses=1]
  %2 = getelementptr inbounds [1000 x i32]* @array, i64 0, i64 %1 ;
<i32*> [#uses=1]
  store i32 %0, i32* %2, align 4
  ret i32 %a
}








More information about the llvm-dev mailing list