[PATCH] D50150: Require users to opt into DebugCounting

George Burgess IV via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 2 12:51:07 PDT 2018


This revision was automatically updated to reflect the committed changes.
Closed by commit rL338762: [Support] Add an enable bit to our DebugCounters (authored by gbiv, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D50150?vs=158566&id=158821#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D50150

Files:
  llvm/trunk/include/llvm/Support/DebugCounter.h
  llvm/trunk/lib/Support/DebugCounter.cpp


Index: llvm/trunk/lib/Support/DebugCounter.cpp
===================================================================
--- llvm/trunk/lib/Support/DebugCounter.cpp
+++ llvm/trunk/lib/Support/DebugCounter.cpp
@@ -82,6 +82,7 @@
              << " is not a registered counter\n";
       return;
     }
+    enableAllCounters();
     Counters[CounterID].Skip = CounterVal;
     Counters[CounterID].IsSet = true;
   } else if (CounterPair.first.endswith("-count")) {
@@ -92,6 +93,7 @@
              << " is not a registered counter\n";
       return;
     }
+    enableAllCounters();
     Counters[CounterID].StopAfter = CounterVal;
     Counters[CounterID].IsSet = true;
   } else {
Index: llvm/trunk/include/llvm/Support/DebugCounter.h
===================================================================
--- llvm/trunk/include/llvm/Support/DebugCounter.h
+++ llvm/trunk/include/llvm/Support/DebugCounter.h
@@ -70,10 +70,9 @@
     return instance().addCounter(Name, Desc);
   }
   inline static bool shouldExecute(unsigned CounterName) {
-// Compile to nothing when debugging is off
-#ifdef NDEBUG
-    return true;
-#else
+    if (!isCountingEnabled())
+      return true;
+
     auto &Us = instance();
     auto Result = Us.Counters.find(CounterName);
     if (Result != Us.Counters.end()) {
@@ -93,7 +92,6 @@
     }
     // Didn't find the counter, should we warn?
     return true;
-#endif // NDEBUG
   }
 
   // Return true if a given counter had values set (either programatically or on
@@ -142,7 +140,23 @@
   }
   CounterVector::const_iterator end() const { return RegisteredCounters.end(); }
 
+  // Force-enables counting all DebugCounters.
+  //
+  // Since DebugCounters are incompatible with threading (not only do they not
+  // make sense, but we'll also see data races), this should only be used in
+  // contexts where we're certain we won't spawn threads.
+  static void enableAllCounters() { instance().Enabled = true; }
+
 private:
+  static bool isCountingEnabled() {
+// Compile to nothing when debugging is off
+#ifdef NDEBUG
+    return false;
+#else
+    return instance().Enabled;
+#endif
+  }
+
   unsigned addCounter(const std::string &Name, const std::string &Desc) {
     unsigned Result = RegisteredCounters.insert(Name);
     Counters[Result] = {};
@@ -159,6 +173,10 @@
   };
   DenseMap<unsigned, CounterInfo> Counters;
   CounterVector RegisteredCounters;
+
+  // Whether we should do DebugCounting at all. DebugCounters aren't
+  // thread-safe, so this should always be false in multithreaded scenarios.
+  bool Enabled = false;
 };
 
 #define DEBUG_COUNTER(VARNAME, COUNTERNAME, DESC)                              \


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D50150.158821.patch
Type: text/x-patch
Size: 2644 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180802/b4e07042/attachment-0001.bin>


More information about the llvm-commits mailing list