Use new peepopt from #969
authorEddie Hung <eddie@fpgeh.com>
Thu, 2 May 2019 18:35:57 +0000 (11:35 -0700)
committerEddie Hung <eddie@fpgeh.com>
Thu, 2 May 2019 18:35:57 +0000 (11:35 -0700)
techlibs/xilinx/synth_xilinx.cc

index 7d7a056164b7b109ebc008225f0308d2fa931f3a..a1c4acf7e2cdbfd6603a1dd2633c2fcc121a7d82 100644 (file)
@@ -211,6 +211,18 @@ struct SynthXilinxPass : public ScriptPass
 
                if (check_label("coarse")) {
                        run("synth -run coarse");
+
+                       // shregmap -tech xilinx can cope with $shiftx and $mux
+                       //   cells for identifying variable-length shift registers,
+                       //   so attempt to convert $pmux-es to the former
+                       // Also: wide multiplexer inference benefits from this too
+                       if ((!nosrl && !nomux) || help_mode)
+                               run("pmux2shiftx", "(skip if '-nosrl' and '-nomux')");
+
+                       // Run a number of peephole optimisations, including one
+                       //   that optimises $mul cells driving $shiftx's B input
+                       //   and that aids wide mux analysis
+                       run("peepopt");
                }
 
                if (check_label("bram", "(skip if '-nobram')")) {
@@ -228,13 +240,6 @@ struct SynthXilinxPass : public ScriptPass
                }
 
                if (check_label("fine")) {
-                       // shregmap -tech xilinx can cope with $shiftx and $mux
-                       //   cells for identifying variable-length shift registers,
-                       //   so attempt to convert $pmux-es to the former
-                       // Also: wide multiplexer inference benefits from this too
-                       if ((!nosrl && !nomux) || help_mode)
-                               run("pmux2shiftx", "(skip if '-nosrl' and '-nomux')");
-
                        run("opt -fast -full");
                        run("memory_map");
                        run("dffsr2dff");
@@ -246,6 +251,9 @@ struct SynthXilinxPass : public ScriptPass
                        else if (!nocarry || help_mode)
                                run("techmap -map +/xilinx/arith_map.v", "(skip if '-nocarry')");
 
+                       if (!nomux || help_mode)
+                               run("techmap -map +/xilinx/cells_map.v");
+
                        if (!nosrl || help_mode) {
                                // shregmap operates on bit-level flops, not word-level,
                                //   so break those down here
@@ -254,9 +262,6 @@ struct SynthXilinxPass : public ScriptPass
                                run("shregmap -tech xilinx -minlen 3", "(skip if '-nosrl')");
                        }
 
-                       if (!nomux || help_mode)
-                               run("techmap -map +/xilinx/cells_map.v");
-
                        run("techmap");
                        run("opt -fast");
                }