[PATCH] Fix PR88243

Richard Biener rguenther@suse.de
Thu Nov 29 13:32:00 GMT 2018


The following adjusts the pattern def-seq generation to give all
stmts in the def-seq vect_internal_def type and not retain the
vect_nested_cycle_def or similar def type from the main stmt.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

>From b2ff48c042f116ea2f0dd84da48daae36e3e2000 Mon Sep 17 00:00:00 2001
From: Richard Guenther <rguenther@suse.de>
Date: Thu, 29 Nov 2018 12:50:45 +0100
Subject: [PATCH] fix-pr88243

2018-11-29  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/88243
	* tree-vect-patterns.c (vect_mark_pattern_stmts): Set the def
	type of all pattern-sequence stmts to vect_internal_def.

	* gcc.dg/torture/pr88243.c: New testcase.

diff --git a/gcc/testsuite/gcc.dg/torture/pr88243.c b/gcc/testsuite/gcc.dg/torture/pr88243.c
new file mode 100644
index 00000000000..17ca38fb684
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr88243.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+
+int a, b, c;
+
+void d()
+{
+  int e, f;
+  for (; a; a++)
+    {
+      e = (__UINTPTR_TYPE__)d;
+      b = 0;
+      for (; b < 2; b++)
+	{
+	  f = e = e / 2;
+	  c = c + f;
+	}
+    }
+}
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
index 2b56d85afc5..39b6f822d19 100644
--- a/gcc/tree-vect-patterns.c
+++ b/gcc/tree-vect-patterns.c
@@ -4723,7 +4723,15 @@ vect_mark_pattern_stmts (stmt_vec_info orig_stmt_info, gimple *pattern_stmt,
   if (def_seq)
     for (gimple_stmt_iterator si = gsi_start (def_seq);
 	 !gsi_end_p (si); gsi_next (&si))
-      vect_init_pattern_stmt (gsi_stmt (si), orig_stmt_info, pattern_vectype);
+      {
+	stmt_vec_info pattern_stmt_info
+	  = vect_init_pattern_stmt (gsi_stmt (si),
+				    orig_stmt_info, pattern_vectype);
+	/* Stmts in the def sequence are not vectorizable cycle or
+	   induction defs, instead they should all be vect_internal_def
+	   feeding the main pattern stmt which retains this def type.  */
+	STMT_VINFO_DEF_TYPE (pattern_stmt_info) = vect_internal_def;
+      }
 
   if (orig_pattern_stmt)
     {



More information about the Gcc-patches mailing list