Hi All,
I am using llvm-2.9 to cross compile to alpha. I know that alpha is in experimental stage, but i can not get even the “Hello World” program to run on it.
Here is what happens, the bitcode file for the hello world program is as follow:
; ModuleID = ‘hello.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-unknown-linux-gnu”
@.str = private constant [12 x i8] c"Hello World\00", align 1
define i32 @main() nounwind {
entry:
%retval = alloca i32
%0 = alloca i32
%“alloca point” = bitcast i32 0 to i32
%1 = call i32 @puts(i8* getelementptr inbounds ([12 x i8]* @.str, i64 0, i64 0)) nounwind
store i32 0, i32* %0, align 4
%2 = load i32* %0, align 4
store i32 %2, i32* %retval, align 4
br label %return
return: ; preds = %entry
%retval1 = load i32* %retval
ret i32 %retval1
}
declare i32 @puts(i8*)
The .str is present in the argument to the puts function in %1 is present in the bitcode.
But when i use llc to change the bitcode to alpha assembly, i get the following:
ldah $29,0($27) !gpdisp!1
lda $29,0($29) !gpdisp!1
$main…ng:
lda $30,-32($30)
stq $9,24($30)
stq $11,16($30)
bis $26,$26,$9
ldq $27,puts($29) !literal
lda $11,8($30)
jsr $26,($27),0
The puts call is there, but register 16 which i believe is supposed to have the arguments to a function call is not set.
If i manually add the line to the assembly,
lda $16, $.str($29)
where $.str is defined in the assembly to be the appropriate string, it works fine, and i get the hello world output.
It seems that for some reason llc is not setting the argument of the function call.
Are there any tests for alpha assembly that presently work with function call? I would like to confirm that something with alpha is working.