mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-13 12:28:44 +00:00
rtlil: handle all-zeros case in Const::compress
This commit is contained in:
parent
4cd2e04da4
commit
07fb8af05b
|
@ -286,20 +286,22 @@ void RTLIL::Const::compress(bool is_signed)
|
||||||
|
|
||||||
// back to front (MSB to LSB)
|
// back to front (MSB to LSB)
|
||||||
RTLIL::State leading_bit;
|
RTLIL::State leading_bit;
|
||||||
if(is_signed)
|
if (is_signed)
|
||||||
leading_bit = (bits.back() == RTLIL::State::Sx) ? RTLIL::State::S0 : bits.back();
|
leading_bit = (bits.back() == RTLIL::State::Sx) ? RTLIL::State::S0 : bits.back();
|
||||||
else
|
else
|
||||||
leading_bit = RTLIL::State::S0;
|
leading_bit = RTLIL::State::S0;
|
||||||
|
|
||||||
size_t idx = bits.size();
|
size_t idx = bits.size();
|
||||||
while (idx > 0 && bits[idx -1] == leading_bit) {
|
while (idx > 0 && bits[idx -1] == leading_bit) {
|
||||||
--idx;
|
idx--;
|
||||||
}
|
}
|
||||||
|
|
||||||
// signed needs one leading bit
|
// signed needs one leading bit
|
||||||
if (is_signed && idx < bits.size()) {
|
if (is_signed && idx < bits.size()) {
|
||||||
++idx;
|
idx++;
|
||||||
}
|
}
|
||||||
|
// must be at least one bit
|
||||||
|
idx = (idx == 0) ? 1 : idx;
|
||||||
|
|
||||||
bits.erase(bits.begin() + idx, bits.end());
|
bits.erase(bits.begin() + idx, bits.end());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue