re PR tree-optimization/71439 (wrong code at -O3 in 32-bit and 64-bit mode on x86_64...
authorAlan Hayward <alan.hayward@arm.com>
Wed, 15 Jun 2016 10:53:01 +0000 (10:53 +0000)
committerAlan Hayward <alahay01@gcc.gnu.org>
Wed, 15 Jun 2016 10:53:01 +0000 (10:53 +0000)
2016-06-15  Alan Hayward  <alan.hayward@arm.com>

gcc/
PR tree-optimization/71439
* tree-vect-loop.c (vect_analyze_loop_operations): Additional check for
live PHIs.

testsuite/
PR tree-optimization/71439
* gcc.dg/vect/pr71439.c: New

From-SVN: r237476

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/pr71439.c [new file with mode: 0644]
gcc/tree-vect-loop.c

index 6eb52a939754046acade7f7564d9f332a4473f7f..568d385a10f18a22d463fb28d9a1debec53acf19 100644 (file)
@@ -1,3 +1,9 @@
+2016-06-15  Alan Hayward  <alan.hayward@arm.com>
+
+       PR tree-optimization/71439
+       * tree-vect-loop.c (vect_analyze_loop_operations): Additional check for
+       live PHIs.
+
 2016-06-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * ifcvt.c (bb_ok_for_noce_multiple_sets): Allow simple lowpart
index e5100ab6892df1c43cf00ce26de7e036823a57f1..9e332a264e461682891d5cb62301a04f3ec3cb70 100644 (file)
@@ -1,3 +1,8 @@
+2016-06-15  Alan Hayward  <alan.hayward@arm.com>
+
+       PR tree-optimization/71439
+       * gcc.dg/vect/pr71439.c: New
+
 2016-06-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * gcc.target/aarch64/ifcvt_multiple_sets_subreg_1.c: New test.
diff --git a/gcc/testsuite/gcc.dg/vect/pr71439.c b/gcc/testsuite/gcc.dg/vect/pr71439.c
new file mode 100644 (file)
index 0000000..95e4763
--- /dev/null
@@ -0,0 +1,17 @@
+#include "tree-vect.h"
+
+int a, b, c;
+short fn1(int p1, int p2) { return p1 + p2; }
+
+int main() {
+  a = 0;
+  for (; a < 30; a = fn1(a, 4)) {
+    c = b;
+    b = 6;
+  }
+
+  if (c != 6)
+    abort ();
+
+  return 0;
+}
index 91d0608e59cd93577061f9ed87662f5ad63c7d9f..4c8678505df6ec572b69fd7d12ac55cf4619ece6 100644 (file)
@@ -1669,7 +1669,8 @@ vect_analyze_loop_operations (loop_vec_info loop_vinfo)
 
           gcc_assert (stmt_info);
 
-          if (STMT_VINFO_RELEVANT (stmt_info) == vect_used_in_scope
+          if ((STMT_VINFO_RELEVANT (stmt_info) == vect_used_in_scope
+               || STMT_VINFO_LIVE_P (stmt_info))
               && STMT_VINFO_DEF_TYPE (stmt_info) != vect_induction_def)
             {
               /* A scalar-dependence cycle that we don't support.  */
@@ -1686,6 +1687,9 @@ vect_analyze_loop_operations (loop_vec_info loop_vinfo)
                 ok = vectorizable_induction (phi, NULL, NULL);
             }
 
+         if (ok && STMT_VINFO_LIVE_P (stmt_info))
+           ok = vectorizable_live_operation (phi, NULL, NULL, -1, NULL);
+
           if (!ok)
             {
               if (dump_enabled_p ())