diff options
author | Richard Guenther <rguenther@suse.de> | 2011-03-22 12:40:09 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2011-03-22 12:40:09 +0000 |
commit | 7bec30e1097eacc991e358cc7a97b6b22f611a31 (patch) | |
tree | 824eb6fe401f7e31b326b3f9e241700f0ecfbc54 /gcc | |
parent | 0b7e851b85afb78125a8cce3f5f0bf332124541f (diff) | |
download | gcc-7bec30e1097eacc991e358cc7a97b6b22f611a31.zip gcc-7bec30e1097eacc991e358cc7a97b6b22f611a31.tar.gz gcc-7bec30e1097eacc991e358cc7a97b6b22f611a31.tar.bz2 |
re PR tree-optimization/48228 (incorrect signed overflow warning when only 0 and 1 are used)
2011-03-22 Richard Guenther <rguenther@suse.de>
PR tree-optimization/48228
* tree-vrp.c (vrp_visit_phi_node): Do not stop propagating
for single-arg PHIs.
* gcc.dg/Wstrict-overflow-23.c: New testcase.
From-SVN: r171287
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Wstrict-overflow-23.c | 31 | ||||
-rw-r--r-- | gcc/tree-vrp.c | 1 |
4 files changed, 43 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6d318e0..512e46d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-03-22 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/48228 + * tree-vrp.c (vrp_visit_phi_node): Do not stop propagating + for single-arg PHIs. + 2011-03-22 Andrey Belevantsev <abel@ispras.ru> PR rtl-optimization/48143 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2ce6bb7..a5d78c9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-03-22 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/48228 + * gcc.dg/Wstrict-overflow-23.c: New testcase. + 2011-03-21 Jack Howarth <howarth@bromo.med.uc.edu> * lib/prune.exp (prune_gcc_output): Prune "could not create diff --git a/gcc/testsuite/gcc.dg/Wstrict-overflow-23.c b/gcc/testsuite/gcc.dg/Wstrict-overflow-23.c new file mode 100644 index 0000000..16014bb --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wstrict-overflow-23.c @@ -0,0 +1,31 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -Wstrict-overflow" } */ + +unsigned int +do_scrolling (unsigned int window_size, unsigned int writecost) +{ + unsigned int i = window_size; + + int terminal_window_p = 0; + unsigned int queue = 0; + + for (i = window_size; i; i--) + { + if (writecost < i) + ++queue; + else if (writecost & 1) + terminal_window_p = 1; + } + + if (queue > 0) + { + if (!terminal_window_p) + { + terminal_window_p = 1; + } + } + + if (terminal_window_p) + return 100; + return 0; +} diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index d2e6551..42ea910 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -6619,6 +6619,7 @@ vrp_visit_phi_node (gimple phi) edge; this helps us avoid an overflow infinity for conditionals which are not in a loop. */ if (edges > 0 + && gimple_phi_num_args (phi) > 1 && edges == old_edges) { int cmp_min = compare_values (lhs_vr->min, vr_result.min); |