From: Jakub Jelinek Date: Tue, 19 Feb 2013 17:30:27 +0000 (+0100) Subject: backport: re PR tree-optimization/56350 (ICE in vectorizable_reduction, at tree-vect... X-Git-Tag: releases/gcc-4.7.3~175 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3bd9de5476d0949919b9eb5cc83f3c3b46dee423;p=thirdparty%2Fgcc.git backport: re PR tree-optimization/56350 (ICE in vectorizable_reduction, at tree-vect-loop.c:4731) Backported from mainline 2013-02-19 Jakub Jelinek PR tree-optimization/56350 * tree-vect-loop.c (vectorizable_reduction): If orig_stmt, return false if haven't found reduction or nested cycle operand, rather than asserting we must find it. * gcc.dg/pr56350.c: New test. From-SVN: r196150 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a072bff8a27d..a2555c0108cd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -3,6 +3,11 @@ Backported from mainline 2013-02-19 Jakub Jelinek + PR tree-optimization/56350 + * tree-vect-loop.c (vectorizable_reduction): If orig_stmt, return false + if haven't found reduction or nested cycle operand, rather than + asserting we must find it. + PR tree-optimization/56381 * tree-ssa-pre.c (create_expression_by_pieces): Fix up last argument to fold_build3. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a8a2fe3a76b6..e12c918e867d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2013-02-19 Jakub Jelinek Backported from mainline + 2013-02-19 Jakub Jelinek + + PR tree-optimization/56350 + * gcc.dg/pr56350.c: New test. + 2013-02-08 Jakub Jelinek PR tree-optimization/56250 diff --git a/gcc/testsuite/gcc.dg/pr56350.c b/gcc/testsuite/gcc.dg/pr56350.c new file mode 100644 index 000000000000..899a507ee8bc --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr56350.c @@ -0,0 +1,13 @@ +/* PR tree-optimization/56350 */ +/* { dg-do compile } */ +/* { dg-options "-O -ftree-vectorize" } */ + +int a, b, c; + +void +f (void) +{ + for (; c; c++) + for (b = 0; b < 2; b++) + a /= 8; +} diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 5e7fb6692528..b6f85d8e19c7 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -4522,7 +4522,7 @@ vectorizable_reduction (gimple stmt, gimple_stmt_iterator *gsi, The last use is the reduction variable. In case of nested cycle this assumption is not true: we use reduc_index to record the index of the reduction variable. */ - for (i = 0; i < op_type-1; i++) + for (i = 0; i < op_type - 1; i++) { /* The condition of COND_EXPR is checked in vectorizable_condition(). */ if (i == 0 && code == COND_EXPR) @@ -4554,11 +4554,18 @@ vectorizable_reduction (gimple stmt, gimple_stmt_iterator *gsi, if (!vectype_in) vectype_in = tem; gcc_assert (is_simple_use); - gcc_assert (dt == vect_reduction_def - || dt == vect_nested_cycle - || ((dt == vect_internal_def || dt == vect_external_def - || dt == vect_constant_def || dt == vect_induction_def) - && nested_cycle && found_nested_cycle_def)); + if (!(dt == vect_reduction_def + || dt == vect_nested_cycle + || ((dt == vect_internal_def || dt == vect_external_def + || dt == vect_constant_def || dt == vect_induction_def) + && nested_cycle && found_nested_cycle_def))) + { + /* For pattern recognized stmts, orig_stmt might be a reduction, + but some helper statements for the pattern might not, or + might be COND_EXPRs with reduction uses in the condition. */ + gcc_assert (orig_stmt); + return false; + } if (!found_nested_cycle_def) reduc_def_stmt = def_stmt;