3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-09-12 12:41:28 +00:00

Fast path for Const::operator==

This commit is contained in:
Robert O'Callahan 2025-08-29 03:29:44 +00:00
parent 60099e5005
commit ec52d6c649
2 changed files with 23 additions and 0 deletions

View file

@ -352,6 +352,11 @@ bool RTLIL::Const::operator<(const RTLIL::Const &other) const
bool RTLIL::Const::operator ==(const RTLIL::Const &other) const
{
if (is_str() && other.is_str())
return get_str() == other.get_str();
if (is_bits() && other.is_bits())
return get_bits() == other.get_bits();
if (size() != other.size())
return false;

View file

@ -204,6 +204,24 @@ namespace RTLIL {
EXPECT_EQ(c, Const(0xe, 4));
}
TEST_F(KernelRtlilTest, ConstEqualStr) {
EXPECT_EQ(Const("abc"), Const("abc"));
EXPECT_NE(Const("abc"), Const("def"));
}
TEST_F(KernelRtlilTest, ConstEqualBits) {
std::vector<State> v1 = {S0, S1};
std::vector<State> v2 = {S1, S0};
EXPECT_EQ(Const(v1), Const(v1));
EXPECT_NE(Const(v1), Const(v2));
}
TEST_F(KernelRtlilTest, ConstEqualStrBits) {
std::vector<State> v1 = {S0, S0, S0, S0, S0, S1, S0, S0};
EXPECT_EQ(Const(v1), Const(" "));
EXPECT_NE(Const(v1), Const("a"));
}
class WireRtlVsHdlIndexConversionTest :
public KernelRtlilTest,
public testing::WithParamInterface<std::tuple<bool, int, int>>