mem-ruby: Standardize Bloom Filter deletion support

Standard Bloom Filters do not support element deletion by default,
however some variants do. Allow calling the unset function with
all filters, and do nothing by default.

Change-Id: Icf4b0f8b997c4c70fa714b2576474810275db78b
Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18730
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
diff --git a/src/mem/ruby/filters/AbstractBloomFilter.hh b/src/mem/ruby/filters/AbstractBloomFilter.hh
index 51c5e92..6da4a9d 100644
--- a/src/mem/ruby/filters/AbstractBloomFilter.hh
+++ b/src/mem/ruby/filters/AbstractBloomFilter.hh
@@ -40,7 +40,15 @@
     virtual void clear() = 0;
     virtual void merge(AbstractBloomFilter * other_filter) = 0;
     virtual void set(Addr addr) = 0;
-    virtual void unset(Addr addr) = 0;
+
+    /**
+     * Perform the filter specific function to clear the corresponding
+     * entries (can be multiple) of an address. By default a bloom
+     * filter does not support element deletion.
+     *
+     * @param addr The address being parsed.
+     */
+    virtual void unset(Addr addr) {};
 
     virtual bool isSet(Addr addr) = 0;
     virtual int getCount(Addr addr) = 0;
diff --git a/src/mem/ruby/filters/BlockBloomFilter.hh b/src/mem/ruby/filters/BlockBloomFilter.hh
index bd24aa6..d015e1e 100644
--- a/src/mem/ruby/filters/BlockBloomFilter.hh
+++ b/src/mem/ruby/filters/BlockBloomFilter.hh
@@ -44,7 +44,7 @@
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
+    void unset(Addr addr) override;
 
     bool isSet(Addr addr);
     int getCount(Addr addr);
diff --git a/src/mem/ruby/filters/BulkBloomFilter.cc b/src/mem/ruby/filters/BulkBloomFilter.cc
index 4a80d53..a7e0278 100644
--- a/src/mem/ruby/filters/BulkBloomFilter.cc
+++ b/src/mem/ruby/filters/BulkBloomFilter.cc
@@ -91,12 +91,6 @@
     m_filter[c1] = 1;
 }
 
-void
-BulkBloomFilter::unset(Addr addr)
-{
-    // not used
-}
-
 bool
 BulkBloomFilter::isSet(Addr addr)
 {
diff --git a/src/mem/ruby/filters/BulkBloomFilter.hh b/src/mem/ruby/filters/BulkBloomFilter.hh
index 2316221..683bbe1 100644
--- a/src/mem/ruby/filters/BulkBloomFilter.hh
+++ b/src/mem/ruby/filters/BulkBloomFilter.hh
@@ -44,7 +44,6 @@
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
 
     bool isSet(Addr addr);
     int getCount(Addr addr);
diff --git a/src/mem/ruby/filters/H3BloomFilter.cc b/src/mem/ruby/filters/H3BloomFilter.cc
index 91aa168..6fa182f 100644
--- a/src/mem/ruby/filters/H3BloomFilter.cc
+++ b/src/mem/ruby/filters/H3BloomFilter.cc
@@ -423,12 +423,6 @@
     }
 }
 
-void
-H3BloomFilter::unset(Addr addr)
-{
-    panic("ERROR: Unset should never be called in a Bloom filter");
-}
-
 bool
 H3BloomFilter::isSet(Addr addr)
 {
diff --git a/src/mem/ruby/filters/H3BloomFilter.hh b/src/mem/ruby/filters/H3BloomFilter.hh
index efbdec3..b9890e7 100644
--- a/src/mem/ruby/filters/H3BloomFilter.hh
+++ b/src/mem/ruby/filters/H3BloomFilter.hh
@@ -44,7 +44,6 @@
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
 
     bool isSet(Addr addr);
     int getCount(Addr addr);
diff --git a/src/mem/ruby/filters/LSB_CountingBloomFilter.hh b/src/mem/ruby/filters/LSB_CountingBloomFilter.hh
index 48e8380..03602a3 100644
--- a/src/mem/ruby/filters/LSB_CountingBloomFilter.hh
+++ b/src/mem/ruby/filters/LSB_CountingBloomFilter.hh
@@ -44,7 +44,7 @@
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
+    void unset(Addr addr) override;
 
     bool isSet(Addr addr);
     int getCount(Addr addr);
diff --git a/src/mem/ruby/filters/MultiBitSelBloomFilter.cc b/src/mem/ruby/filters/MultiBitSelBloomFilter.cc
index f46442e..3dc392f 100644
--- a/src/mem/ruby/filters/MultiBitSelBloomFilter.cc
+++ b/src/mem/ruby/filters/MultiBitSelBloomFilter.cc
@@ -78,12 +78,6 @@
     }
 }
 
-void
-MultiBitSelBloomFilter::unset(Addr addr)
-{
-    panic("ERROR: Unset should never be called in a Bloom filter");
-}
-
 bool
 MultiBitSelBloomFilter::isSet(Addr addr)
 {
diff --git a/src/mem/ruby/filters/MultiBitSelBloomFilter.hh b/src/mem/ruby/filters/MultiBitSelBloomFilter.hh
index 315e272..1f652b2 100644
--- a/src/mem/ruby/filters/MultiBitSelBloomFilter.hh
+++ b/src/mem/ruby/filters/MultiBitSelBloomFilter.hh
@@ -46,7 +46,6 @@
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
 
     bool isSet(Addr addr);
     int getCount(Addr addr);
diff --git a/src/mem/ruby/filters/MultiGrainBloomFilter.cc b/src/mem/ruby/filters/MultiGrainBloomFilter.cc
index 5f541b5..fef8fa8 100644
--- a/src/mem/ruby/filters/MultiGrainBloomFilter.cc
+++ b/src/mem/ruby/filters/MultiGrainBloomFilter.cc
@@ -81,12 +81,6 @@
 
 }
 
-void
-MultiGrainBloomFilter::unset(Addr addr)
-{
-    // not used
-}
-
 bool
 MultiGrainBloomFilter::isSet(Addr addr)
 {
diff --git a/src/mem/ruby/filters/MultiGrainBloomFilter.hh b/src/mem/ruby/filters/MultiGrainBloomFilter.hh
index 8bfd39b..c232927 100644
--- a/src/mem/ruby/filters/MultiGrainBloomFilter.hh
+++ b/src/mem/ruby/filters/MultiGrainBloomFilter.hh
@@ -44,7 +44,6 @@
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
 
     bool isSet(Addr addr);
     int getCount(Addr addr);
diff --git a/src/mem/ruby/filters/NonCountingBloomFilter.hh b/src/mem/ruby/filters/NonCountingBloomFilter.hh
index bdd05db..9d1ad00 100644
--- a/src/mem/ruby/filters/NonCountingBloomFilter.hh
+++ b/src/mem/ruby/filters/NonCountingBloomFilter.hh
@@ -44,7 +44,7 @@
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
+    void unset(Addr addr) override;
 
     bool isSet(Addr addr);
     int getCount(Addr addr);