[llvm-commits] [llvm] r130544 - /llvm/trunk/lib/MC/MCDwarf.cpp

Rafael Espindola rafael.espindola at gmail.com
Fri Apr 29 14:50:57 PDT 2011


Author: rafael
Date: Fri Apr 29 16:50:57 2011
New Revision: 130544

URL: http://llvm.org/viewvc/llvm-project?rev=130544&view=rev
Log:
Avoid some uses of .uleb128. This is a small speedup and more importantly
lets this code be used when producing assembly code for old assemblers without
uleb support.

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=130544&r1=130543&r2=130544&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCDwarf.cpp (original)
+++ llvm/trunk/lib/MC/MCDwarf.cpp Fri Apr 29 16:50:57 2011
@@ -679,15 +679,23 @@
   streamer.EmitULEB128IntValue(asmInfo.getDwarfRARegNum(true));
 
   // Augmentation Data Length (optional)
-  MCSymbol *augmentationStart = streamer.getContext().CreateTempSymbol();
-  MCSymbol *augmentationEnd = streamer.getContext().CreateTempSymbol();
-  const MCExpr *augmentationLength = MakeStartMinusEndExpr(streamer,
-                                                           *augmentationStart,
-                                                           *augmentationEnd, 0);
-  streamer.EmitULEB128Value(augmentationLength);
+
+  unsigned augmentationLength = 0;
+  if (personality) {
+    // Personality Encoding
+    augmentationLength += 1;
+    // Personality
+    augmentationLength += getSizeForEncoding(streamer, personalityEncoding);
+  }
+  if (lsda) {
+    augmentationLength += 1;
+  }
+  // Encoding of the FDE pointers
+  augmentationLength += 1;
+
+  streamer.EmitULEB128IntValue(augmentationLength);
 
   // Augmentation Data (optional)
-  streamer.EmitLabel(augmentationStart);
   if (personality) {
     // Personality Encoding
     streamer.EmitIntValue(personalityEncoding, 1);
@@ -700,7 +708,6 @@
   }
   // Encoding of the FDE pointers
   streamer.EmitIntValue(asmInfo.getFDEEncoding(), 1);
-  streamer.EmitLabel(augmentationEnd);
 
   // Initial Instructions
 
@@ -763,15 +770,14 @@
   streamer.EmitAbsValue(Range, size);
 
   // Augmentation Data Length
-  MCSymbol *augmentationStart = streamer.getContext().CreateTempSymbol();
-  MCSymbol *augmentationEnd = streamer.getContext().CreateTempSymbol();
-  const MCExpr *augmentationLength = MakeStartMinusEndExpr(streamer,
-                                                           *augmentationStart,
-                                                           *augmentationEnd, 0);
-  streamer.EmitULEB128Value(augmentationLength);
+  unsigned augmentationLength = 0;
+
+  if (frame.Lsda || forceLsda)
+    augmentationLength += getSizeForEncoding(streamer, frame.LsdaEncoding);
+
+  streamer.EmitULEB128IntValue(augmentationLength);
 
   // Augmentation Data
-  streamer.EmitLabel(augmentationStart);
 
   // When running in "CodeGen compatibility mode" a FDE with no LSDA can be
   // assigned to a CIE that requires one. In that case we output a 0 (as does
@@ -779,9 +785,8 @@
   if (frame.Lsda)
     EmitSymbol(streamer, *frame.Lsda, frame.LsdaEncoding);
   else if (forceLsda)
-    streamer.EmitIntValue(0, size);
+    streamer.EmitIntValue(0, getSizeForEncoding(streamer, frame.LsdaEncoding));
 
-  streamer.EmitLabel(augmentationEnd);
   // Call Frame Instructions
 
   EmitCFIInstructions(streamer, frame.Instructions, frame.Begin);





More information about the llvm-commits mailing list