diff options
author | Diego Novillo <dnovillo@gcc.gnu.org> | 2007-08-03 09:08:29 -0400 |
---|---|---|
committer | Diego Novillo <dnovillo@gcc.gnu.org> | 2007-08-03 09:08:29 -0400 |
commit | 737b089116ad5a0dd98a4158e73c55fac8c793a3 (patch) | |
tree | fe5a295e2023ee1727a9a39b4ebe332c6fe018ae /gcc | |
parent | 5e56953d9ab1bd29943490af0fb1e4e9a1e26834 (diff) | |
download | gcc-737b089116ad5a0dd98a4158e73c55fac8c793a3.zip gcc-737b089116ad5a0dd98a4158e73c55fac8c793a3.tar.gz gcc-737b089116ad5a0dd98a4158e73c55fac8c793a3.tar.bz2 |
[multiple changes]
2007-08-03 Andrew Pinski <andrew_pinski@playstation.sony.com>
Diego Novillo <dnovillo@google.com>
PR 31521
* tree-vrp.c (simplify_div_or_mod_using_ranges): Also simplify
if the range includes 0.
2007-08-03 Diego Novillo <dnovillo@google.com>
PR 31521
* gcc.dg/tree-ssa/pr31521.c: New test.
From-SVN: r127180
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/pr31521.c | 20 | ||||
-rw-r--r-- | gcc/tree-vrp.c | 2 |
4 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 04ff2e8..01a8d15 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-08-03 Andrew Pinski <andrew_pinski@playstation.sony.com> + Diego Novillo <dnovillo@google.com> + + PR 31521 + * tree-vrp.c (simplify_div_or_mod_using_ranges): Also simplify + if the range includes 0. + 2007-08-03 Ben Elliston <bje@au.ibm.com> * config/spu/spu.md (dftsv, dftsv_celledp): Attach the appropriate diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ac0b329..0952f03 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-08-03 Diego Novillo <dnovillo@google.com> + + PR 31521 + * gcc.dg/tree-ssa/pr31521.c: New test. + 2007-08-03 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/32770 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr31521.c b/gcc/testsuite/gcc.dg/tree-ssa/pr31521.c new file mode 100644 index 0000000..4f54cc0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr31521.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-vrp1" } */ + +void fail(void) __attribute__((noreturn)); +int bar(int); + +int foo(int x) { + int i; + int s = 0; + + if (x <= 0) fail(); + for (i = 0; i < x; ++i) { + /* This division by 4 should be replaced with >> 2. */ + s += bar(i/4); + } + return s; +} + +/* { dg-final { scan-tree-dump-times " = i_.* >> 2" 1 "vrp1" } } */ +/* { dg-final { cleanup-tree-dump "vrp1" } } */ diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index fb31b9a..11e955f 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -5541,7 +5541,7 @@ simplify_div_or_mod_using_ranges (tree stmt, tree rhs, enum tree_code rhs_code) { bool sop = false; - val = compare_range_with_value (GT_EXPR, vr, integer_zero_node, &sop); + val = compare_range_with_value (GE_EXPR, vr, integer_zero_node, &sop); if (val && sop |