re PR middle-end/52881 (ICE due to null pointer deref in cfgloop.c)
2012-04-11 Richard Guenther <rguenther@suse.de> PR rtl-optimization/52881 * ifcvt.c (find_if_case_2): Avoid speculating loop latches. * gcc.dg/torture/pr52881.c: New testcase. * gcc.dg/torture/pr52913.c: Likewise. From-SVN: r186304
This commit is contained in:
parent
12df9a2f92
commit
13a7578b18
@ -1,3 +1,8 @@
|
||||
2012-04-11 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR rtl-optimization/52881
|
||||
* ifcvt.c (find_if_case_2): Avoid speculating loop latches.
|
||||
|
||||
2012-04-11 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/52912
|
||||
|
@ -3927,6 +3927,11 @@ find_if_case_2 (basic_block test_bb, edge then_edge, edge else_edge)
|
||||
edge else_succ;
|
||||
int then_prob, else_prob;
|
||||
|
||||
/* We do not want to speculate (empty) loop latches. */
|
||||
if (current_loops
|
||||
&& else_bb->loop_father->latch == else_bb)
|
||||
return FALSE;
|
||||
|
||||
/* If we are partitioning hot/cold basic blocks, we don't want to
|
||||
mess up unconditional or indirect jumps that cross between hot
|
||||
and cold sections.
|
||||
|
@ -1,3 +1,9 @@
|
||||
2012-04-11 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR rtl-optimization/52881
|
||||
* gcc.dg/torture/pr52881.c: New testcase.
|
||||
* gcc.dg/torture/pr52913.c: Likewise.
|
||||
|
||||
2012-04-11 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/52912
|
||||
|
35
gcc/testsuite/gcc.dg/torture/pr52881.c
Normal file
35
gcc/testsuite/gcc.dg/torture/pr52881.c
Normal file
@ -0,0 +1,35 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
int a, b, c, d, e, f, h, i, j, k, l, m, n, o;
|
||||
static int g;
|
||||
int
|
||||
fn1 () {
|
||||
for (;; ++f)
|
||||
if (e)
|
||||
break;
|
||||
return 0;
|
||||
}
|
||||
unsigned char fn2 ();
|
||||
void
|
||||
fn3 () {
|
||||
lbl_220:
|
||||
if (j) {
|
||||
lbl_221:
|
||||
l = (g || b) <= fn1 ();
|
||||
for (;;) {
|
||||
g = 0;
|
||||
fn2 ();
|
||||
if (k)
|
||||
goto lbl_220;
|
||||
break;
|
||||
}
|
||||
if (l)
|
||||
goto lbl_221;
|
||||
}
|
||||
}
|
||||
unsigned char
|
||||
fn2 () {
|
||||
o = d ? 0 : c;
|
||||
h = m | a % o != n;
|
||||
return i;
|
||||
}
|
18
gcc/testsuite/gcc.dg/torture/pr52913.c
Normal file
18
gcc/testsuite/gcc.dg/torture/pr52913.c
Normal file
@ -0,0 +1,18 @@
|
||||
/* { dg-do compile } */
|
||||
|
||||
int a, b, c, d, e;
|
||||
void
|
||||
fn1 ()
|
||||
{
|
||||
lbl_101:
|
||||
e = 0;
|
||||
lbl_274:
|
||||
for (c = 0; c < 1; c = a)
|
||||
if (d)
|
||||
if (b)
|
||||
goto lbl_101;
|
||||
else
|
||||
break;
|
||||
d = 1;
|
||||
goto lbl_274;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user