[LLVMdev] ASM appears to be incorrect from llc
Matthew Huck
matthew.huck at gmail.com
Wed Feb 15 15:36:05 PST 2012
Hi,
I'm trying to compile an intermediate representation file to ASM (intel
style), and I believe that the resultant ASM is invalid. The IR is:
; ModuleID = 'test.u'
%vec2 = type { float, float }
@t = global %vec2 zeroinitializer
@x = global i32 0
define i32 @main__i__v() nounwind {
locals:
%0 = load float* getelementptr inbounds (%vec2* @t, i32 0, i32 0)
%1 = fptosi float %0 to i64
%2 = trunc i64 %1 to i32
store i32 %2, i32* @x
ret i32 0
}
Now, I know no memory is allocated for t (ignore that), we'll just expect
the final program to crash
Running this through
llvm-as.exe test.trunk.ll -f -o test.bc
and then
llc -x86-asm-syntax=intel -o test.trunk.S test.bc
yields:
.def _main__i__v;
.scl 2;
.type 32;
.endef
.text
.globl _main__i__v
.align 16, 0x90
_main__i__v: # @main__i__v
# BB#0: # %locals
sub ESP, 20
movss XMM0, DWORD PTR [_t]
movss DWORD PTR [ESP + 8], XMM0
fld DWORD PTR [ESP + 8]
fisttp QWORD PTR [ESP]
mov EAX, DWORD PTR [ESP]
mov _x, EAX
xor EAX, EAX
add ESP, 20
ret
.data
.globl _t # @t
.align 8
_t:
.zero 8
.globl _x # @x
.align 4
_x:
.long 0 # 0x0
Now, the bit I think is wrong is
mov _x,EAX
I think it should be
mov [_x], eax
Thoughts?
Cheers
Matthew
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120216/7ab762df/attachment.html>
More information about the llvm-dev
mailing list