[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