[llvm-commits] [llvm] r57048 - in /llvm/trunk: lib/Target/X86/X86InstrInfo.cpp test/CodeGen/X86/2008-08-31-EH_RETURN32.ll test/CodeGen/X86/2008-08-31-EH_RETURN64.ll

Evan Cheng evan.cheng at apple.com
Mon Oct 6 11:18:36 PDT 2008


Hi Anton,

Do you know why it's breaking unwinding? With the patch backed out,  
it's generating:

         .text
         .align  16
         .globl  test
         .type   test, at function
test:
.Leh_func_begin1:
         pushl   %ebp
.Llabel1:
         movl    %esp, %ebp
.Llabel2:
         pushl   %ebp

Is the second push of ebp necessary?

Evan

On Oct 4, 2008, at 4:09 AM, Anton Korobeynikov wrote:

> Author: asl
> Date: Sat Oct  4 06:09:36 2008
> New Revision: 57048
>
> URL: http://llvm.org/viewvc/llvm-project?rev=57048&view=rev
> Log:
> Revert r56675 - it breaks unwinding runtime everywhere.
>
> Modified:
>    llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
>    llvm/trunk/test/CodeGen/X86/2008-08-31-EH_RETURN32.ll
>    llvm/trunk/test/CodeGen/X86/2008-08-31-EH_RETURN64.ll
>
> Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=57048&r1=57047&r2=57048&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Sat Oct  4 06:09:36  
> 2008
> @@ -1833,49 +1833,39 @@
> }
>
> bool X86InstrInfo::spillCalleeSavedRegisters(MachineBasicBlock &MBB,
> -                                              
> MachineBasicBlock::iterator MI,
> +                                                 
> MachineBasicBlock::iterator MI,
>                                 const std::vector<CalleeSavedInfo>  
> &CSI) const {
>   if (CSI.empty())
>     return false;
>
> -  MachineFunction &MF = *MBB.getParent();
>   bool is64Bit = TM.getSubtarget<X86Subtarget>().is64Bit();
> -  unsigned FrameReg = is64Bit ? X86::RBP : X86::EBP;
> +  unsigned SlotSize = is64Bit ? 8 : 4;
> +
> +  MachineFunction &MF = *MBB.getParent();
> +  X86MachineFunctionInfo *X86FI =  
> MF.getInfo<X86MachineFunctionInfo>();
> +  X86FI->setCalleeSavedFrameSize(CSI.size() * SlotSize);
> +
>   unsigned Opc = is64Bit ? X86::PUSH64r : X86::PUSH32r;
> -  unsigned CSSize = 0;
>   for (unsigned i = CSI.size(); i != 0; --i) {
>     unsigned Reg = CSI[i-1].getReg();
> -    if (Reg == FrameReg && RI.hasFP(MF))
> -      // It will be saved as part of the prologue.
> -      continue;
>     // Add the callee-saved register as live-in. It's killed at the  
> spill.
>     MBB.addLiveIn(Reg);
>     BuildMI(MBB, MI, get(Opc)).addReg(Reg);
> -    ++CSSize;
>   }
> -
> -  X86MachineFunctionInfo *X86FI =  
> MF.getInfo<X86MachineFunctionInfo>();
> -  unsigned SlotSize = is64Bit ? 8 : 4;
> -  X86FI->setCalleeSavedFrameSize(CSSize * SlotSize);
>   return true;
> }
>
> bool X86InstrInfo::restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
> -                                                
> MachineBasicBlock::iterator MI,
> +                                                  
> MachineBasicBlock::iterator MI,
>                                 const std::vector<CalleeSavedInfo>  
> &CSI) const {
>   if (CSI.empty())
>     return false;
>
> -  MachineFunction &MF = *MBB.getParent();
>   bool is64Bit = TM.getSubtarget<X86Subtarget>().is64Bit();
> -  unsigned FrameReg = is64Bit ? X86::RBP : X86::EBP;
>
>   unsigned Opc = is64Bit ? X86::POP64r : X86::POP32r;
>   for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
>     unsigned Reg = CSI[i].getReg();
> -    if (Reg == FrameReg && RI.hasFP(MF))
> -      // It will be restored as part of the epilogue.
> -      continue;
>     BuildMI(MBB, MI, get(Opc), Reg);
>   }
>   return true;
>
> Modified: llvm/trunk/test/CodeGen/X86/2008-08-31-EH_RETURN32.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2008-08-31-EH_RETURN32.ll?rev=57048&r1=57047&r2=57048&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/test/CodeGen/X86/2008-08-31-EH_RETURN32.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/2008-08-31-EH_RETURN32.ll Sat Oct  4  
> 06:09:36 2008
> @@ -1,5 +1,5 @@
> ; Check that eh_return & unwind_init were properly lowered
> -; RUN: llvm-as < %s | llc | grep %ebp | count 7
> +; RUN: llvm-as < %s | llc | grep %ebp | count 9
> ; RUN: llvm-as < %s | llc | grep %ecx | count 5
>
> target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32- 
> i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64"
>
> Modified: llvm/trunk/test/CodeGen/X86/2008-08-31-EH_RETURN64.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2008-08-31-EH_RETURN64.ll?rev=57048&r1=57047&r2=57048&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/test/CodeGen/X86/2008-08-31-EH_RETURN64.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/2008-08-31-EH_RETURN64.ll Sat Oct  4  
> 06:09:36 2008
> @@ -1,5 +1,5 @@
> ; Check that eh_return & unwind_init were properly lowered
> -; RUN: llvm-as < %s | llc | grep %rbp | count 5
> +; RUN: llvm-as < %s | llc | grep %rbp | count 7
> ; RUN: llvm-as < %s | llc | grep %rcx | count 3
>
> target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32- 
> i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64- 
> s0:64:64-f80:128:128"
>
>
> _______________________________________________
> 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