tree-ssa-sccvn.c (class pass_fre): Add may_iterate pass parameter.
authorRichard Biener <rguenther@suse.de>
Mon, 1 Jul 2019 07:54:38 +0000 (07:54 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 1 Jul 2019 07:54:38 +0000 (07:54 +0000)
2019-07-01  Richard Biener  <rguenther@suse.de>

* tree-ssa-sccvn.c (class pass_fre): Add may_iterate
pass parameter.
(pass_fre::execute): Honor it.
* passes.def: Adjust pass_fre invocations to allow iterating,
add non-iterating pass_fre before late threading/dom.

* gcc.dg/tree-ssa/pr77445-2.c: Adjust.

From-SVN: r272843

gcc/ChangeLog
gcc/passes.def
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr77445-2.c
gcc/tree-ssa-sccvn.c

index 77d58451fb20d8b5fa0b38961f29aa518ad333d8..f74d2dc384b6e29dacf9e60710ad22ea6f440217 100644 (file)
@@ -1,3 +1,11 @@
+2019-07-01  Richard Biener  <rguenther@suse.de>
+
+       * tree-ssa-sccvn.c (class pass_fre): Add may_iterate
+       pass parameter.
+       (pass_fre::execute): Honor it.
+       * passes.def: Adjust pass_fre invocations to allow iterating,
+       add non-iterating pass_fre before late threading/dom.
+
 2019-07-01  Richard Biener  <rguenther@suse.de>
 
        * tree-ssa-sccvn.c (copy_reference_ops_from_ref): Adjust
index ad2efabd3853d8d20562f66f4c5bb34694ec80f2..9a5b0cd554a1a4ef175c396eca62341735a2a52f 100644 (file)
@@ -83,7 +83,7 @@ along with GCC; see the file COPYING3.  If not see
          /* pass_build_ealias is a dummy pass that ensures that we
             execute TODO_rebuild_alias at this point.  */
          NEXT_PASS (pass_build_ealias);
-         NEXT_PASS (pass_fre);
+         NEXT_PASS (pass_fre, true /* may_iterate */);
          NEXT_PASS (pass_early_vrp);
          NEXT_PASS (pass_merge_phi);
           NEXT_PASS (pass_dse);
@@ -117,7 +117,7 @@ along with GCC; see the file COPYING3.  If not see
          NEXT_PASS (pass_oacc_kernels);
          PUSH_INSERT_PASSES_WITHIN (pass_oacc_kernels)
              NEXT_PASS (pass_ch);
-             NEXT_PASS (pass_fre);
+             NEXT_PASS (pass_fre, true /* may_iterate */);
              /* We use pass_lim to rewrite in-memory iteration and reduction
                 variable accesses in loops into local variables accesses.  */
              NEXT_PASS (pass_lim);
@@ -199,7 +199,7 @@ along with GCC; see the file COPYING3.  If not see
         execute TODO_rebuild_alias at this point.  */
       NEXT_PASS (pass_build_alias);
       NEXT_PASS (pass_return_slot);
-      NEXT_PASS (pass_fre);
+      NEXT_PASS (pass_fre, true /* may_iterate */);
       NEXT_PASS (pass_merge_phi);
       NEXT_PASS (pass_thread_jumps);
       NEXT_PASS (pass_vrp, true /* warn_array_bounds_p */);
@@ -312,6 +312,7 @@ along with GCC; see the file COPYING3.  If not see
       NEXT_PASS (pass_strength_reduction);
       NEXT_PASS (pass_split_paths);
       NEXT_PASS (pass_tracer);
+      NEXT_PASS (pass_fre, false /* may_iterate */);
       NEXT_PASS (pass_thread_jumps);
       NEXT_PASS (pass_dominator, false /* may_peel_loop_headers_p */);
       NEXT_PASS (pass_strlen);
index 72b1e62bc7889f420a784e6a2c0beaf9f1932d89..d6fa9db242629c4d15725c798de2dcb8b0fa9f81 100644 (file)
@@ -1,3 +1,7 @@
+2019-07-01  Richard Biener  <rguenther@suse.de>
+
+       * gcc.dg/tree-ssa/pr77445-2.c: Adjust.
+
 2019-07-01  Hongtao Liu  <hongtao.liu@intel.com>
 
        * lib/target-supports.exp
index c5d567dabdc5fad3f49cb6b944a676f1be1f14e3..9c22c538da8c052af3f3521c77b63d1a0766c2b7 100644 (file)
@@ -125,7 +125,7 @@ enum STATES FMS( u8 **in , u32 *transitions) {
    jump threading opportunities.  Skip the later tests on aarch64.  */
 /* { dg-final { scan-tree-dump "Jumps threaded: 1\[1-9\]" "thread1" } } */
 /* { dg-final { scan-tree-dump-times "Invalid sum" 3 "thread1" } } */
-/* { dg-final { scan-tree-dump-not "not considered" "thread1" } } */
-/* { dg-final { scan-tree-dump-not "not considered" "thread2" } } */
-/* { dg-final { scan-tree-dump-not "not considered" "thread3" { target { ! aarch64*-*-* } } } } */
-/* { dg-final { scan-tree-dump-not "not considered" "thread4" { target { ! aarch64*-*-* } } } } */ 
+/* { dg-final { scan-tree-dump-not "optimizing for size" "thread1" } } */
+/* { dg-final { scan-tree-dump-not "optimizing for size" "thread2" } } */
+/* { dg-final { scan-tree-dump-not "optimizing for size" "thread3" { target { ! aarch64*-*-* } } } } */
+/* { dg-final { scan-tree-dump-not "optimizing for size" "thread4" { target { ! aarch64*-*-* } } } } */ 
index dcfafef85527edfd85414eced512c67d133e9864..6b39d63eb653d85628b7055ad55045295aa24de5 100644 (file)
@@ -6853,14 +6853,24 @@ class pass_fre : public gimple_opt_pass
 {
 public:
   pass_fre (gcc::context *ctxt)
-    : gimple_opt_pass (pass_data_fre, ctxt)
+    : gimple_opt_pass (pass_data_fre, ctxt), may_iterate (true)
   {}
 
   /* opt_pass methods: */
   opt_pass * clone () { return new pass_fre (m_ctxt); }
-  virtual bool gate (function *) { return flag_tree_fre != 0; }
+  void set_pass_param (unsigned int n, bool param)
+    {
+      gcc_assert (n == 0);
+      may_iterate = param;
+    }
+  virtual bool gate (function *)
+    {
+      return flag_tree_fre != 0 && (may_iterate || optimize > 1);
+    }
   virtual unsigned int execute (function *);
 
+private:
+  bool may_iterate;
 }; // class pass_fre
 
 unsigned int
@@ -6869,15 +6879,16 @@ pass_fre::execute (function *fun)
   unsigned todo = 0;
 
   /* At -O[1g] use the cheap non-iterating mode.  */
+  bool iterate_p = may_iterate && (optimize > 1);
   calculate_dominance_info (CDI_DOMINATORS);
-  if (optimize > 1)
+  if (iterate_p)
     loop_optimizer_init (AVOID_CFG_MODIFICATIONS);
 
   default_vn_walk_kind = VN_WALKREWRITE;
-  todo = do_rpo_vn (fun, NULL, NULL, optimize > 1, true);
+  todo = do_rpo_vn (fun, NULL, NULL, iterate_p, true);
   free_rpo_vn ();
 
-  if (optimize > 1)
+  if (iterate_p)
     loop_optimizer_finalize ();
 
   return todo;