Fix pr78725
PR tree-optimization/78725 * tree-ssa-loop-split.c (split_at_bb_p): Check for overflow and at correct use point. testsuite/ PR tree-optimization/78725 * gcc.dg/pr78725.c: New test. * gcc.dg/pr78725-2.c: New test. From-SVN: r243606
This commit is contained in:
parent
5594a028fe
commit
9042295c44
@ -1,3 +1,9 @@
|
||||
2016-12-13 Michael Matz <matz@suse.de>
|
||||
|
||||
PR tree-optimization/78725
|
||||
* tree-ssa-loop-split.c (split_at_bb_p): Check for overflow and
|
||||
at correct use point.
|
||||
|
||||
2016-12-13 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* asan.c (asan_expand_mark_ifn): Use renamed
|
||||
|
@ -1,3 +1,9 @@
|
||||
2016-12-13 Michael Matz <matz@suse.de>
|
||||
|
||||
PR tree-optimization/78725
|
||||
* gcc.dg/pr78725.c: New test.
|
||||
* gcc.dg/pr78725-2.c: New test.
|
||||
|
||||
2016-12-13 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/78742
|
||||
|
19
gcc/testsuite/gcc.dg/pr78725-2.c
Normal file
19
gcc/testsuite/gcc.dg/pr78725-2.c
Normal file
@ -0,0 +1,19 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-O3 -fsplit-loops" } */
|
||||
|
||||
int a, b, c;
|
||||
|
||||
int main ()
|
||||
{
|
||||
int d;
|
||||
for (; c < 1; c++)
|
||||
for (d = 0; d < 3; d++)
|
||||
for (b = 0; b < 1; b++)
|
||||
if (c >= d)
|
||||
a = 1;
|
||||
|
||||
if (a != 1)
|
||||
__builtin_abort ();
|
||||
|
||||
return 0;
|
||||
}
|
19
gcc/testsuite/gcc.dg/pr78725.c
Normal file
19
gcc/testsuite/gcc.dg/pr78725.c
Normal file
@ -0,0 +1,19 @@
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-O3 -fsplit-loops" } */
|
||||
|
||||
int fn1 (int b, int c)
|
||||
{
|
||||
return c < 0 || c > 31 ? 0 : b >> c;
|
||||
}
|
||||
|
||||
unsigned char d = 255;
|
||||
int e, f;
|
||||
|
||||
int main ()
|
||||
{
|
||||
for (; f < 2; f++)
|
||||
e = fn1 (1, d++);
|
||||
if (e != 1)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
@ -102,10 +102,11 @@ split_at_bb_p (struct loop *loop, basic_block bb, tree *border, affine_iv *iv)
|
||||
|
||||
tree op0 = gimple_cond_lhs (stmt);
|
||||
tree op1 = gimple_cond_rhs (stmt);
|
||||
struct loop *useloop = loop_containing_stmt (stmt);
|
||||
|
||||
if (!simple_iv (loop, loop, op0, iv, false))
|
||||
if (!simple_iv (loop, useloop, op0, iv, false))
|
||||
return NULL_TREE;
|
||||
if (!simple_iv (loop, loop, op1, &iv2, false))
|
||||
if (!simple_iv (loop, useloop, op1, &iv2, false))
|
||||
return NULL_TREE;
|
||||
|
||||
/* Make it so that the first argument of the condition is
|
||||
@ -122,6 +123,8 @@ split_at_bb_p (struct loop *loop, basic_block bb, tree *border, affine_iv *iv)
|
||||
return NULL_TREE;
|
||||
if (!integer_zerop (iv2.step))
|
||||
return NULL_TREE;
|
||||
if (!iv->no_overflow)
|
||||
return NULL_TREE;
|
||||
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user