[llvm] r338762 - [Support] Add an enable bit to our DebugCounters

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 3 03:24:08 PDT 2018


Merged in r338846. Thanks!

On Fri, Aug 3, 2018 at 3:18 AM, George Burgess IV
<george.burgess.iv at gmail.com> wrote:
> Hi!
>
> I'd like to get this merged into the 7.0 branch. It fixes data races, which
> were introduced by r337748, in asserting builds of LLVM.
>
> I've included Chandler as owner of Support/.
>
> Alternatively, we can revert r337748 on 7.0, since it's not all that useful
> on its own. :) I'm equally happy with either approach.
>
> Thank you!
> George
>
>
> On Thu, Aug 2, 2018 at 12:50 PM George Burgess IV via llvm-commits
> <llvm-commits at lists.llvm.org> wrote:
>>
>> Author: gbiv
>> Date: Thu Aug  2 12:50:27 2018
>> New Revision: 338762
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=338762&view=rev
>> Log:
>> [Support] Add an enable bit to our DebugCounters
>>
>> r337748 made us start incrementing DebugCounters all of the time. This
>> makes tsan unhappy in multithreaded environments.
>>
>> Since it doesn't make much sense to use DebugCounters with multiple
>> threads, this patch makes us only count anything if the user passed a
>> -debug-counter option or if some other piece of code explicitly asks
>> for it (e.g. the pass in D50031).
>>
>> The amount of global state here makes writing a unittest for this
>> behavior somewhat awkward. So, no test is provided.
>>
>> Differential Revision: https://reviews.llvm.org/D50150
>>
>> Modified:
>>     llvm/trunk/include/llvm/Support/DebugCounter.h
>>     llvm/trunk/lib/Support/DebugCounter.cpp
>>
>> Modified: llvm/trunk/include/llvm/Support/DebugCounter.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/DebugCounter.h?rev=338762&r1=338761&r2=338762&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/include/llvm/Support/DebugCounter.h (original)
>> +++ llvm/trunk/include/llvm/Support/DebugCounter.h Thu Aug  2 12:50:27
>> 2018
>> @@ -70,10 +70,9 @@ public:
>>      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 @@ public:
>>      }
>>      // 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 @@ public:
>>    }
>>    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 @@ private:
>>    };
>>    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)
>> \
>>
>> Modified: llvm/trunk/lib/Support/DebugCounter.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/DebugCounter.cpp?rev=338762&r1=338761&r2=338762&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/Support/DebugCounter.cpp (original)
>> +++ llvm/trunk/lib/Support/DebugCounter.cpp Thu Aug  2 12:50:27 2018
>> @@ -82,6 +82,7 @@ void DebugCounter::push_back(const std::
>>               << " 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 @@ void DebugCounter::push_back(const std::
>>               << " is not a registered counter\n";
>>        return;
>>      }
>> +    enableAllCounters();
>>      Counters[CounterID].StopAfter = CounterVal;
>>      Counters[CounterID].IsSet = true;
>>    } else {
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list