]> granicus.if.org Git - llvm/commitdiff
Use the last 7 bits to represent the discriminator to fit it in 1 byte ULEB128 (NFC).
authorDehao Chen <dehao@google.com>
Tue, 8 Nov 2016 16:32:32 +0000 (16:32 +0000)
committerDehao Chen <dehao@google.com>
Tue, 8 Nov 2016 16:32:32 +0000 (16:32 +0000)
From experiments, discriminator is rarely greater than 127. Here we enforce it to be no greater than 127 so that it will always fit in 1 byte.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286245 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/AddDiscriminators.cpp

index 66781ca76b4889331ffeb7ed3d977547b059d896..2e95926c0b3f5c6ed6905a3b6fa20c047cf5901d 100644 (file)
@@ -188,12 +188,13 @@ static bool addDiscriminators(Function &F) {
         continue;
       // If we could insert more than one block with the same line+file, a
       // discriminator is needed to distinguish both instructions.
-      unsigned Discriminator = R.second ? ++LDM[L] : LDM[L];
+      // Only the lowest 7 bits are used to represent a discriminator to fit
+      // it in 1 byte ULEB128 representation.
+      unsigned Discriminator = (R.second ? ++LDM[L] : LDM[L]) & 0x7f;
       I.setDebugLoc(DIL->cloneWithDiscriminator(Discriminator));
       DEBUG(dbgs() << DIL->getFilename() << ":" << DIL->getLine() << ":"
-                   << DIL->getColumn() << ":"
-                   << Discriminator << " "
-                   << I << "\n");
+                   << DIL->getColumn() << ":" << Discriminator << " " << I
+                   << "\n");
       Changed = true;
     }
   }
@@ -215,7 +216,8 @@ static bool addDiscriminators(Function &F) {
       Location L =
           std::make_pair(CurrentDIL->getFilename(), CurrentDIL->getLine());
       if (!CallLocations.insert(L).second) {
-        Current->setDebugLoc(CurrentDIL->cloneWithDiscriminator(++LDM[L]));
+        Current->setDebugLoc(
+            CurrentDIL->cloneWithDiscriminator((++LDM[L]) & 0x7f));
         Changed = true;
       }
     }