diff options
| author | Chris Lattner <sabre@nondot.org> | 2006-12-19 21:27:47 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2006-12-19 21:27:47 +0000 | 
| commit | 13bfd32f5dc4f471c5f48d09971cd1345e93e098 (patch) | |
| tree | 25bcfd4118b5b3381f0506d4ebfb0c4897b4ac72 | |
| parent | 2acb8e1a437d94ad108db1f4b8c8deb4af3e5f6f (diff) | |
| download | bcm5719-llvm-13bfd32f5dc4f471c5f48d09971cd1345e93e098.tar.gz bcm5719-llvm-13bfd32f5dc4f471c5f48d09971cd1345e93e098.zip  | |
Refactor statistic a big and introduce a horrible-but-necessary macro
(STATISTIC), which allows us to define statistics that don't introduce
static ctors into the .o files.  I'm migrating code over to use this
incrementally.
llvm-svn: 32687
| -rw-r--r-- | llvm/include/llvm/ADT/Statistic.h | 36 | ||||
| -rw-r--r-- | llvm/lib/Support/Statistic.cpp | 8 | 
2 files changed, 26 insertions, 18 deletions
diff --git a/llvm/include/llvm/ADT/Statistic.h b/llvm/include/llvm/ADT/Statistic.h index 74abe6442b6..4bf47640eee 100644 --- a/llvm/include/llvm/ADT/Statistic.h +++ b/llvm/include/llvm/ADT/Statistic.h @@ -28,16 +28,12 @@  namespace llvm { -class Statistic { +class StatisticBase { +public:    const char *Name;    const char *Desc;    unsigned Value : 31;    bool Initialized : 1; -public: -  // Normal constructor, default initialize data item... -  Statistic(const char *name, const char *desc) -    : Name(name), Desc(desc), Value(0), Initialized(0) { -  }    unsigned getValue() const { return Value; }    const char *getName() const { return Name; } @@ -45,23 +41,35 @@ public:    // Allow use of this class as the value itself.    operator unsigned() const { return Value; } -  const Statistic &operator=(unsigned Val) { Value = Val; return init(); } -  const Statistic &operator++() { ++Value; return init(); } +  const StatisticBase &operator=(unsigned Val) { Value = Val; return init(); } +  const StatisticBase &operator++() { ++Value; return init(); }    unsigned operator++(int) { init(); return Value++; } -  const Statistic &operator--() { --Value; return init(); } +  const StatisticBase &operator--() { --Value; return init(); }    unsigned operator--(int) { init(); return Value--; } -  const Statistic &operator+=(const unsigned &V) { Value += V; return init(); } -  const Statistic &operator-=(const unsigned &V) { Value -= V; return init(); } -  const Statistic &operator*=(const unsigned &V) { Value *= V; return init(); } -  const Statistic &operator/=(const unsigned &V) { Value /= V; return init(); } +  const StatisticBase &operator+=(const unsigned &V) {Value += V;return init();} +  const StatisticBase &operator-=(const unsigned &V) {Value -= V;return init();} +  const StatisticBase &operator*=(const unsigned &V) {Value *= V;return init();} +  const StatisticBase &operator/=(const unsigned &V) {Value /= V;return init();}  private: -  Statistic &init() { +  StatisticBase &init() {      if (!Initialized) RegisterStatistic();      return *this;    }    void RegisterStatistic();  }; +   +struct Statistic : public StatisticBase { +  Statistic(const char *name, const char *desc) { +    Name = name; Desc = desc; Value = 0; Initialized = 0; +  } +}; + +   +// STATISTIC - A macro to make definition of statistics really simple.  This +// automatically passes the DEBUG_TYPE of the file into the statistic. +#define STATISTIC(VARNAME, DESC) \ +  static StatisticBase VARNAME = { DEBUG_TYPE, DESC, 0, 0 }  } // End llvm namespace diff --git a/llvm/lib/Support/Statistic.cpp b/llvm/lib/Support/Statistic.cpp index a698a004a8e..8fdd44aace1 100644 --- a/llvm/lib/Support/Statistic.cpp +++ b/llvm/lib/Support/Statistic.cpp @@ -45,11 +45,11 @@ namespace {  /// on demand (when the first statistic is bumped) and destroyed only when   /// llvm_shutdown is called.  We print statistics from the destructor.  class StatisticInfo { -  std::vector<const Statistic*> Stats; +  std::vector<const StatisticBase*> Stats;  public:    ~StatisticInfo(); -  void addStatistic(const Statistic *S) { +  void addStatistic(const StatisticBase *S) {      Stats.push_back(S);    }  }; @@ -60,7 +60,7 @@ static ManagedStatic<StatisticInfo> StatInfo;  /// RegisterStatistic - The first time a statistic is bumped, this method is  /// called. -void Statistic::RegisterStatistic() { +void StatisticBase::RegisterStatistic() {    // If stats are enabled, inform StatInfo that this statistic should be    // printed.    if (Enabled) @@ -70,7 +70,7 @@ void Statistic::RegisterStatistic() {  }  struct NameCompare { -  bool operator()(const Statistic *LHS, const Statistic *RHS) const { +  bool operator()(const StatisticBase *LHS, const StatisticBase *RHS) const {      int Cmp = std::strcmp(LHS->getName(), RHS->getName());      if (Cmp != 0) return Cmp < 0;  | 

