diff options
author | Richard Biener <rguenther@suse.de> | 2019-10-28 13:43:49 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-10-28 13:43:49 +0000 |
commit | 96d9d1620f28517de0464ab636662d9a35a92993 (patch) | |
tree | 8997511f65dcbe94251994abbd116166e15e5bc4 /gcc | |
parent | 97c6bea819ec0a773041308e62a7c05c33f093b0 (diff) | |
download | gcc-96d9d1620f28517de0464ab636662d9a35a92993.zip gcc-96d9d1620f28517de0464ab636662d9a35a92993.tar.gz gcc-96d9d1620f28517de0464ab636662d9a35a92993.tar.bz2 |
re PR tree-optimization/92252 (ICE: Segmentation fault (in vect_stmt_to_vectorize))
2019-10-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/92252
* tree-vect-slp.c (vect_get_and_check_slp_defs): Adjust
STMT_VINFO_REDUC_IDX when swapping operands.
* gcc.dg/torture/pr92252.c: New testcase.
From-SVN: r277517
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr92252.c | 23 | ||||
-rw-r--r-- | gcc/tree-vect-slp.c | 4 |
4 files changed, 38 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9809040..c9daad9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2019-10-28 Richard Biener <rguenther@suse.de> + PR tree-optimization/92252 + * tree-vect-slp.c (vect_get_and_check_slp_defs): Adjust + STMT_VINFO_REDUC_IDX when swapping operands. + +2019-10-28 Richard Biener <rguenther@suse.de> + PR tree-optimization/92241 * tree-vect-loop.c (vect_fixup_scalar_cycles_with_patterns): When we failed to update the reduction index do not use the pattern diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 41dea35..5d1ddbe 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2019-10-28 Richard Biener <rguenther@suse.de> + PR tree-optimization/92252 + * gcc.dg/torture/pr92252.c: New testcase. + +2019-10-28 Richard Biener <rguenther@suse.de> + PR tree-optimization/92241 * gcc.dg/torture/pr92241.c: New testcase. diff --git a/gcc/testsuite/gcc.dg/torture/pr92252.c b/gcc/testsuite/gcc.dg/torture/pr92252.c new file mode 100644 index 0000000..eea60a0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr92252.c @@ -0,0 +1,23 @@ +/* { do-do compile } */ +/* { dg-additional-options "-ftree-vectorize" } */ + +long int ar; +int dt; + +long int +pc (unsigned long int q3, int zw) +{ + long int em = 0; + + while (zw < 1) + { + q3 = zw * 2ul; + if (q3 != 0) + for (ar = 0; ar < 2; ++ar) + em = dt; + + ++zw; + } + + return em; +} diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index e32731b..b75594c 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -563,6 +563,10 @@ again: { swap_ssa_operands (stmt, gimple_assign_rhs2_ptr (stmt), gimple_assign_rhs3_ptr (stmt)); + if (STMT_VINFO_REDUC_IDX (stmt_info) == 1) + STMT_VINFO_REDUC_IDX (stmt_info) = 2; + else if (STMT_VINFO_REDUC_IDX (stmt_info) == 2) + STMT_VINFO_REDUC_IDX (stmt_info) = 1; bool honor_nans = HONOR_NANS (TREE_OPERAND (cond, 0)); code = invert_tree_comparison (TREE_CODE (cond), honor_nans); gcc_assert (code != ERROR_MARK); |