Changes in directory llvm/include/llvm/ADT:
Statistic.h updated: 1.19 -> 1.20 --- Log message: Change the implementation of statistic to not need destructors at all. Instead, the stat info is printed when llvm_shutdown() is called. These also don't need static ctors, but getting rid of them is uglier: still investigating. This reduces the number of static dtors in llvm from ~1400 to ~750. --- Diffs of the changes: (+24 -17) Statistic.h | 41 ++++++++++++++++++++++++----------------- 1 files changed, 24 insertions(+), 17 deletions(-) Index: llvm/include/llvm/ADT/Statistic.h diff -u llvm/include/llvm/ADT/Statistic.h:1.19 llvm/include/llvm/ADT/Statistic.h:1.20 --- llvm/include/llvm/ADT/Statistic.h:1.19 Wed Dec 6 12:20:44 2006 +++ llvm/include/llvm/ADT/Statistic.h Fri Dec 8 14:00:42 2006 @@ -31,29 +31,36 @@ class Statistic { const char *Name; const char *Desc; - unsigned Value; - static unsigned NumStats; + 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) { - ++NumStats; // Keep track of how many stats are created... + : Name(name), Desc(desc), Value(0), Initialized(0) { } - // Print information when destroyed, iff command line option is specified - ~Statistic(); - - // Allow use of this class as the value itself... + unsigned getValue() const { return Value; } + const char *getName() const { return Name; } + const char *getDesc() const { return Desc; } + + // Allow use of this class as the value itself. operator unsigned() const { return Value; } - const Statistic &operator=(unsigned Val) { Value = Val; return *this; } - const Statistic &operator++() { ++Value; return *this; } - unsigned operator++(int) { return Value++; } - const Statistic &operator--() { --Value; return *this; } - unsigned operator--(int) { return Value--; } - const Statistic &operator+=(const unsigned &V) { Value += V; return *this; } - const Statistic &operator-=(const unsigned &V) { Value -= V; return *this; } - const Statistic &operator*=(const unsigned &V) { Value *= V; return *this; } - const Statistic &operator/=(const unsigned &V) { Value /= V; return *this; } + const Statistic &operator=(unsigned Val) { Value = Val; return init(); } + const Statistic &operator++() { ++Value; return init(); } + unsigned operator++(int) { init(); return Value++; } + const Statistic &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(); } + +private: + Statistic &init() { + if (!Initialized) RegisterStatistic(); + return *this; + } + void RegisterStatistic(); }; } // End llvm namespace _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits