[llvm-commits] [llvm] r79039 - in /llvm/trunk: lib/Target/ARM/ARMBaseRegisterInfo.cpp lib/Target/ARM/ARMBaseRegisterInfo.h test/CodeGen/Thumb2/frameless.ll

Jim Grosbach grosbach at apple.com
Fri Aug 14 18:22:55 PDT 2009


Hi Evan,

I'm seeing regressions with this patch applied. For example, the  
eh10.C test in the gcc testsuite (llvm-gcc/gcc/testsuite/g++.old-deja/g 
++.mike/eh10.C) passes before this patch and fails after. The stack  
pointer is being restored improperly, leading to a crash. Not sure why.

-Jim

On Aug 14, 2009, at 1:48 PM, Evan Cheng wrote:

> Author: evancheng
> Date: Fri Aug 14 15:48:13 2009
> New Revision: 79039
>
> URL: http://llvm.org/viewvc/llvm-project?rev=79039&view=rev
> Log:
> Leaf functions which do not save CSRs can be frameless even with - 
> disable-fp-elim.
>
> Added:
>    llvm/trunk/test/CodeGen/Thumb2/frameless.ll
> Modified:
>    llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp
>    llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h
>
> Modified: llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp?rev=79039&r1=79038&r2=79039&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp Fri Aug 14  
> 15:48:13 2009
> @@ -440,6 +440,13 @@
>           MFI->isFrameAddressTaken());
> }
>
> +bool ARMBaseRegisterInfo::hasStackFrame(const MachineFunction &MF)  
> const {
> +  const MachineFrameInfo *MFI = MF.getFrameInfo();
> +  if (NoFramePointerElim && MFI->hasCalls())
> +    return true;
> +  return MFI->hasVarSizedObjects() || MFI->isFrameAddressTaken();
> +}
> +
> /// estimateStackSize - Estimate and return the size of the frame.
> static unsigned estimateStackSize(MachineFunction &MF,  
> MachineFrameInfo *MFI) {
>   const MachineFrameInfo *FFI = MF.getFrameInfo();
> @@ -589,7 +596,7 @@
>   }
>
>   bool ExtraCSSpill = false;
> -  if (!CanEliminateFrame || hasFP(MF)) {
> +  if (!CanEliminateFrame || hasStackFrame(MF)) {
>     AFI->setHasStackFrame(true);
>
>     // If LR is not spilled, but at least one of R4, R5, R6, and R7  
> is spilled.
>
> Modified: llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h?rev=79039&r1=79038&r2=79039&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h (original)
> +++ llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.h Fri Aug 14  
> 15:48:13 2009
> @@ -89,6 +89,8 @@
>
>   bool hasFP(const MachineFunction &MF) const;
>
> +  bool hasStackFrame(const MachineFunction &MF) const;
> +
>   void processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
>                                             RegScavenger *RS = NULL)  
> const;
>
>
> Added: llvm/trunk/test/CodeGen/Thumb2/frameless.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Thumb2/frameless.ll?rev=79039&view=auto
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/test/CodeGen/Thumb2/frameless.ll (added)
> +++ llvm/trunk/test/CodeGen/Thumb2/frameless.ll Fri Aug 14 15:48:13  
> 2009
> @@ -0,0 +1,6 @@
> +; RUN: llvm-as < %s | llc -mtriple=thumbv7-apple-darwin -disable-fp- 
> elim | not grep mov
> +; RUN: llvm-as < %s | llc -mtriple=thumbv7-linux -disable-fp-elim |  
> not grep mov
> +
> +define arm_apcscc void @t() nounwind readnone {
> +  ret void
> +}
>
>
> _______________________________________________
> 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