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