From 56502440b3e7f448de014617e64f7c37e47a59cd Mon Sep 17 00:00:00 2001 From: AdvaySingh1 Date: Fri, 13 Feb 2026 15:32:54 -0800 Subject: [PATCH] Added hashing for already seen paths. ODO: add profiling to see if this is effective --- kernel/satgen.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/kernel/satgen.h b/kernel/satgen.h index 7815847b3..bf8ef4fe1 100644 --- a/kernel/satgen.h +++ b/kernel/satgen.h @@ -101,11 +101,16 @@ struct SatGen else vec.push_back(bit == (undef_mode ? RTLIL::State::Sx : RTLIL::State::S1) ? ez->CONST_TRUE : ez->CONST_FALSE); } else { - std::string wire_name = RTLIL::unescape_id(bit.wire->name); - std::string name = pf + - (bit.wire->width == 1 ? wire_name : stringf("%s [%d]", wire_name, bit.offset)); - vec.push_back(ez->frozen_literal(name)); - imported_signals[pf][bit] = vec.back(); + // Check cache first to avoid creating duplicate literals + if (imported_signals[pf].count(bit)) { + vec.push_back(imported_signals[pf].at(bit)); + } else { + std::string wire_name = RTLIL::unescape_id(bit.wire->name); + std::string name = pf + + (bit.wire->width == 1 ? wire_name : stringf("%s [%d]", wire_name, bit.offset)); + vec.push_back(ez->frozen_literal(name)); + imported_signals[pf][bit] = vec.back(); + } } return vec; }