Daniel Carvalho has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/70998?usp=email )

Change subject: mem-cache: De-virtualize forEachBlk() in tags
......................................................................

mem-cache: De-virtualize forEachBlk() in tags

Avoid code duplication by using the anyBlk function
with a lambda that always returns false, which forces
all blocks to be visited.

Change-Id: I25527602535c719f46699677a7f70f3e31157f26
Signed-off-by: Daniel R. Carvalho <oda...@yahoo.com.br>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/70998
Reviewed-by: Jason Lowe-Power <power...@gmail.com>
Maintainer: Jason Lowe-Power <power...@gmail.com>
Tested-by: kokoro <noreply+kok...@google.com>
---
M src/mem/cache/tags/base.cc
M src/mem/cache/tags/base.hh
M src/mem/cache/tags/base_set_assoc.hh
M src/mem/cache/tags/compressed_tags.cc
M src/mem/cache/tags/compressed_tags.hh
M src/mem/cache/tags/fa_lru.hh
M src/mem/cache/tags/sector_tags.cc
M src/mem/cache/tags/sector_tags.hh
8 files changed, 10 insertions(+), 49 deletions(-)

Approvals:
  kokoro: Regressions pass
  Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved




diff --git a/src/mem/cache/tags/base.cc b/src/mem/cache/tags/base.cc
index 560b041..8216f3d 100644
--- a/src/mem/cache/tags/base.cc
+++ b/src/mem/cache/tags/base.cc
@@ -215,6 +215,15 @@
     return str;
 }

+void
+BaseTags::forEachBlk(std::function<void(CacheBlk &)> visitor)
+{
+    anyBlk([visitor](CacheBlk &blk) {
+        visitor(blk);
+        return false;
+    });
+}
+
 BaseTags::BaseTagStats::BaseTagStats(BaseTags &_tags)
     : statistics::Group(&_tags),
     tags(_tags),
diff --git a/src/mem/cache/tags/base.hh b/src/mem/cache/tags/base.hh
index e270277..c491881 100644
--- a/src/mem/cache/tags/base.hh
+++ b/src/mem/cache/tags/base.hh
@@ -336,7 +336,7 @@
      *
      * @param visitor Visitor to call on each block.
      */
-    virtual void forEachBlk(std::function<void(CacheBlk &)> visitor) = 0;
+    void forEachBlk(std::function<void(CacheBlk &)> visitor);

     /**
      * Find if any of the blocks satisfies a condition
diff --git a/src/mem/cache/tags/base_set_assoc.hh b/src/mem/cache/tags/base_set_assoc.hh
index 22695d2..8ffb718 100644
--- a/src/mem/cache/tags/base_set_assoc.hh
+++ b/src/mem/cache/tags/base_set_assoc.hh
@@ -233,12 +233,6 @@
         return indexingPolicy->regenerateAddr(blk->getTag(), blk);
     }

-    void forEachBlk(std::function<void(CacheBlk &)> visitor) override {
-        for (CacheBlk& blk : blks) {
-            visitor(blk);
-        }
-    }
-
     bool anyBlk(std::function<bool(CacheBlk &)> visitor) override {
         for (CacheBlk& blk : blks) {
             if (visitor(blk)) {
diff --git a/src/mem/cache/tags/compressed_tags.cc b/src/mem/cache/tags/compressed_tags.cc
index 32d7401..c84718f 100644
--- a/src/mem/cache/tags/compressed_tags.cc
+++ b/src/mem/cache/tags/compressed_tags.cc
@@ -163,14 +163,6 @@
     return victim;
 }

-void
-CompressedTags::forEachBlk(std::function<void(CacheBlk &)> visitor)
-{
-    for (CompressionBlk& blk : blks) {
-        visitor(blk);
-    }
-}
-
 bool
 CompressedTags::anyBlk(std::function<bool(CacheBlk &)> visitor)
 {
diff --git a/src/mem/cache/tags/compressed_tags.hh b/src/mem/cache/tags/compressed_tags.hh
index b54efb0..6e5b62d 100644
--- a/src/mem/cache/tags/compressed_tags.hh
+++ b/src/mem/cache/tags/compressed_tags.hh
@@ -109,16 +109,6 @@
                          std::vector<CacheBlk*>& evict_blks) override;

     /**
-     * Visit each sub-block in the tags and apply a visitor.
-     *
-     * The visitor should be a std::function that takes a cache block.
-     * reference as its parameter.
-     *
-     * @param visitor Visitor to call on each block.
-     */
-    void forEachBlk(std::function<void(CacheBlk &)> visitor) override;
-
-    /**
      * Find if any of the sub-blocks satisfies a condition.
      *
      * The visitor should be a std::function that takes a cache block
diff --git a/src/mem/cache/tags/fa_lru.hh b/src/mem/cache/tags/fa_lru.hh
index deffd72..cd07817 100644
--- a/src/mem/cache/tags/fa_lru.hh
+++ b/src/mem/cache/tags/fa_lru.hh
@@ -253,12 +253,6 @@
         return blk->getTag();
     }

-    void forEachBlk(std::function<void(CacheBlk &)> visitor) override {
-        for (int i = 0; i < numBlocks; i++) {
-            visitor(blks[i]);
-        }
-    }
-
     bool anyBlk(std::function<bool(CacheBlk &)> visitor) override {
         for (int i = 0; i < numBlocks; i++) {
             if (visitor(blks[i])) {
diff --git a/src/mem/cache/tags/sector_tags.cc b/src/mem/cache/tags/sector_tags.cc
index cb121eb..6a9ffd0 100644
--- a/src/mem/cache/tags/sector_tags.cc
+++ b/src/mem/cache/tags/sector_tags.cc
@@ -359,14 +359,6 @@
     }
 }

-void
-SectorTags::forEachBlk(std::function<void(CacheBlk &)> visitor)
-{
-    for (SectorSubBlk& blk : blks) {
-        visitor(blk);
-    }
-}
-
 bool
 SectorTags::anyBlk(std::function<bool(CacheBlk &)> visitor)
 {
diff --git a/src/mem/cache/tags/sector_tags.hh b/src/mem/cache/tags/sector_tags.hh
index bad1321..035b085 100644
--- a/src/mem/cache/tags/sector_tags.hh
+++ b/src/mem/cache/tags/sector_tags.hh
@@ -194,16 +194,6 @@
     Addr regenerateBlkAddr(const CacheBlk* blk) const override;

     /**
-     * Visit each sub-block in the tags and apply a visitor.
-     *
-     * The visitor should be a std::function that takes a cache block.
-     * reference as its parameter.
-     *
-     * @param visitor Visitor to call on each block.
-     */
-    void forEachBlk(std::function<void(CacheBlk &)> visitor) override;
-
-    /**
      * Find if any of the sub-blocks satisfies a condition.
      *
      * The visitor should be a std::function that takes a cache block

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/70998?usp=email To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I25527602535c719f46699677a7f70f3e31157f26
Gerrit-Change-Number: 70998
Gerrit-PatchSet: 2
Gerrit-Owner: Daniel Carvalho <oda...@yahoo.com.br>
Gerrit-Reviewer: Daniel Carvalho <oda...@yahoo.com.br>
Gerrit-Reviewer: Jason Lowe-Power <power...@gmail.com>
Gerrit-Reviewer: Nikos Nikoleris <nikos.nikole...@arm.com>
Gerrit-Reviewer: kokoro <noreply+kok...@google.com>
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org

Reply via email to