[llvm] r309493 - MC: simplify internal function call parameter

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Sat Jul 29 13:03:02 PDT 2017


Author: compnerd
Date: Sat Jul 29 13:03:02 2017
New Revision: 309493

URL: http://llvm.org/viewvc/llvm-project?rev=309493&view=rev
Log:
MC: simplify internal function call parameter

Rather than passing along most of the parameters, pass a reference to
the MCDWARFrameInfo instead.  This makes it easier to pass additional
information about the frame to the checks.  We need to keep the extra
constructor for the Key around to allow the construction of the null and
tombstone keys.  NFC.

Modified:
    llvm/trunk/lib/MC/MCDwarf.cpp

Modified: llvm/trunk/lib/MC/MCDwarf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDwarf.cpp?rev=309493&r1=309492&r2=309493&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCDwarf.cpp (original)
+++ llvm/trunk/lib/MC/MCDwarf.cpp Sat Jul 29 13:03:02 2017
@@ -1034,10 +1034,7 @@ public:
   /// Emit the unwind information in a compact way.
   void EmitCompactUnwind(const MCDwarfFrameInfo &frame);
 
-  const MCSymbol &EmitCIE(const MCSymbol *personality,
-                          unsigned personalityEncoding, const MCSymbol *lsda,
-                          bool IsSignalFrame, unsigned lsdaEncoding,
-                          bool IsSimple, unsigned RAReg);
+  const MCSymbol &EmitCIE(const MCDwarfFrameInfo &F);
   void EmitFDE(const MCSymbol &cieStart, const MCDwarfFrameInfo &frame,
                bool LastInSection, const MCSymbol &SectionStart);
   void EmitCFIInstructions(ArrayRef<MCCFIInstruction> Instrs,
@@ -1273,12 +1270,7 @@ static unsigned getCIEVersion(bool IsEH,
   llvm_unreachable("Unknown version");
 }
 
-const MCSymbol &FrameEmitterImpl::EmitCIE(const MCSymbol *personality,
-                                          unsigned personalityEncoding,
-                                          const MCSymbol *lsda,
-                                          bool IsSignalFrame,
-                                          unsigned lsdaEncoding, bool IsSimple,
-                                          unsigned RAReg) {
+const MCSymbol &FrameEmitterImpl::EmitCIE(const MCDwarfFrameInfo &Frame) {
   MCContext &context = Streamer.getContext();
   const MCRegisterInfo *MRI = context.getRegisterInfo();
   const MCObjectFileInfo *MOFI = context.getObjectFileInfo();
@@ -1305,12 +1297,12 @@ const MCSymbol &FrameEmitterImpl::EmitCI
   SmallString<8> Augmentation;
   if (IsEH) {
     Augmentation += "z";
-    if (personality)
+    if (Frame.Personality)
       Augmentation += "P";
-    if (lsda)
+    if (Frame.Lsda)
       Augmentation += "L";
     Augmentation += "R";
-    if (IsSignalFrame)
+    if (Frame.IsSignalFrame)
       Augmentation += "S";
     Streamer.EmitBytes(Augmentation);
   }
@@ -1331,6 +1323,7 @@ const MCSymbol &FrameEmitterImpl::EmitCI
   Streamer.EmitSLEB128IntValue(getDataAlignmentFactor(Streamer));
 
   // Return Address Register
+  unsigned RAReg = Frame.RAReg;
   if (RAReg == static_cast<unsigned>(INT_MAX))
     RAReg = MRI->getDwarfRegNum(MRI->getRARegister(), IsEH);
 
@@ -1343,16 +1336,16 @@ const MCSymbol &FrameEmitterImpl::EmitCI
   }
 
   // Augmentation Data Length (optional)
-
   unsigned augmentationLength = 0;
   if (IsEH) {
-    if (personality) {
+    if (Frame.Personality) {
       // Personality Encoding
       augmentationLength += 1;
       // Personality
-      augmentationLength += getSizeForEncoding(Streamer, personalityEncoding);
+      augmentationLength +=
+          getSizeForEncoding(Streamer, Frame.PersonalityEncoding);
     }
-    if (lsda)
+    if (Frame.Lsda)
       augmentationLength += 1;
     // Encoding of the FDE pointers
     augmentationLength += 1;
@@ -1360,15 +1353,15 @@ const MCSymbol &FrameEmitterImpl::EmitCI
     Streamer.EmitULEB128IntValue(augmentationLength);
 
     // Augmentation Data (optional)
-    if (personality) {
+    if (Frame.Personality) {
       // Personality Encoding
-      emitEncodingByte(Streamer, personalityEncoding);
+      emitEncodingByte(Streamer, Frame.PersonalityEncoding);
       // Personality
-      EmitPersonality(Streamer, *personality, personalityEncoding);
+      EmitPersonality(Streamer, *Frame.Personality, Frame.PersonalityEncoding);
     }
 
-    if (lsda)
-      emitEncodingByte(Streamer, lsdaEncoding);
+    if (Frame.Lsda)
+      emitEncodingByte(Streamer, Frame.LsdaEncoding);
 
     // Encoding of the FDE pointers
     emitEncodingByte(Streamer, MOFI->getFDEEncoding());
@@ -1377,7 +1370,7 @@ const MCSymbol &FrameEmitterImpl::EmitCI
   // Initial Instructions
 
   const MCAsmInfo *MAI = context.getAsmInfo();
-  if (!IsSimple) {
+  if (!Frame.IsSimple) {
     const std::vector<MCCFIInstruction> &Instructions =
         MAI->getInitialFrameState();
     EmitCFIInstructions(Instructions, nullptr);
@@ -1473,12 +1466,18 @@ struct CIEKey {
   }
 
   CIEKey(const MCSymbol *Personality, unsigned PersonalityEncoding,
-         unsigned LsdaEncoding, bool IsSignalFrame, bool IsSimple,
+         unsigned LSDAEncoding, bool IsSignalFrame, bool IsSimple,
          unsigned RAReg)
       : Personality(Personality), PersonalityEncoding(PersonalityEncoding),
-        LsdaEncoding(LsdaEncoding), IsSignalFrame(IsSignalFrame),
+        LsdaEncoding(LSDAEncoding), IsSignalFrame(IsSignalFrame),
         IsSimple(IsSimple), RAReg(RAReg) {}
 
+  explicit CIEKey(const MCDwarfFrameInfo &Frame)
+      : Personality(Frame.Personality),
+        PersonalityEncoding(Frame.PersonalityEncoding),
+        LsdaEncoding(Frame.LsdaEncoding), IsSignalFrame(Frame.IsSignalFrame),
+        IsSimple(Frame.IsSimple), RAReg(Frame.RAReg) {}
+
   const MCSymbol *Personality;
   unsigned PersonalityEncoding;
   unsigned LsdaEncoding;
@@ -1564,13 +1563,10 @@ void MCDwarfFrameEmitter::Emit(MCObjectS
       // of by the compact unwind encoding.
       continue;
 
-    CIEKey Key(Frame.Personality, Frame.PersonalityEncoding, Frame.LsdaEncoding,
-               Frame.IsSignalFrame, Frame.IsSimple, Frame.RAReg);
+    CIEKey Key(Frame);
     const MCSymbol *&CIEStart = IsEH ? CIEStarts[Key] : DummyDebugKey;
     if (!CIEStart)
-      CIEStart = &Emitter.EmitCIE(
-          Frame.Personality, Frame.PersonalityEncoding, Frame.Lsda,
-          Frame.IsSignalFrame, Frame.LsdaEncoding, Frame.IsSimple, Frame.RAReg);
+      CIEStart = &Emitter.EmitCIE(Frame);
 
     Emitter.EmitFDE(*CIEStart, Frame, I == E, *SectionStart);
   }




More information about the llvm-commits mailing list