aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEddie Hung <eddie@fpgeh.com>2019-06-26 17:33:26 -0700
committerEddie Hung <eddie@fpgeh.com>2019-06-26 17:33:26 -0700
commitdd4667ef2bfc83a45552e43d9252375df4b8fedf (patch)
tree379c3bbc635c473db5b88c8819edf0295751dcc0
parentd7d5ea6e0cc7cc0db7bb510d3d265dafc7aa93ec (diff)
downloadyosys-dd4667ef2bfc83a45552e43d9252375df4b8fedf.tar.gz
yosys-dd4667ef2bfc83a45552e43d9252375df4b8fedf.tar.bz2
yosys-dd4667ef2bfc83a45552e43d9252375df4b8fedf.zip
Emprically (even if I don't fully understand it) this passes picorv32 tb
-rw-r--r--passes/techmap/muxcover.cc23
1 files changed, 11 insertions, 12 deletions
diff --git a/passes/techmap/muxcover.cc b/passes/techmap/muxcover.cc
index b162fae22..5642aeafc 100644
--- a/passes/techmap/muxcover.cc
+++ b/passes/techmap/muxcover.cc
@@ -459,25 +459,24 @@ struct MuxcoverWorker
mux.cost += prepare_decode_mux(U1, U2, V1, bit);
- if (U1 != State::Sx && U2 != State::Sx) {
- mux.cost += prepare_decode_mux(T1, T2, U1, bit);
- mux.cost += prepare_decode_mux(T3, T4, U2, bit);
+ mux.cost += prepare_decode_mux(T1, T2, U1, bit);
+ mux.cost += prepare_decode_mux(T3, T4, U2, bit);
+ if (U1 != U2 && U1 != State::Sx && U2 != State::Sx) {
mux.cost += prepare_decode_mux(T1, T3, V1, bit);
- }
- if (T1 != T2 && T1 != State::Sx && T2 != State::Sx) {
mux.cost += prepare_decode_mux(S1, S2, T1, bit);
mux.cost += prepare_decode_mux(S3, S4, T2, bit);
- mux.cost += prepare_decode_mux(S1, S3, U1, bit);
- }
- if (T3 != T4 && T3 != State::Sx && T4 != State::Sx) {
+ if (T1 != T2 && T1 != State::Sx && T2 != State::Sx)
+ mux.cost += prepare_decode_mux(S1, S3, U1, bit);
+
mux.cost += prepare_decode_mux(S5, S6, T3, bit);
mux.cost += prepare_decode_mux(S7, S8, T4, bit);
- mux.cost += prepare_decode_mux(S5, S7, U2, bit);
+ if (T3 != T4 && T3 != State::Sx && T4 != State::Sx)
+ mux.cost += prepare_decode_mux(S5, S7, U2, bit);
+
+ if (T1 != T3 && T1 != State::Sx && T3 != State::Sx)
+ mux.cost += prepare_decode_mux(S1, S5, V1, bit);
}
- if (T1 != T2 && T1 != State::Sx && T2 != State::Sx &&
- T3 != T4 && T3 != State::Sx && T4 != State::Sx)
- mux.cost += prepare_decode_mux(S1, S5, V1, bit);
mux.selects.push_back(S1);
mux.selects.push_back(T1);