Hello, So, I did full regression-test for following patch:
ChangeLog 2015-02-25 Richard Biener <rguent...@suse.de> Kai Tietz <kti...@redhat.com> PR tree-optimization/61917 * tree-vect-loop.c (vectorizable_reduction): Allow vect_internal_def without reduction to exit graceful. ChagneLog testsuite/ 2015-02-25 Kai Tietz <kti...@redhat.com> PR tree-optimization/61917 * gcc.dg/vect/vect-pr61917.c: New file. Tested for x86_64-unkown-linux. Ok for apply? Regards, Kai Index: tree-vect-loop.c =================================================================== --- tree-vect-loop.c (Revision 220958) +++ tree-vect-loop.c (Arbeitskopie) @@ -4981,6 +4981,12 @@ vectorizable_reduction (gimple stmt, gimple_stmt_i if (!vectype_in) vectype_in = tem; gcc_assert (is_simple_use); + if (!found_nested_cycle_def) + reduc_def_stmt = def_stmt; + + if (gimple_code (reduc_def_stmt) != GIMPLE_PHI) + return false; + if (!(dt == vect_reduction_def || dt == vect_nested_cycle || ((dt == vect_internal_def || dt == vect_external_def @@ -4993,10 +4999,7 @@ vectorizable_reduction (gimple stmt, gimple_stmt_i gcc_assert (orig_stmt); return false; } - if (!found_nested_cycle_def) - reduc_def_stmt = def_stmt; - gcc_assert (gimple_code (reduc_def_stmt) == GIMPLE_PHI); if (orig_stmt) gcc_assert (orig_stmt == vect_is_simple_reduction (loop_vinfo, reduc_def_stmt, Index: gcc/gcc/testsuite/gcc.dg/vect/vect-pr61917.c =================================================================== --- /dev/null +++ gcc/gcc/testsuite/gcc.dg/vect/vect-pr61917.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-O3" } */ + +int a, b, c, d; + +int +fn1 () +{ + for (; c; c++) + for (b = 0; b < 2; b++) + d = a - d; + return d; +}