memory_bram: Fix ignorance of valid, matched rules
authorDavid Shah <dave@ds0.me>
Fri, 10 Apr 2020 20:48:04 +0000 (21:48 +0100)
committerDavid Shah <dave@ds0.me>
Fri, 10 Apr 2020 20:48:04 +0000 (21:48 +0100)
Signed-off-by: David Shah <dave@ds0.me>
passes/memory/memory_bram.cc

index a25b4536ac852d422f0a22fe4dc5a6637b679e2e..0898ec2887bc8723f6b6c4645be206ed90b73c2a 100644 (file)
@@ -1102,9 +1102,6 @@ void handle_cell(Cell *cell, const rules_t &rules)
                        auto &bram = rules.brams.at(match.name).at(vi);
                        bool or_next_if_better = match.or_next_if_better || vi+1 < GetSize(rules.brams.at(match.name));
 
-                       if (failed_brams.count(pair<IdString, int>(bram.name, bram.variant)))
-                               continue;
-
                        int avail_rd_ports = 0;
                        int avail_wr_ports = 0;
                        for (int j = 0; j < bram.groups; j++) {
@@ -1140,6 +1137,9 @@ void handle_cell(Cell *cell, const rules_t &rules)
                        int efficiency = (100 * match_properties["bits"]) / (dups * cells * bram.dbits * (1 << bram.abits));
                        match_properties["efficiency"] = efficiency;
 
+                       if (failed_brams.count(pair<IdString, int>(bram.name, bram.variant)))
+                               goto next_match_rule;
+
                        log("    Metrics for %s: awaste=%d dwaste=%d bwaste=%d waste=%d efficiency=%d\n",
                                        log_id(match.name), awaste, dwaste, bwaste, waste, efficiency);