]> gcc.gnu.org Git - gcc.git/commitdiff
tree-ssa-loop.c (gate_loop): New function.
authorRichard Biener <rguenther@suse.de>
Mon, 23 Jun 2014 16:51:10 +0000 (16:51 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 23 Jun 2014 16:51:10 +0000 (16:51 +0000)
2014-06-23  Richard Biener  <rguenther@suse.de>

* tree-ssa-loop.c (gate_loop): New function.
(pass_tree_loop::gate): Call it.
(pass_data_tree_no_loop, pass_tree_no_loop,
make_pass_tree_no_loop): New.
* tree-vectorizer.c: Include tree-scalar-evolution.c
(pass_slp_vectorize::execute): Initialize loops and SCEV if
required.
(pass_slp_vectorize::clone): New method.
* timevar.def (TV_TREE_NOLOOP): New.
* tree-pass.h (make_pass_tree_no_loop): Declare.
* passes.def (pass_tree_no_loop): New pass group with
SLP vectorizer.

* g++.dg/vect/slp-pr50413.cc: Scan and cleanup appropriate SLP dumps.
* g++.dg/vect/slp-pr50819.cc: Likewise.
* g++.dg/vect/slp-pr56812.cc: Likewise.
* gcc.dg/vect/bb-slp-1.c: Likewise.
* gcc.dg/vect/bb-slp-10.c: Likewise.
* gcc.dg/vect/bb-slp-11.c: Likewise.
* gcc.dg/vect/bb-slp-13.c: Likewise.
* gcc.dg/vect/bb-slp-14.c: Likewise.
* gcc.dg/vect/bb-slp-15.c: Likewise.
* gcc.dg/vect/bb-slp-16.c: Likewise.
* gcc.dg/vect/bb-slp-17.c: Likewise.
* gcc.dg/vect/bb-slp-18.c: Likewise.
* gcc.dg/vect/bb-slp-19.c: Likewise.
* gcc.dg/vect/bb-slp-2.c: Likewise.
* gcc.dg/vect/bb-slp-20.c: Likewise.
* gcc.dg/vect/bb-slp-21.c: Likewise.
* gcc.dg/vect/bb-slp-22.c: Likewise.
* gcc.dg/vect/bb-slp-23.c: Likewise.
* gcc.dg/vect/bb-slp-24.c: Likewise.
* gcc.dg/vect/bb-slp-25.c: Likewise.
* gcc.dg/vect/bb-slp-26.c: Likewise.
* gcc.dg/vect/bb-slp-27.c: Likewise.
* gcc.dg/vect/bb-slp-28.c: Likewise.
* gcc.dg/vect/bb-slp-29.c: Likewise.
* gcc.dg/vect/bb-slp-3.c: Likewise.
* gcc.dg/vect/bb-slp-30.c: Likewise.
* gcc.dg/vect/bb-slp-31.c: Likewise.
* gcc.dg/vect/bb-slp-32.c: Likewise.
* gcc.dg/vect/bb-slp-4.c: Likewise.
* gcc.dg/vect/bb-slp-5.c: Likewise.
* gcc.dg/vect/bb-slp-6.c: Likewise.
* gcc.dg/vect/bb-slp-7.c: Likewise.
* gcc.dg/vect/bb-slp-8.c: Likewise.
* gcc.dg/vect/bb-slp-8a.c: Likewise.
* gcc.dg/vect/bb-slp-8b.c: Likewise.
* gcc.dg/vect/bb-slp-9.c: Likewise.
* gcc.dg/vect/bb-slp-cond-1.c: Likewise.
* gcc.dg/vect/bb-slp-pattern-1.c: Likewise.
* gcc.dg/vect/bb-slp-pattern-2.c: Likewise.
* gcc.dg/vect/fast-math-bb-slp-call-1.c: Likewise.
* gcc.dg/vect/fast-math-bb-slp-call-2.c: Likewise.
* gcc.dg/vect/fast-math-bb-slp-call-3.c: Likewise.
* gcc.dg/vect/no-tree-reassoc-bb-slp-12.c: Likewise.
* gcc.dg/vect/no-tree-sra-bb-slp-pr50730.c: Likewise.
* gcc.dg/vect/pr26359.c: Likewise.
* gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a.c: Likewise.

From-SVN: r211904

53 files changed:
gcc/ChangeLog
gcc/passes.def
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/vect/slp-pr50413.cc
gcc/testsuite/g++.dg/vect/slp-pr50819.cc
gcc/testsuite/g++.dg/vect/slp-pr56812.cc
gcc/testsuite/gcc.dg/vect/bb-slp-1.c
gcc/testsuite/gcc.dg/vect/bb-slp-10.c
gcc/testsuite/gcc.dg/vect/bb-slp-11.c
gcc/testsuite/gcc.dg/vect/bb-slp-13.c
gcc/testsuite/gcc.dg/vect/bb-slp-14.c
gcc/testsuite/gcc.dg/vect/bb-slp-15.c
gcc/testsuite/gcc.dg/vect/bb-slp-16.c
gcc/testsuite/gcc.dg/vect/bb-slp-17.c
gcc/testsuite/gcc.dg/vect/bb-slp-18.c
gcc/testsuite/gcc.dg/vect/bb-slp-19.c
gcc/testsuite/gcc.dg/vect/bb-slp-2.c
gcc/testsuite/gcc.dg/vect/bb-slp-20.c
gcc/testsuite/gcc.dg/vect/bb-slp-21.c
gcc/testsuite/gcc.dg/vect/bb-slp-22.c
gcc/testsuite/gcc.dg/vect/bb-slp-23.c
gcc/testsuite/gcc.dg/vect/bb-slp-24.c
gcc/testsuite/gcc.dg/vect/bb-slp-25.c
gcc/testsuite/gcc.dg/vect/bb-slp-26.c
gcc/testsuite/gcc.dg/vect/bb-slp-27.c
gcc/testsuite/gcc.dg/vect/bb-slp-28.c
gcc/testsuite/gcc.dg/vect/bb-slp-29.c
gcc/testsuite/gcc.dg/vect/bb-slp-3.c
gcc/testsuite/gcc.dg/vect/bb-slp-30.c
gcc/testsuite/gcc.dg/vect/bb-slp-31.c
gcc/testsuite/gcc.dg/vect/bb-slp-32.c
gcc/testsuite/gcc.dg/vect/bb-slp-4.c
gcc/testsuite/gcc.dg/vect/bb-slp-5.c
gcc/testsuite/gcc.dg/vect/bb-slp-6.c
gcc/testsuite/gcc.dg/vect/bb-slp-7.c
gcc/testsuite/gcc.dg/vect/bb-slp-8.c
gcc/testsuite/gcc.dg/vect/bb-slp-8a.c
gcc/testsuite/gcc.dg/vect/bb-slp-8b.c
gcc/testsuite/gcc.dg/vect/bb-slp-9.c
gcc/testsuite/gcc.dg/vect/bb-slp-cond-1.c
gcc/testsuite/gcc.dg/vect/bb-slp-pattern-1.c
gcc/testsuite/gcc.dg/vect/bb-slp-pattern-2.c
gcc/testsuite/gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a.c
gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-1.c
gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-2.c
gcc/testsuite/gcc.dg/vect/fast-math-bb-slp-call-3.c
gcc/testsuite/gcc.dg/vect/no-tree-reassoc-bb-slp-12.c
gcc/testsuite/gcc.dg/vect/no-tree-sra-bb-slp-pr50730.c
gcc/testsuite/gcc.dg/vect/pr26359.c
gcc/timevar.def
gcc/tree-pass.h
gcc/tree-ssa-loop.c
gcc/tree-vectorizer.c

index 06763f0bcbc0988241350e7b9e52f4964ea1f33f..14d4b3f75da764dacad2456c4bd84e3dfd38e8a2 100644 (file)
@@ -1,3 +1,18 @@
+2014-06-23  Richard Biener  <rguenther@suse.de>
+
+       * tree-ssa-loop.c (gate_loop): New function.
+       (pass_tree_loop::gate): Call it.
+       (pass_data_tree_no_loop, pass_tree_no_loop,
+       make_pass_tree_no_loop): New.
+       * tree-vectorizer.c: Include tree-scalar-evolution.c
+       (pass_slp_vectorize::execute): Initialize loops and SCEV if
+       required.
+       (pass_slp_vectorize::clone): New method.
+       * timevar.def (TV_TREE_NOLOOP): New.
+       * tree-pass.h (make_pass_tree_no_loop): Declare.
+       * passes.def (pass_tree_no_loop): New pass group with
+       SLP vectorizer.
+
 2014-06-23  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/61570
index 26b30c938f1b8a2c723977e776f064a1e16dfbed..c574b4ecff416a65d3a8c55f4f8fa00e3161cd1e 100644 (file)
@@ -198,6 +198,8 @@ along with GCC; see the file COPYING3.  If not see
       NEXT_PASS (pass_sink_code);
       NEXT_PASS (pass_asan);
       NEXT_PASS (pass_tsan);
+      /* Pass group that runs when 1) enabled, 2) there are loops
+        in the function.  */
       NEXT_PASS (pass_tree_loop);
       PUSH_INSERT_PASSES_WITHIN (pass_tree_loop)
          NEXT_PASS (pass_tree_loop_init);
@@ -230,10 +232,18 @@ along with GCC; see the file COPYING3.  If not see
          NEXT_PASS (pass_complete_unroll);
          NEXT_PASS (pass_slp_vectorize);
          NEXT_PASS (pass_loop_prefetch);
+         /* Run IVOPTs after the last pass that uses data-reference analysis
+            as that doesn't handle TARGET_MEM_REFs.  */
          NEXT_PASS (pass_iv_optimize);
          NEXT_PASS (pass_lim);
          NEXT_PASS (pass_tree_loop_done);
       POP_INSERT_PASSES ()
+      /* Pass group that runs when pass_tree_loop is disabled or there
+         are no loops in the function.  */
+      NEXT_PASS (pass_tree_no_loop);
+      PUSH_INSERT_PASSES_WITHIN (pass_tree_no_loop)
+         NEXT_PASS (pass_slp_vectorize);
+      POP_INSERT_PASSES ()
       NEXT_PASS (pass_lower_vector_ssa);
       NEXT_PASS (pass_cse_reciprocals);
       NEXT_PASS (pass_reassoc);
index d623f6ecb92a1d6cf96c71fd2cb107b3a26976bf..ad97d0b17d0239229c19d0b9ab70d288c65321d7 100644 (file)
@@ -1,3 +1,52 @@
+2014-06-23  Richard Biener  <rguenther@suse.de>
+
+       * g++.dg/vect/slp-pr50413.cc: Scan and cleanup appropriate SLP dumps.
+       * g++.dg/vect/slp-pr50819.cc: Likewise.
+       * g++.dg/vect/slp-pr56812.cc: Likewise.
+       * gcc.dg/vect/bb-slp-1.c: Likewise.
+       * gcc.dg/vect/bb-slp-10.c: Likewise.
+       * gcc.dg/vect/bb-slp-11.c: Likewise.
+       * gcc.dg/vect/bb-slp-13.c: Likewise.
+       * gcc.dg/vect/bb-slp-14.c: Likewise.
+       * gcc.dg/vect/bb-slp-15.c: Likewise.
+       * gcc.dg/vect/bb-slp-16.c: Likewise.
+       * gcc.dg/vect/bb-slp-17.c: Likewise.
+       * gcc.dg/vect/bb-slp-18.c: Likewise.
+       * gcc.dg/vect/bb-slp-19.c: Likewise.
+       * gcc.dg/vect/bb-slp-2.c: Likewise.
+       * gcc.dg/vect/bb-slp-20.c: Likewise.
+       * gcc.dg/vect/bb-slp-21.c: Likewise.
+       * gcc.dg/vect/bb-slp-22.c: Likewise.
+       * gcc.dg/vect/bb-slp-23.c: Likewise.
+       * gcc.dg/vect/bb-slp-24.c: Likewise.
+       * gcc.dg/vect/bb-slp-25.c: Likewise.
+       * gcc.dg/vect/bb-slp-26.c: Likewise.
+       * gcc.dg/vect/bb-slp-27.c: Likewise.
+       * gcc.dg/vect/bb-slp-28.c: Likewise.
+       * gcc.dg/vect/bb-slp-29.c: Likewise.
+       * gcc.dg/vect/bb-slp-3.c: Likewise.
+       * gcc.dg/vect/bb-slp-30.c: Likewise.
+       * gcc.dg/vect/bb-slp-31.c: Likewise.
+       * gcc.dg/vect/bb-slp-32.c: Likewise.
+       * gcc.dg/vect/bb-slp-4.c: Likewise.
+       * gcc.dg/vect/bb-slp-5.c: Likewise.
+       * gcc.dg/vect/bb-slp-6.c: Likewise.
+       * gcc.dg/vect/bb-slp-7.c: Likewise.
+       * gcc.dg/vect/bb-slp-8.c: Likewise.
+       * gcc.dg/vect/bb-slp-8a.c: Likewise.
+       * gcc.dg/vect/bb-slp-8b.c: Likewise.
+       * gcc.dg/vect/bb-slp-9.c: Likewise.
+       * gcc.dg/vect/bb-slp-cond-1.c: Likewise.
+       * gcc.dg/vect/bb-slp-pattern-1.c: Likewise.
+       * gcc.dg/vect/bb-slp-pattern-2.c: Likewise.
+       * gcc.dg/vect/fast-math-bb-slp-call-1.c: Likewise.
+       * gcc.dg/vect/fast-math-bb-slp-call-2.c: Likewise.
+       * gcc.dg/vect/fast-math-bb-slp-call-3.c: Likewise.
+       * gcc.dg/vect/no-tree-reassoc-bb-slp-12.c: Likewise.
+       * gcc.dg/vect/no-tree-sra-bb-slp-pr50730.c: Likewise.
+       * gcc.dg/vect/pr26359.c: Likewise.
+       * gcc.dg/vect/costmodel/ppc/costmodel-bb-slp-9a.c: Likewise.
+   
 2014-06-23  Marek Polacek  <polacek@redhat.com>
 
        * c-c++-common/pr49706-2.c: New test.
index 6e69f11b382673d1e0aeb8779246e7a688181ccd..4ba606c8bd76aceb51e709323ad9f60ab20510ab 100644 (file)
@@ -160,6 +160,6 @@ void shift(unsigned char t)
   V.bitmap.b96 = t;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 0 "slp" } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 0 "slp2" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
 
