Commit 13ea799b by Richard Biener Committed by Richard Biener

re PR tree-optimization/55684 (ICE in remove_redundant_iv_tests, at tree-ssa-loop-ivcanon.c:559)

2012-12-14  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/55684
	* tree-ssa-loop-ivcanon.c (remove_redundant_iv_tests): Handle
	gracefully the case where we cannot compute the number of
	iterations at an exit.

	* gcc.dg/torture/pr55684.c: New testcase.

From-SVN: r194499
parent 105e8c06
2012-12-14 Richard Biener <rguenther@suse.de> 2012-12-14 Richard Biener <rguenther@suse.de>
PR tree-optimization/55684
* tree-ssa-loop-ivcanon.c (remove_redundant_iv_tests): Handle
gracefully the case where we cannot compute the number of
iterations at an exit.
2012-12-14 Richard Biener <rguenther@suse.de>
PR tree-optimization/55687 PR tree-optimization/55687
* tree-chrec.h (no_evolution_in_loop_p): Properly use * tree-chrec.h (no_evolution_in_loop_p): Properly use
tree_contains_chrecs. tree_contains_chrecs.
2012-12-14 Richard Biener <rguenther@suse.de> 2012-12-14 Richard Biener <rguenther@suse.de>
PR tree-optimization/55684
* gcc.dg/torture/pr55684.c: New testcase.
2012-12-14 Richard Biener <rguenther@suse.de>
PR tree-optimization/55687 PR tree-optimization/55687
* gcc.dg/torture/pr55687.c: New testcase. * gcc.dg/torture/pr55687.c: New testcase.
......
/* { dg-do compile } */
typedef struct _IO_FILE FILE;
unsigned long int strtoul(const char *, char **, int);
char *fgets(char *, int, FILE *);
struct ihexrec {
unsigned char reclen;
unsigned char data[256];
};
static void srec_readrec(struct ihexrec * srec, char * rec)
{
int i, j;
char buf[8];
int offset = 0, len;
char * e;
for (i=0; j<srec->reclen; j++)
{
if (offset+2 > len)
return;
for (i=0; i<2; i++)
buf[i] = rec[offset++];
srec->data[j] = strtoul(buf, &e, 16);
}
for (i=0; i<2; i++)
buf[i] = rec[offset++];
}
void srec2b(FILE *inf)
{
char buffer[256];
struct ihexrec srec;
while (fgets(buffer,256,inf)!=(void *)0)
srec_readrec(&srec, buffer);
}
...@@ -555,9 +555,8 @@ remove_redundant_iv_tests (struct loop *loop) ...@@ -555,9 +555,8 @@ remove_redundant_iv_tests (struct loop *loop)
/* Only when we know the actual number of iterations, not /* Only when we know the actual number of iterations, not
just a bound, we can remove the exit. */ just a bound, we can remove the exit. */
if (!number_of_iterations_exit (loop, exit_edge, if (!number_of_iterations_exit (loop, exit_edge,
&niter, false, false)) &niter, false, false)
gcc_unreachable (); || !integer_onep (niter.assumptions)
if (!integer_onep (niter.assumptions)
|| !integer_zerop (niter.may_be_zero) || !integer_zerop (niter.may_be_zero)
|| !niter.niter || !niter.niter
|| TREE_CODE (niter.niter) != INTEGER_CST || TREE_CODE (niter.niter) != INTEGER_CST
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment