From db1e0701b0ddd28b66cf51a0d921f576ab9e9a04 Mon Sep 17 00:00:00 2001 From: Akash Levy Date: Mon, 30 Mar 2026 17:31:59 -0700 Subject: [PATCH] Apply suggestions from code review Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- passes/silimate/negopt.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/passes/silimate/negopt.cc b/passes/silimate/negopt.cc index 7d774375c..d4835c23b 100644 --- a/passes/silimate/negopt.cc +++ b/passes/silimate/negopt.cc @@ -24,7 +24,13 @@ PRIVATE_NAMESPACE_BEGIN bool did_something; -// Normalize top-end sign/zero extension for PMG prefiltering +// Normalize top-end sign/zero extension for PMG prefiltering. +// Strips any redundant high bits so that a sign- or zero-extended SigSpec +// and its narrower original compare equal under index lookups. +// - top == prev: sign extension (MSB replicated) +// - top == SigBit(State::S0): zero extension (constant-zero padding) +// Only the prefilter key is stripped; exact legality is re-checked in the +// code block, so false-positive index hits are safe. static SigSpec strip_ext_for_match(SigSpec sig) { int n = GetSize(sig); @@ -34,6 +40,7 @@ static SigSpec strip_ext_for_match(SigSpec sig) while (n > 1) { SigBit top = sig[n-1]; SigBit prev = sig[n-2]; + // Strip sign-extended (repeated MSB) or zero-extended (S0) bits if (top == prev || top == SigBit(State::S0)) { n--; continue;