index 515d774a22833da11fa61f14d83c99be86fd4cb6..60fd1561b34b1cf1552620e09a856b0277690703 100644 (file)
@@ -49,5 +49,5 @@ const & v2) {
   res = res + s*(v1+v2);
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 2 "slp" } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 2 "slp2" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
index 9c0b2b8b78b3ad7649cdf97fccc5662183b22988..a0155a921d62a5c38b4da85fa57c5508c3cf295e 100644 (file)
@@ -17,5 +17,5 @@ void mydata::Set (float x)
     data[i] = x;\r
 }\r
 \r
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" } } */\r
-/* { dg-final { cleanup-tree-dump "slp" } } */\r
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp1" } } */\r
+/* { dg-final { cleanup-tree-dump "slp1" } } */\r
index 1caa3cf5c60f5ebaed7bf7c7597de26adaff580a..138a8ddbcc3fc7d888ab1883c0f67ed7c9c91617 100644 (file)
@@ -56,6 +56,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 658bf03ca566e289715195d9e11b43f3b03424f8..a1850ed7328f32b45c82c648e91ae542f76c79f4 100644 (file)
@@ -49,7 +49,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "unsupported alignment in basic block." 1 "slp" { xfail vect_element_align } } } */
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_element_align } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "unsupported alignment in basic block." 1 "slp2" { xfail vect_element_align } } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target vect_element_align } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 3c350a7ab224242a52334466afc51e52e2f71d0d..1ae31416b83421ed0e8e5562beafe8127c206cfc 100644 (file)
@@ -48,6 +48,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect64 } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target vect64 } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 88838cea9bc4d9b34cd82cd5a1c1a2683a701793..9c153a1fff3029644ef8e12d27d05206dc987f5d 100644 (file)
@@ -46,6 +46,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_int_mult } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target vect_int_mult } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index d46deadd0dc5e865b37efcd4886590e0c8647868..a55c48eb09bb51ce5e9913ccfbea082bc67926e2 100644 (file)
@@ -47,6 +47,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 0 "slp"  } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 0 "slp2"  } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index fd065e6ce3560b9d982a7489bd21deef715f2ffa..93d792d63f826dfd674d9335de9f9d7a45757b98 100644 (file)
@@ -51,6 +51,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_int_mult } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target vect_int_mult } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 0cbec65b773d78b8c6a0997f72ed93106030ed3e..5107408aa19ac775e456f432276cba71d6b3492e 100644 (file)
@@ -65,6 +65,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 3f14ff487a598219e2ce3468d9fac82436f81fb0..0a92ee70ddfbfc0c777db38a8f7e9a2948ef3c1a 100644 (file)
@@ -57,6 +57,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_int_mult } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target vect_int_mult } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 7d73dbd8b23f3f096db0f3aad203c63ae740c2ad..21b1dfd25bcfc3354a877c0c7d0ce4b341ad714b 100644 (file)
@@ -46,6 +46,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_int_mult } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target vect_int_mult } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 576bbc16921632dc5629d8fa117cf33280c7b189..021a4ee3e868ca47bd39f1af35d2991122a56bf7 100644 (file)
@@ -53,6 +53,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp"  { xfail *-*-* }  } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2"  { xfail *-*-* }  } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index accc472f79114a987de017d6532e69b286ec357f..8947f5e60f79c847fb2a5046850a4578f9c92dc5 100644 (file)
@@ -53,6 +53,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index a7978a70d7ab7d2996dd753912a88e9feed8caaa..c17186931b638e311ef25605b637ec4346bfd6ec 100644 (file)
@@ -63,7 +63,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_int_mult } } } */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "slp" { target vect_int_mult } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target vect_int_mult } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "slp2" { target vect_int_mult } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 8ad71454afe606190d8836b4a6da19ec7e2bcc3c..5b2247bcc1827ec97b85a0719c492071d660a2f3 100644 (file)
@@ -63,8 +63,8 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp"  } } */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "slp" { target { ! {vect_int_mult } } } } } */
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "slp" { target vect_int_mult } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2"  } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "slp2" { target { ! {vect_int_mult } } } } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 2 "slp2" { target vect_int_mult } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index e425dc9ade13297883f5599beaa73512e8527da6..597f2cec04df5fae7dd76f36dd4a2bc02669cf9d 100644 (file)
@@ -63,7 +63,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp"  { target { ! {vect_int_mult } } } } } */
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 2 "slp"  { target vect_int_mult  } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2"  { target { ! {vect_int_mult } } } } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 2 "slp2"  { target vect_int_mult  } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 35f5186fd742966c800d9dfb490ed872a5f70b44..adb69795e6e9aac9708c133d74a219c5f27396c5 100644 (file)
@@ -51,6 +51,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_int_mult } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target vect_int_mult } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index d0c1d69d1faa12b0920b4653cac64692495a06a5..54148384f785fe67cc4a9634a76af5ba063c0d10 100644 (file)
@@ -54,6 +54,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_element_align } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp1" { target vect_element_align } } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
 
