Commit e2c768b6 by Richard Biener Committed by Richard Biener

re PR tree-optimization/69352 (profiledbootstrap failure with --with-build-config=bootstrap-lto)

2016-01-19  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/69352
	* tree-ssa-scopedtables.c (avail_expr_hash): Check for size == -1.
	(equal_mem_array_ref_p): Constrain size and max size properly.
	Compare the reverse flag.

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

From-SVN: r232557
parent d20c47fc
2016-01-19 Richard Biener <rguenther@suse.de>
PR tree-optimization/69352
* tree-ssa-scopedtables.c (avail_expr_hash): Check for size == -1.
(equal_mem_array_ref_p): Constrain size and max size properly.
Compare the reverse flag.
2016-01-19 Bernd Schmidt <bschmidt@redhat.com>
* ira.c (ira): Update regstat data if we deleted insns.
......
2016-01-19 Richard Biener <rguenther@suse.de>
PR tree-optimization/69352
* gcc.dg/torture/pr69352.c: New testcase.
2016-01-19 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/68955
......
/* { dg-do compile } */
int a[10][14], b, c, d, e, f, g, h, i;
void bar (void);
int
foo (int x)
{
unsigned j;
int k = 0, l;
int m;
if (h)
m = 12;
else
m = 13;
if (a[x][m])
l = (long) foo;
a[x][i] = l;
while (c)
{
if (b)
{
if (f)
k = 1;
bar ();
}
for (; d;)
j++;
}
while (c)
{
if (a[x][12])
{
if (g)
k = 1;
j++;
}
c = e;
}
return k;
}
......@@ -225,7 +225,8 @@ avail_expr_hash (class expr_hash_elt *p)
&reverse);
/* Strictly, we could try to normalize variable-sized accesses too,
but here we just deal with the common case. */
if (size == max_size)
if (size != -1
&& size == max_size)
{
enum tree_code code = MEM_REF;
hstate.add_object (code);
......@@ -261,15 +262,22 @@ equal_mem_array_ref_p (tree t0, tree t1)
bool rev0;
HOST_WIDE_INT off0, sz0, max0;
tree base0 = get_ref_base_and_extent (t0, &off0, &sz0, &max0, &rev0);
if (sz0 == -1
|| sz0 != max0)
return false;
bool rev1;
HOST_WIDE_INT off1, sz1, max1;
tree base1 = get_ref_base_and_extent (t1, &off1, &sz1, &max1, &rev1);
if (sz1 == -1
|| sz1 != max1)
return false;
if (rev0 != rev1)
return false;
/* Types were compatible, so these are sanity checks. */
/* Types were compatible, so this is a sanity check. */
gcc_assert (sz0 == sz1);
gcc_assert (max0 == max1);
gcc_assert (rev0 == rev1);
return (off0 == off1) && operand_equal_p (base0, base1, 0);
}
......
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