[llvm-commits] [llvm] r135020 - in /llvm/trunk/lib: MC/MCDwarf.cpp Target/X86/X86FrameLowering.cpp
Bill Wendling
isanbard at gmail.com
Tue Jul 12 17:49:09 PDT 2011
Author: void
Date: Tue Jul 12 19:49:09 2011
New Revision: 135020
URL: http://llvm.org/viewvc/llvm-project?rev=135020&view=rev
Log:
Don't emit the FDE end label if the last thing emitted was a compact unwind and
not the FDE
Modified:
llvm/trunk/lib/MC/MCDwarf.cpp
llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
Modified: llvm/trunk/lib/MC/MCDwarf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDwarf.cpp?rev=135020&r1=135019&r2=135020&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCDwarf.cpp (original)
+++ llvm/trunk/lib/MC/MCDwarf.cpp Tue Jul 12 19:49:09 2011
@@ -1018,8 +1018,10 @@
for (unsigned i = 0, n = Streamer.getNumFrameInfos(); i < n; ++i) {
const MCDwarfFrameInfo &Frame = Streamer.getFrameInfo(i);
if (IsEH && AsmInfo.getCompactUnwindSection() &&
- Emitter.EmitCompactUnwind(Streamer, Frame))
+ Emitter.EmitCompactUnwind(Streamer, Frame)) {
+ FDEEnd = NULL;
continue;
+ }
CIEKey Key(Frame.Personality, Frame.PersonalityEncoding,
Frame.LsdaEncoding);
Modified: llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86FrameLowering.cpp?rev=135020&r1=135019&r2=135020&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86FrameLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86FrameLowering.cpp Tue Jul 12 19:49:09 2011
@@ -1059,13 +1059,21 @@
const bool IsRelative = (Operation == MCCFIInstruction::RelMove);
if (Dst.isReg() && Dst.getReg() == MachineLocation::VirtualFP) {
- if (Src.getReg() == MachineLocation::VirtualFP) {
- // DW_CFA_def_cfa_offset
- if (IsRelative)
- CFAOffset += Src.getOffset();
- else
- CFAOffset -= Src.getOffset();
- } // else DW_CFA_def_cfa
+ if (Src.getReg() != MachineLocation::VirtualFP) {
+ // DW_CFA_def_cfa
+ assert(FramePointerReg == -1 &&"Defining more than one frame pointer?");
+ FramePointerReg = Src.getReg();
+ if (TRI->getLLVMRegNum(FramePointerReg, IsEH) != X86::EBP &&
+ TRI->getLLVMRegNum(FramePointerReg, IsEH) != X86::RBP)
+ // The frame pointer isn't EBP/RBP. Cannot make unwind information
+ // compact.
+ return 0;
+ } // else DW_CFA_def_cfa_offset
+
+ if (IsRelative)
+ CFAOffset += Src.getOffset();
+ else
+ CFAOffset -= Src.getOffset();
continue;
}
More information about the llvm-commits
mailing list