From b4aefe4e86a601943c26cf64c9bc6a58dcd15947 Mon Sep 17 00:00:00 2001 From: Emily Brickey Date: Tue, 1 Sep 2020 14:02:58 -0700 Subject: [PATCH] cpu: convert loop_predictor to new style stats Change-Id: Ib0383fc6d5f884fd6c020bcd938eee2f802ad412 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/33935 Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power Tested-by: kokoro --- src/cpu/pred/loop_predictor.cc | 24 ++++++++++-------------- src/cpu/pred/loop_predictor.hh | 13 +++++-------- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/cpu/pred/loop_predictor.cc b/src/cpu/pred/loop_predictor.cc index 4b23fd1f9..5dad79713 100644 --- a/src/cpu/pred/loop_predictor.cc +++ b/src/cpu/pred/loop_predictor.cc @@ -57,7 +57,8 @@ LoopPredictor::LoopPredictor(LoopPredictorParams *p) restrictAllocation(p->restrictAllocation), initialLoopIter(p->initialLoopIter), initialLoopAge(p->initialLoopAge), - optionalAgeReset(p->optionalAgeReset) + optionalAgeReset(p->optionalAgeReset), + stats(this) { assert(initialLoopAge <= ((1 << loopTableAgeBits) - 1)); } @@ -314,9 +315,9 @@ void LoopPredictor::updateStats(bool taken, BranchInfo* bi) { if (taken == bi->loopPred) { - loopPredictorCorrect++; + stats.correct++; } else { - loopPredictorWrong++; + stats.wrong++; } } @@ -344,18 +345,13 @@ LoopPredictor::condBranchUpdate(ThreadID tid, Addr branch_pc, bool taken, loopUpdate(branch_pc, taken, bi, tage_pred); } -void -LoopPredictor::regStats() +LoopPredictor::LoopPredictorStats::LoopPredictorStats(Stats::Group *parent) + : Stats::Group(parent), + ADD_STAT(correct, "Number of times the loop predictor is" + " the provider and the prediction is correct"), + ADD_STAT(wrong, "Number of times the loop predictor is the" + " provider and the prediction is wrong") { - loopPredictorCorrect - .name(name() + ".loopPredictorCorrect") - .desc("Number of times the loop predictor is the provider and " - "the prediction is correct"); - - loopPredictorWrong - .name(name() + ".loopPredictorWrong") - .desc("Number of times the loop predictor is the provider and " - "the prediction is wrong"); } size_t diff --git a/src/cpu/pred/loop_predictor.hh b/src/cpu/pred/loop_predictor.hh index e6af53d2a..b26bc7139 100644 --- a/src/cpu/pred/loop_predictor.hh +++ b/src/cpu/pred/loop_predictor.hh @@ -83,9 +83,11 @@ class LoopPredictor : public SimObject const unsigned initialLoopAge; const bool optionalAgeReset; - // stats - Stats::Scalar loopPredictorCorrect; - Stats::Scalar loopPredictorWrong; + struct LoopPredictorStats : public Stats::Group { + LoopPredictorStats(Stats::Group *parent); + Stats::Scalar correct; + Stats::Scalar wrong; + } stats; /** * Updates an unsigned counter based on up/down parameter @@ -250,11 +252,6 @@ class LoopPredictor : public SimObject */ void init() override; - /** - * Register stats for this object - */ - void regStats() override; - LoopPredictor(LoopPredictorParams *p); size_t getSizeInBits() const; -- 2.30.2