[LLVMbugs] [Bug 237] NEW: [x86] wierd stack/frame pointer manipulation
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Fri Feb 13 21:46:16 PST 2004
http://llvm.cs.uiuc.edu/bugs/show_bug.cgi?id=237
Summary: [x86] wierd stack/frame pointer manipulation
Product: libraries
Version: 1.0
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: X86 Backend
AssignedTo: gaeke+bugs at uiuc.edu
ReportedBy: sabre at nondot.org
The X86 backend seems to confuse itself thoroughly when adjusting the stack and
framepointer in several cases, causing inefficient code to be generated. For
example, this trivial function:
int %test(int %X) {
ret int %X
}
Generates this code:
test:
sub %ESP, 4
mov %EAX, DWORD PTR [%ESP + 8]
add %ESP, 4
ret
Obviously the ESP adjustments are unnecessary. Things get even wierder when you
turn off frame-pointer elimination. You get:
test:
sub %ESP, 4
mov DWORD PTR [%ESP], %EBP
lea %EBP, DWORD PTR [%ESP + 4]
mov %EAX, DWORD PTR [%EBP + 4]
mov %ESP, %EBP
mov %EBP, DWORD PTR [%ESP - 4]
ret
The strange part of this is that EBP doesn't point to the old EBP value, it
points to the return address! I think this violates every X86 convention every
invented, and is inefficient (in space and time) to boot.
The X86 backend seems to be consistent in this wierdness at least, so it
compiles programs correctly, but there is no reason for this.
-Chris
------- 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