[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