Use edges when explicit
authorMiodrag Milanovic <mmicko@gmail.com>
Mon, 31 Jan 2022 08:38:25 +0000 (09:38 +0100)
committerMiodrag Milanovic <mmicko@gmail.com>
Mon, 31 Jan 2022 08:38:25 +0000 (09:38 +0100)
passes/sat/sim.cc

index e67f8246bd7b828c7960eb558b4e54d2971c9325..ff815b69a7ef1f0b3b36dbaf44688c9e7b3bbc00 100644 (file)
@@ -74,6 +74,7 @@ struct SimShared
        double start_time = 0;
        double stop_time = -1;
        SimulationMode sim_mode = SimulationMode::cmp;
+       bool cycles_set = false;
 };
 
 void zinit(State &v)
@@ -1016,7 +1017,9 @@ struct SimWorker : SimShared
                        log_error("Stop time is before start time\n");
                }
                auto edges = fst->getAllEdges(fst_clock, startCount, stopCount);
-               
+               if (cycles_set && ((size_t)(numcycles *2) < edges.size()))
+                       edges.erase(edges.begin() + (numcycles*2), edges.end());
+
                if ((startCount == stopCount) && writeback) {
                        log("Update initial state with values from %zu\n",startCount);
                        if (edges.empty())
@@ -1143,6 +1146,7 @@ struct SimPass : public Pass {
                        }
                        if (args[argidx] == "-n" && argidx+1 < args.size()) {
                                numcycles = atoi(args[++argidx].c_str());
+                               worker.cycles_set = true;
                                continue;
                        }
                        if (args[argidx] == "-rstlen" && argidx+1 < args.size()) {