index 737b3b06c04ba3855bcaf72d2db1bdec8483cb86..92137d9ef516fc60104d639abddd6aca1748d303 100644 (file)
@@ -54,6 +54,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_element_align } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp1" { target vect_element_align } } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
 
index 881f3204f4032c3f07091d00063a61541892828f..f33a94abd0b23e3c73c89fd19af0d0779d51fbe2 100644 (file)
@@ -55,6 +55,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect64 } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp1" { target vect64 } } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
 
index 7fcc1e6104183ff3c8c348bee42f569b466aafc8..ae6ff8368b1f511195f8df36647fdf2207af3b74 100644 (file)
@@ -44,6 +44,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target { vect_int_mult && { vect_unpack && vect_pack_trunc } } } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target { vect_int_mult && { vect_unpack && vect_pack_trunc } } } } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
 
index 650c50eb9381bc54ba16e035b6779db79a73df42..2ef0667972dd09954d8484a651ed73025e4225ae 100644 (file)
@@ -66,6 +66,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target { vect_int_mult &&  { vect_pack_trunc && vect_unpack } } } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target { vect_int_mult &&  { vect_pack_trunc && vect_unpack } } } } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
 
index c5b31343a441f3a4e9f694e4a12f3a8e22137a5b..dcc40e5d850c0138b2a7ee3188aaf1889cc7a00c 100644 (file)
@@ -54,6 +54,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp"  { target { vect_int_mult &&  vect_element_align } } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp1"  { target { vect_int_mult &&  vect_element_align } } } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
 
