diff --git a/llvm/include/llvm/ADT/Statistic.h b/llvm/include/llvm/ADT/Statistic.h --- a/llvm/include/llvm/ADT/Statistic.h +++ b/llvm/include/llvm/ADT/Statistic.h @@ -46,27 +46,22 @@ class raw_fd_ostream; class StringRef; -class StatisticBase { +class TrackingStatistic { public: - const char *DebugType; - const char *Name; - const char *Desc; + const char *const DebugType; + const char *const Name; + const char *const Desc; - StatisticBase(const char *DebugType, const char *Name, const char *Desc) - : DebugType(DebugType), Name(Name), Desc(Desc) {} - - const char *getDebugType() const { return DebugType; } - const char *getName() const { return Name; } - const char *getDesc() const { return Desc; } -}; - -class TrackingStatistic : public StatisticBase { -public: std::atomic Value; std::atomic Initialized; TrackingStatistic(const char *DebugType, const char *Name, const char *Desc) - : StatisticBase(DebugType, Name, Desc), Value(0), Initialized(false) {} + : DebugType(DebugType), Name(Name), Desc(Desc), Value(0), + Initialized(false) {} + + const char *getDebugType() const { return DebugType; } + const char *getName() const { return Name; } + const char *getDesc() const { return Desc; } unsigned getValue() const { return Value.load(std::memory_order_relaxed); } @@ -132,9 +127,10 @@ void RegisterStatistic(); }; -class NoopStatistic : public StatisticBase { +class NoopStatistic { public: - using StatisticBase::StatisticBase; + NoopStatistic(const char * /*DebugType*/, const char * /*Name*/, + const char * /*Desc*/) {} unsigned getValue() const { return 0; } diff --git a/llvm/lib/Transforms/Scalar/LoopFuse.cpp b/llvm/lib/Transforms/Scalar/LoopFuse.cpp --- a/llvm/lib/Transforms/Scalar/LoopFuse.cpp +++ b/llvm/lib/Transforms/Scalar/LoopFuse.cpp @@ -372,11 +372,13 @@ bool reportInvalidCandidate(llvm::Statistic &Stat) const { using namespace ore; assert(L && Preheader && "Fusion candidate not initialized properly!"); +#if LLVM_ENABLE_STATS ++Stat; ORE.emit(OptimizationRemarkAnalysis(DEBUG_TYPE, Stat.getName(), L->getStartLoc(), Preheader) << "[" << Preheader->getParent()->getName() << "]: " << "Loop is not a candidate for fusion: " << Stat.getDesc()); +#endif return false; } }; @@ -1533,6 +1535,7 @@ assert(FC0.Preheader && FC1.Preheader && "Expecting valid fusion candidates"); using namespace ore; +#if LLVM_ENABLE_STATS ++Stat; ORE.emit(RemarkKind(DEBUG_TYPE, Stat.getName(), FC0.L->getStartLoc(), FC0.Preheader) @@ -1540,6 +1543,7 @@ << "]: " << NV("Cand1", StringRef(FC0.Preheader->getName())) << " and " << NV("Cand2", StringRef(FC1.Preheader->getName())) << ": " << Stat.getDesc()); +#endif } /// Fuse two guarded fusion candidates, creating a new fused loop.