Add Const methods is_fully_zero(), is_fully_def(), and is_fully_undef()
authorClifford Wolf <clifford@clifford.at>
Fri, 18 Aug 2017 09:40:08 +0000 (11:40 +0200)
committerClifford Wolf <clifford@clifford.at>
Fri, 18 Aug 2017 09:40:08 +0000 (11:40 +0200)
kernel/rtlil.cc
kernel/rtlil.h

index 93cfef80ec09d232eb7d2fe3317b57979b388529..4427303cc74548066231ffb9b8731b146c88cf51 100644 (file)
@@ -161,6 +161,39 @@ std::string RTLIL::Const::decode_string() const
        return string;
 }
 
+bool RTLIL::Const::is_fully_zero() const
+{
+       cover("kernel.rtlil.const.is_fully_zero");
+
+       for (auto bit : bits)
+               if (bit != RTLIL::State::S0)
+                       return false;
+
+       return true;
+}
+
+bool RTLIL::Const::is_fully_def() const
+{
+       cover("kernel.rtlil.const.is_fully_def");
+
+       for (auto bit : bits)
+               if (bit != RTLIL::State::S0 && bit != RTLIL::State::S1)
+                       return false;
+
+       return true;
+}
+
+bool RTLIL::Const::is_fully_undef() const
+{
+       cover("kernel.rtlil.const.is_fully_undef");
+
+       for (auto bit : bits)
+               if (bit != RTLIL::State::Sx && bit != RTLIL::State::Sz)
+                       return false;
+
+       return true;
+}
+
 void RTLIL::AttrObject::set_bool_attribute(RTLIL::IdString id)
 {
        attributes[id] = RTLIL::Const(1);
index 51a3fad6fb244811562190cd1b8759e208fb3c9c..be558932fb3202ab6b143948bdd3b25cecded5b4 100644 (file)
@@ -479,6 +479,10 @@ struct RTLIL::Const
        inline RTLIL::State &operator[](int index) { return bits.at(index); }
        inline const RTLIL::State &operator[](int index) const { return bits.at(index); }
 
+       bool is_fully_zero() const;
+       bool is_fully_def() const;
+       bool is_fully_undef() const;
+
        inline RTLIL::Const extract(int offset, int len = 1, RTLIL::State padding = RTLIL::State::S0) const {
                RTLIL::Const ret;
                ret.bits.reserve(len);