[llvm-commits] [llvm] r62338 - in /llvm/trunk: lib/Target/X86/X86ISelLowering.cpp test/CodeGen/X86/ret-addr.ll
Bill Wendling
isanbard at gmail.com
Fri Jan 16 11:43:08 PST 2009
For Depth > 1 (2 in this case), I get this from LLVM:
.align 1,0x90
.globl _h
_h:
pushl %ebp
movl %esp, %ebp
pushl %ebp
movl (%ebp), %eax
movl (%eax), %eax
movl 4(%eax), %eax
popl %ebp
popl %ebp
ret
And this from GCC:
.globl _h
_h:
pushl %ebp
movl %esp, %ebp
movl 0(%ebp), %eax
movl (%eax), %eax
movl 4(%eax), %eax
leave
ret
Except for the extraneous push/pop, these are the same, right? Or am I
missing something?
-bw
On Fri, Jan 16, 2009 at 11:37 AM, Dale Johannesen <dalej at apple.com> wrote:
> This doesn't do the right thing for Depth > 1. I don't think we need
> to short term, but the test should be ==1 and a comment should
> indicate this.
>
> On Jan 16, 2009, at 11:25 AMPST, Bill Wendling wrote:
>>
>> + if (Depth > 0) {
>> + SDValue FrameAddr = LowerFRAMEADDR(Op, DAG);
>> + SDValue Offset =
>> + DAG.getConstant(TD->getPointerSize(),
>> + Subtarget->is64Bit() ? MVT::i64 : MVT::i32);
>> + return DAG.getLoad(getPointerTy(), DAG.getEntryNode(),
>> + DAG.getNode(ISD::ADD, getPointerTy(),
>> FrameAddr, Offset),
>> + NULL, 0);
>> + }
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list