re PR tree-optimization/71818 (ICE in as_a, at is-a.h:192 w/ -O2 -ftree-vectorize)

2016-08-01  Alan Hayward  <alan.hayward@arm.com>

gcc/
	PR tree-optimization/71818
	* tree-vect-loop-manip.c (vect_can_advance_ivs_p): Don't advance IVs
	with non invariant evolutions

testsuite/
	PR tree-optimization/71818
	* gcc.dg/vect/pr71818.c: New

From-SVN: r238955
This commit is contained in:
Alan Hayward 2016-08-01 14:33:23 +00:00 committed by Alan Hayward
parent 9839ff60d0
commit 2a93954eab
4 changed files with 45 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2015-08-01 Alan Hayward <alan.hayward@arm.com>
PR tree-optimization/71818
* tree-vect-loop-manip.c (vect_can_advance_ivs_p): Don't advance IVs
with non invariant evolutions
2016-08-01 Georg-Johann Lay <avr@gjlay.de>
PR target/72767

View File

@ -1,3 +1,8 @@
2015-08-01 Alan Hayward <alan.hayward@arm.com>
PR tree-optimization/71818
* gcc.dg/vect/pr71818.c: New
2016-08-01 Martin Liska <mliska@suse.cz>
PR tree-optimization/71857

View File

@ -0,0 +1,16 @@
/* { dg-do compile } */
char a;
short b;
int c, d;
void fn1() {
char e = 75, g;
unsigned char *f = &e;
a = 21;
for (; a <= 48; a++) {
for (; e <= 6;)
;
g -= e -= b || g <= c;
}
d = *f;
}

View File

@ -40,6 +40,7 @@ along with GCC; see the file COPYING3. If not see
#include "cfgloop.h"
#include "tree-scalar-evolution.h"
#include "tree-vectorizer.h"
#include "tree-ssa-loop-ivopts.h"
/*************************************************************************
Simple Loop Peeling Utilities
@ -1591,11 +1592,27 @@ vect_can_advance_ivs_p (loop_vec_info loop_vinfo)
return false;
}
/* FORNOW: We do not transform initial conditions of IVs
which evolution functions are not invariants in the loop. */
if (!expr_invariant_in_loop_p (loop, evolution_part))
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"evolution not invariant in loop.\n");
return false;
}
/* FORNOW: We do not transform initial conditions of IVs
which evolution functions are a polynomial of degree >= 2. */
if (tree_is_chrec (evolution_part))
return false;
{
if (dump_enabled_p ())
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"evolution is chrec.\n");
return false;
}
}
return true;