diff --git a/passes/silimate/opt_compact_prefix.cc b/passes/silimate/opt_compact_prefix.cc index 8ae16d639..e9b82f18b 100644 --- a/passes/silimate/opt_compact_prefix.cc +++ b/passes/silimate/opt_compact_prefix.cc @@ -79,8 +79,9 @@ struct OptCompactPrefixWorker sig = sigmap(sig); if (!sig.is_fully_const()) return false; + uint64_t uvalue = (uint64_t)value; for (int i = 0; i < GetSize(sig); i++) { - bool want = ((uint64_t)value >> i) & 1; + bool want = (i < 64) ? ((uvalue >> i) & 1) : (value < 0); if (sig[i] != (want ? State::S1 : State::S0)) return false; }