opt_muxtree: Update port_off and port_idx even for constant bits

Signed-off-by: gatecat <gatecat@ds0.me>
This commit is contained in:
gatecat 2021-06-11 11:11:12 +01:00
parent 1667ad658b
commit 6a6d049f1c
1 changed files with 18 additions and 19 deletions

View File

@ -372,28 +372,27 @@ struct OptMuxtreeWorker
int port_idx = 0, port_off = 0; int port_idx = 0, port_off = 0;
vector<int> bits = sig2bits(sig, false); vector<int> bits = sig2bits(sig, false);
for (int i = 0; i < GetSize(bits); i++) { for (int i = 0; i < GetSize(bits); i++) {
if (bits[i] < 0) if (bits[i] >= 0) {
continue; if (knowledge.known_inactive.at(bits[i])) {
if (knowledge.known_inactive.at(bits[i])) {
sig[i] = State::S0;
did_something = true;
} else
if (knowledge.known_active.at(bits[i])) {
sig[i] = State::S1;
did_something = true;
}
if (width) {
if (ctrl_bits.count(bits[i])) {
sig[i] = ctrl_bits.at(bits[i]) == port_idx ? State::S1 : State::S0;
did_something = true;
}
if (++port_off == width)
port_idx++, port_off=0;
} else {
if (ctrl_bits.count(bits[i])) {
sig[i] = State::S0; sig[i] = State::S0;
did_something = true; did_something = true;
} else
if (knowledge.known_active.at(bits[i])) {
sig[i] = State::S1;
did_something = true;
} }
if (ctrl_bits.count(bits[i])) {
if (width) {
sig[i] = ctrl_bits.at(bits[i]) == port_idx ? State::S1 : State::S0;
} else {
sig[i] = State::S0;
}
did_something = true;
}
}
if (width) {
if (++port_off == width)
port_idx++, port_off=0;
} }
} }