index 093389faf9fea1028ddd6bb4df7ff1db9b6b5734..0fbd3b2b8f0cb13c484d16b43de7bf399df3e03a 100644 (file)
@@ -42,6 +42,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 86da55a47cc8b2534db19f550e6e2e2939fb685f..11c06087fcb68cea9f073e495eb622812ef8a0ff 100644 (file)
@@ -43,5 +43,5 @@ test1(void)
 
 int main() { test1(); return a[21]; }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
index 7ea341216d659a333331f9faaff57c9def0dad0e..017eba6627c7b602ebb23d04d7962b0b61bf8e98 100644 (file)
@@ -9,5 +9,5 @@ void f(){
   a[1]=1+2*a[1]*a[1];
 }
 
-/* { dg-final { scan-tree-dump "basic block vectorized" "slp" } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump "basic block vectorized" "slp2" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
index 6d69d15c96544a2e0b326d0dae0a8180a6421380..2e291591129bef26377cff23e58b17bfd474c94e 100644 (file)
@@ -19,5 +19,5 @@ int foo (int *p)
   return tem0 + tem1 + tem2 + tem3;
 }
 
-/* { dg-final { scan-tree-dump "vectorization is not profitable" "slp" { xfail  vect_no_align } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump "vectorization is not profitable" "slp2" { xfail  vect_no_align } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
index 2c4b62dc4aceb9c9b1d251e52c072d806c7dc08a..99589591a4997849b01b1e0e075d90d0c7ff6bb3 100644 (file)
@@ -38,6 +38,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 0 "slp" } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 0 "slp2" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index ca093e795fcb34c39f5bc59ad74f374c34b6732a..10a410bafcfe7c3c358b3bec4f45ce012fb5b4b5 100644 (file)
@@ -47,6 +47,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index c233a9d5010481462fb8877a2d161231534290e2..6ab81832c02ad21ad79b90cf45e17351d5afcac8 100644 (file)
@@ -45,6 +45,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_int_mult } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target vect_int_mult } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index b7b90f0b95bb023ce026b0ae1caa98036810f3a7..275f1d3142ff34483dde2dd853bdedc6947dc7c9 100644 (file)
@@ -46,6 +46,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 0 "slp" } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 0 "slp2" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 303fe3e4336ff94eb6c67f9e2559a5efa277988b..5012d02cdc20f3051bce1b06843272955b8b0909 100644 (file)
@@ -48,6 +48,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp"  { target vect_hw_misalign } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2"  { target vect_hw_misalign } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 55a6a81d38c2481b447be978ab2c0cd71d8ec3ad..87b6cb3e94c097de07f3b2f5491e2da4d1935ffa 100644 (file)
@@ -47,6 +47,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 0 "slp" } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 0 "slp2" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 8c5c5ab9182304018e80763387232da13c668b8d..13eba70c359f485ddc63df00f8306c8a6cded40b 100644 (file)
@@ -49,6 +49,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp"  { target vect_hw_misalign } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2"  { target vect_hw_misalign } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 9f1a5877a29df4e84312e2ab2821d31087493870..d55f388c8d794d5589660ec9c31222842ecbb4e7 100644 (file)
@@ -46,6 +46,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp"  { xfail  vect_no_align } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2"  { xfail  vect_no_align } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 86376b4464147fd8acd9ac75ddac0b2b570ef928..11415c89cdd9f747b20a91cf7a3cb00c7f09a499 100644 (file)
@@ -41,6 +41,7 @@ int main ()
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_element_align } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp1" { target vect_element_align } } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
 
index ff520c06f5265b5a421481617eae5d0d8bed1953..205c0b047fc1d01e802be1107f3836ca3223bf51 100644 (file)
@@ -48,7 +48,8 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "slp" { target { vect_widen_mult_hi_to_si || vect_unpack } } } } */
-/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 8 "slp" { target vect_widen_mult_hi_to_si_pattern } } } */
-/* { dg-final { scan-tree-dump-times "pattern recognized" 8 "slp" { target vect_widen_mult_hi_to_si_pattern } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 1 "slp2" { target { vect_widen_mult_hi_to_si || vect_unpack } } } } */
+/* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 8 "slp2" { target vect_widen_mult_hi_to_si_pattern } } } */
+/* { dg-final { scan-tree-dump-times "pattern recognized" 8 "slp2" { target vect_widen_mult_hi_to_si_pattern } } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
index 545c08d86e9f2a0dbcf425dd28752fae53b40962..11aeb4afb52cad4398cc6961fc44c020254f5c1c 100644 (file)
@@ -48,5 +48,6 @@ int main ()
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target { vect_element_align && vect_pack_trunc } } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp1" { target { vect_element_align && vect_pack_trunc } } } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
index 4e8d71b9673edb2a1eca932c0cd3b2e2f53ed098..e1bc1a8e33955c5526a972c2fee82b2d8d67d5cf 100644 (file)
@@ -41,6 +41,6 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp"  { xfail  vect_no_align } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized using SLP" 1 "slp2"  { xfail  vect_no_align } } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index c138a78b3281a7dac616fa13d3d4a5919a80d636..5fa50d6e2fdb079bb389df178a32652806b74b60 100644 (file)
@@ -45,5 +45,6 @@ main ()
   return main1 ();
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target { vect_call_copysignf && vect_call_sqrtf } } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target { vect_call_copysignf && vect_call_sqrtf } } } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
index c126c1c0085d682c492efb94034a671167d1c8d7..982b32dce4eada5b4e6398be7bc494c24601b884 100644 (file)
@@ -63,5 +63,6 @@ main ()
   return main1 ();
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 2 "slp" { target vect_call_lrint } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 2 "slp2" { target vect_call_lrint } } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
index 5878d418f50c945934ea2c40edaab7a3554e131b..92caddef418648aa9b0d2149e925e204685aa8db 100644 (file)
@@ -65,4 +65,5 @@ int main()
   return 0;
 }
 
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
index 49274f88f5731935fbe4324b1a1a2e94ea3dc622..c75ae5ecb405fe02989f252759ca78b4b4422ead 100644 (file)
@@ -47,6 +47,7 @@ int main (void)
   return 0;
 }
 
-/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp" { target vect_int_mult } } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp2" { target vect_int_mult } } } */
+/* { dg-final { cleanup-tree-dump "slp1" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
   
index 90dcd8443349bbba7a0373c67d9f7b2391735965..6d70bd05e00611115165ee7ba09018153f2af393 100644 (file)
@@ -13,5 +13,5 @@ A sum(A a,A b)
   return a;
 }
 
-/* { dg-final { scan-tree-dump-times "not vectorized: more than one data ref in stmt" 0 "slp" } } */
-/* { dg-final { cleanup-tree-dump "slp" } } */
+/* { dg-final { scan-tree-dump-times "not vectorized: more than one data ref in stmt" 0 "slp2" } } */
+/* { dg-final { cleanup-tree-dump "slp2" } } */
index f4e2a379cf10c74c44e2656c1335428759b02e55..7a0cb0daca90dbc5a7caf5d521b3f3fed5fe13bd 100644 (file)
@@ -13,5 +13,5 @@ foo () {
 }
 
 /* { dg-final { scan-tree-dump-times "Deleting : vect_" 0 "dce5" } } */
