[LLVMbugs] [Bug 1541] NEW: incorrect code generation from LLVM to x86 asm w/r to __alloca
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Thu Jul 5 05:32:53 PDT 2007
http://llvm.org/bugs/show_bug.cgi?id=1541
Summary: incorrect code generation from LLVM to x86 asm w/r to
__alloca
Product: new-bugs
Version: unspecified
Platform: PC
OS/Version: Windows XP
Status: NEW
Severity: normal
Priority: P2
Component: new bugs
AssignedTo: unassignedbugs at nondot.org
ReportedBy: nadiasvertex at gmail.com
I'm using LLVM as the backend compiler for a language compiler I am running.
While trying to interface to the C runtime libraries on the platform, I
consistently got garbage to the display when executing puts.
Running through a debugger, I see that the memory being set aside by __alloca is
being lost. I have included both the LLVM and the generated x86 code, as well a
comment where I think the generated code is broken.
The LLVM code:
%r2 = select i1 true, %type.metal_string_t * %data, %type.metal_string_t * %data
;id_val
; Copy the metal string and make it into a c-string.
%r4 = getelementptr %type.metal_string_t *%r2, i32 0, i32 0
%r5 = load i32 *%r4
%r6 = add i32 %r5, 1
%r3 = alloca i8, i32 %r6
call void @llvm.memset.i32(i8 *%r3, i8 0, i32 %r6, i32 0)
%r7 = getelementptr %type.metal_string_t *%r2, i32 0, i32 1
%r8 = load i8 **%r7
call void @llvm.memcpy.i32(i8 *%r3, i8 *%r8, i32 %r5, i32 0)
; End copy into a c-string.
call i32 @puts(i8 * %r3)
The actual x86 assembler:
movl (%esi), %edi
movl %edi, %eax
addl $16, %eax
andl $4294967280, %eax
call __alloca
subl $16, %esp
; THIS IS THE PROBLEM: The return value from __alloca is being lost.
movl %edi, %eax
incl %eax
movl %eax, 8(%esp)
movl $0, 4(%esp)
movl %esp, %ebx
movl %ebx, (%esp)
call _memset
addl $16, %esp
movl 4(%esi), %eax
subl $16, %esp
movl %edi, 8(%esp)
movl %eax, 4(%esp)
movl %ebx, (%esp)
call _memcpy
addl $16, %esp
subl $16, %esp
movl %ebx, (%esp)
call _puts
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
More information about the llvm-bugs
mailing list