Cleanups in ARST handling in wreduce
authorClifford Wolf <clifford@clifford.at>
Sun, 24 Feb 2019 19:34:23 +0000 (20:34 +0100)
committerClifford Wolf <clifford@clifford.at>
Sun, 24 Feb 2019 19:34:23 +0000 (20:34 +0100)
Signed-off-by: Clifford Wolf <clifford@clifford.at>
passes/opt/wreduce.cc

index c550b402ee993c468610a47aaf42946f67eaab60..09983bc67405a8dcd83990a9e60e2ebb58e85ea9 100644 (file)
@@ -196,16 +196,10 @@ struct WreduceWorker
                        work_queue_bits.insert(bit);
 
                // Narrow ARST_VALUE parameter to new size.
-               //
-               // Note: This works because earlier loop only removes signals from
-               // the upper bits of the DFF.
-               if(cell->parameters.count("\\ARST_VALUE") > 0) {
-                       RTLIL::Const old_arst_value = cell->parameters.at("\\ARST_VALUE");
-                       std::vector<RTLIL::State> new_arst_value(GetSize(sig_q));
-                       for(int i = 0; i < GetSize(sig_q); ++i) {
-                               new_arst_value[i] = old_arst_value[i];
-                       }
-                       cell->parameters["\\ARST_VALUE"] = RTLIL::Const(new_arst_value);
+               if (cell->parameters.count("\\ARST_VALUE")) {
+                       Const arst_value = cell->getParam("\\ARST_VALUE");
+                       arst_value.bits.resize(GetSize(sig_q));
+                       cell->setParam("\\ARST_VALUE", arst_value);
                }
 
                cell->setPort("\\D", sig_d);