-/* { dg-final { cleanup-tree-dump "dce" } } */
+/* { dg-final { cleanup-tree-dump "dce5" } } */
 /* { dg-final { cleanup-tree-dump "vect" } } */
index cbb64d5b73f2bdff02b1abcd735617ef853d983e..6b1b6dfc04d49946cb8c642d1d03d08355657dc1 100644 (file)
@@ -162,6 +162,7 @@ DEFTIMEVAR (TV_TREE_CALL_CDCE            , "tree buildin call DCE")
 DEFTIMEVAR (TV_TREE_DSE                     , "tree DSE")
 DEFTIMEVAR (TV_TREE_MERGE_PHI       , "PHI merge")
 DEFTIMEVAR (TV_TREE_LOOP            , "tree loop optimization")
+DEFTIMEVAR (TV_TREE_NOLOOP           , "loopless fn")
 DEFTIMEVAR (TV_TREE_LOOP_BOUNDS             , "tree loop bounds")
 DEFTIMEVAR (TV_LIM                   , "tree loop invariant motion")
 DEFTIMEVAR (TV_TREE_LOOP_IVCANON     , "tree canonical iv")
index bdaf673e3a42ad1ccdd205a2e800c5c3e332bd36..ec5f367d24d20c32db4c8496f5e035d04539d66d 100644 (file)
@@ -354,6 +354,7 @@ extern gimple_opt_pass *make_pass_early_ipa_sra (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_tail_recursion (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_tail_calls (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_tree_loop (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tree_no_loop (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_tree_loop_init (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_lim (gcc::context *ctxt);
 extern gimple_opt_pass *make_pass_tree_unswitch (gcc::context *ctxt);
index b49ed8a52b23f23d616c5c519b19d872c99b5304..9da77a9ee4fac09fcd5e50cf8a205f68de3c9331 100644 (file)
@@ -42,6 +42,27 @@ along with GCC; see the file COPYING3.  If not see
 #include "diagnostic-core.h"
 #include "tree-vectorizer.h"
 
+
+/* Gate for loop pass group.  The group is controlled by -ftree-loop-optimize
+   but we also avoid running it when the IL doesn't contain any loop.  */
+
+static bool
+gate_loop (function *fn)
+{
+  if (!flag_tree_loop_optimize)
+    return false;
+
+  /* For -fdump-passes which runs before loop discovery print the
+     state of -ftree-loop-optimize.  */
+  if (!loops_for_fn (fn))
+    return true;
+
+  /* Make sure to drop / re-discover loops when necessary.  */
+  if (loops_state_satisfies_p (LOOPS_NEED_FIXUP))
+    fix_loop_structure (NULL);
+  return number_of_loops (fn) > 1;
+}
+
 /* The loop superpass.  */
 
 namespace {
@@ -68,7 +89,7 @@ public:
   {}
 
   /* opt_pass methods: */
-  virtual bool gate (function *) { return flag_tree_loop_optimize != 0; }
+  virtual bool gate (function *fn) { return gate_loop (fn); }
 
 }; // class pass_tree_loop
 
@@ -80,6 +101,45 @@ make_pass_tree_loop (gcc::context *ctxt)
   return new pass_tree_loop (ctxt);
 }
 
+/* The no-loop superpass.  */
+
+namespace {
+
+const pass_data pass_data_tree_no_loop =
+{
+  GIMPLE_PASS, /* type */
+  "no_loop", /* name */
+  OPTGROUP_NONE, /* optinfo_flags */
+  false, /* has_execute */
+  TV_TREE_NOLOOP, /* tv_id */
+  PROP_cfg, /* properties_required */
+  0, /* properties_provided */
+  0, /* properties_destroyed */
+  0, /* todo_flags_start */
+  0, /* todo_flags_finish */
+};
+
+class pass_tree_no_loop : public gimple_opt_pass
+{
+public:
+  pass_tree_no_loop (gcc::context *ctxt)
+    : gimple_opt_pass (pass_data_tree_no_loop, ctxt)
+  {}
+
+  /* opt_pass methods: */
+  virtual bool gate (function *fn) { return !gate_loop (fn); }
+
+}; // class pass_tree_no_loop
+
+} // anon namespace
+
+gimple_opt_pass *
+make_pass_tree_no_loop (gcc::context *ctxt)
+{
+  return new pass_tree_no_loop (ctxt);
+}
+
+
 /* Loop optimizer initialization.  */
 
 namespace {
index e2939b18ffce5ee40bf8e10ec966ebf0f025e8a2..f10e621827388b3a32ad7736e4d7949a95d30680 100644 (file)
@@ -82,6 +82,8 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-ssa-propagate.h"
 #include "dbgcnt.h"
 #include "gimple-fold.h"
+#include "tree-scalar-evolution.h"
+
 
 /* Loop or bb location.  */
 source_location vect_location;
@@ -610,6 +612,7 @@ public:
   {}
 
   /* opt_pass methods: */
+  opt_pass * clone () { return new pass_slp_vectorize (m_ctxt); }
   virtual bool gate (function *) { return flag_tree_slp_vectorize != 0; }
   virtual unsigned int execute (function *);
 
@@ -620,6 +623,13 @@ pass_slp_vectorize::execute (function *fun)
 {
   basic_block bb;
 
+  bool in_loop_pipeline = scev_initialized_p ();
+  if (!in_loop_pipeline)
+    {
+      loop_optimizer_init (LOOPS_NORMAL);
+      scev_initialize ();
+    }
+
   init_stmt_vec_info_vec ();
 
   FOR_EACH_BB_FN (bb, fun)
@@ -639,6 +649,13 @@ pass_slp_vectorize::execute (function *fun)
     }
 
   free_stmt_vec_info_vec ();
+
+  if (!in_loop_pipeline)
+    {
+      scev_finalize ();
+      loop_optimizer_finalize ();
+    }
+
   return 0;
 }
 
This page took 0.154363 seconds and 5 git commands to generate.