[llvm-commits] [llvm] r75581 - /llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp

Bill Wendling isanbard at gmail.com
Mon Jul 13 22:26:18 PDT 2009


Did what work? This hack worked. You fix also worked, and made this  
hack obsolete. :-)

As for the corresponding restore, this hack didn't remove the initial  
"push", so there was no need to remove that restore.

-bw

On Jul 13, 2009, at 9:55 PM, Evan Cheng wrote:

> Hrm. I didn't notice this before. Did it even work? What about the
> corresponding restore?
>
> Evan
>
> On Jul 13, 2009, at 6:16 PM, Bill Wendling wrote:
>
>> Author: void
>> Date: Mon Jul 13 20:16:18 2009
>> New Revision: 75581
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=75581&view=rev
>> Log:
>> Remove hack now that Evan fixed it so that the frame pointer isn't
>> saved twice.
>>
>> Modified:
>>   llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
>>
>> Modified: llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp?rev=75581&r1=75580&r2=75581&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> = 
>> =====================================================================
>> --- llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp (original)
>> +++ llvm/trunk/lib/Target/X86/X86RegisterInfo.cpp Mon Jul 13
>> 20:16:18 2009
>> @@ -691,29 +691,6 @@
>>    unsigned Reg = I->getReg();
>>    Offset = MaxOffset - Offset + saveAreaOffset;
>>
>> -    // Don't output a new machine move if we're re-saving the frame
>> -    // pointer. This happens when the PrologEpilogInserter has
>> inserted an extra
>> -    // "PUSH" of the frame pointer -- the "emitPrologue" method
>> automatically
>> -    // generates one when frame pointers are used. If we generate a
>> "machine
>> -    // move" for this extra "PUSH", the linker will lose track of
>> the fact that
>> -    // the frame pointer should have the value of the first "PUSH"
>> when it's
>> -    // trying to unwind.
>> -    //
>> -    // FIXME: This looks inelegant. It's possibly correct, but it's
>> covering up
>> -    //        another bug. I.e., one where we generate a prolog
>> like this:
>> -    //
>> -    //          pushl  %ebp
>> -    //          movl   %esp, %ebp
>> -    //          pushl  %ebp
>> -    //          pushl  %esi
>> -    //           ...
>> -    //
>> -    //        The immediate re-push of EBP is unnecessary. At the
>> least, it's an
>> -    //        optimization bug. EBP can be used as a scratch
>> register in certain
>> -    //        cases, but probably not when we have a frame pointer.
>> -    if (HasFP && FramePtr == Reg)
>> -      continue;
>> -
>>    MachineLocation CSDst(MachineLocation::VirtualFP, Offset);
>>    MachineLocation CSSrc(Reg);
>>    Moves.push_back(MachineMove(LabelId, CSDst, CSSrc));
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
> _______________________________________________
> 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