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 <rguent...@suse.de> Date: Thu, 29 Nov 2018 12:50:45 +0100 Subject: [PATCH] fix-pr88243 2018-11-29 Richard Biener <rguent...@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) {