* [Bug tree-optimization/59387] wrong code (hangs) at -Os on x86_64-linux-gnu
2013-12-04 18:41 [Bug tree-optimization/59387] New: wrong code (hangs) at -Os on x86_64-linux-gnu su at cs dot ucdavis.edu
@ 2013-12-05 10:57 ` rguenth at gcc dot gnu.org
2013-12-19 11:01 ` [Bug tree-optimization/59387] [4.9 Regression] " jakub at gcc dot gnu.org
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: rguenth at gcc dot gnu.org @ 2013-12-05 10:57 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59387
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |wrong-code
Priority|P3 |P1
Status|UNCONFIRMED |NEW
Last reconfirmed| |2013-12-05
Target Milestone|--- |4.9.0
Ever confirmed|0 |1
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug tree-optimization/59387] [4.9 Regression] wrong code (hangs) at -Os on x86_64-linux-gnu
2013-12-04 18:41 [Bug tree-optimization/59387] New: wrong code (hangs) at -Os on x86_64-linux-gnu su at cs dot ucdavis.edu
2013-12-05 10:57 ` [Bug tree-optimization/59387] " rguenth at gcc dot gnu.org
@ 2013-12-19 11:01 ` jakub at gcc dot gnu.org
2013-12-19 11:22 ` jakub at gcc dot gnu.org
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: jakub at gcc dot gnu.org @ 2013-12-19 11:01 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59387
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
Summary|wrong code (hangs) at -Os |[4.9 Regression] wrong code
|on x86_64-linux-gnu |(hangs) at -Os on
| |x86_64-linux-gnu
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Started with r196792. Looking at it.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug tree-optimization/59387] [4.9 Regression] wrong code (hangs) at -Os on x86_64-linux-gnu
2013-12-04 18:41 [Bug tree-optimization/59387] New: wrong code (hangs) at -Os on x86_64-linux-gnu su at cs dot ucdavis.edu
2013-12-05 10:57 ` [Bug tree-optimization/59387] " rguenth at gcc dot gnu.org
2013-12-19 11:01 ` [Bug tree-optimization/59387] [4.9 Regression] " jakub at gcc dot gnu.org
@ 2013-12-19 11:22 ` jakub at gcc dot gnu.org
2013-12-19 11:31 ` jakub at gcc dot gnu.org
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: jakub at gcc dot gnu.org @ 2013-12-19 11:22 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59387
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Seems it is SCCP that breaks this.
We have a loop like:
<bb 4>:
c.2_10 = (unsigned char) c_lsm.11_20;
_11 = c.2_10 + 255;
c.3_12 = (char) _11;
_14 = b_f1_lsm.12_7 + 1;
<bb 5>:
# c_lsm.11_20 = PHI <c_lsm.11_15(3), c.3_12(4)>
# b_f1_lsm.12_7 = PHI <0(3), _14(4)>
if (b_f1_lsm.12_7 <= 23)
goto <bb 4>;
else
goto <bb 6>;
<bb 6>:
# b_f1_lsm.12_36 = PHI <b_f1_lsm.12_7(5)>
# c_lsm.11_40 = PHI <c_lsm.11_20(5)>
where c.2/c.3/c_lsm.11 is signed char. Note the c decrement done carefully in
unsigned char type.
But then comes sccp and does:
final value replacement:
c_lsm.11_40 = PHI <c_lsm.11_20(5)>
with
c_lsm.11_40 = c_lsm.11_15 + -24;
which is invalid, because it is subtracted in signed type instead of the
unsigned type originally. Dunno if scev remembers somewhere what type the
arithmetics has been actually performed in. Richard, can you please have a
look?
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug tree-optimization/59387] [4.9 Regression] wrong code (hangs) at -Os on x86_64-linux-gnu
2013-12-04 18:41 [Bug tree-optimization/59387] New: wrong code (hangs) at -Os on x86_64-linux-gnu su at cs dot ucdavis.edu
` (2 preceding siblings ...)
2013-12-19 11:22 ` jakub at gcc dot gnu.org
@ 2013-12-19 11:31 ` jakub at gcc dot gnu.org
2014-01-08 16:38 ` jakub at gcc dot gnu.org
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: jakub at gcc dot gnu.org @ 2013-12-19 11:31 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59387
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Note already the chrec is {c_lsm.11_15, +, -1}_2 with char type everywhere (but
the 2 which is int, but that is irrelevant), so the information that the
decrement was performed carefully in non-wrapping type is lost at that point.
Dunno if we want and whether it would be possible to generate a chrec with
unsigned char type in that case instead
(i.e. (char) {(unsigned char)c_lsm.11_15, +, 255}_2 instead), or some special
bit on the chrec to tell us that it is wrapping.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug tree-optimization/59387] [4.9 Regression] wrong code (hangs) at -Os on x86_64-linux-gnu
2013-12-04 18:41 [Bug tree-optimization/59387] New: wrong code (hangs) at -Os on x86_64-linux-gnu su at cs dot ucdavis.edu
` (3 preceding siblings ...)
2013-12-19 11:31 ` jakub at gcc dot gnu.org
@ 2014-01-08 16:38 ` jakub at gcc dot gnu.org
2014-01-08 22:48 ` jakub at gcc dot gnu.org
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: jakub at gcc dot gnu.org @ 2014-01-08 16:38 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59387
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 31777
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=31777&action=edit
gcc49-pr59387.patch
So like this? I'll bootstrap/regtest it with additional logging to see how
often we refuse to sccp because of this.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug tree-optimization/59387] [4.9 Regression] wrong code (hangs) at -Os on x86_64-linux-gnu
2013-12-04 18:41 [Bug tree-optimization/59387] New: wrong code (hangs) at -Os on x86_64-linux-gnu su at cs dot ucdavis.edu
` (4 preceding siblings ...)
2014-01-08 16:38 ` jakub at gcc dot gnu.org
@ 2014-01-08 22:48 ` jakub at gcc dot gnu.org
2014-01-09 9:34 ` rguenth at gcc dot gnu.org
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: jakub at gcc dot gnu.org @ 2014-01-08 22:48 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59387
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Unfortunately it triggers (sccp no longer optimizes) on quite a few testcases:
gcc.c-torture/execute/pr58277-1.c
gcc.c-torture/execute/pr58831.c
gcc.c-torture/execute/pr59387.c
gcc.dg/pr58010.c
gcc.dg/torture/pr55481.c
gcc.dg/torture/pr56366.c
gcc.dg/torture/pr59058.c
gcc.dg/torture/pr59245.c
gcc.dg/tree-ssa/loop-32.c
gcc.dg/tree-ssa/loop-33.c
gcc.dg/tree-ssa/loop-35.c
gcc.dg/tree-ssa/scev-6.c
(the first test only for -m64, all the rest both -m32 and -m64, the last even
FAILs because of that). Couldn't we just transform that somehow into an
unsigned type computation instead in that case, at least for simple cases?
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug tree-optimization/59387] [4.9 Regression] wrong code (hangs) at -Os on x86_64-linux-gnu
2013-12-04 18:41 [Bug tree-optimization/59387] New: wrong code (hangs) at -Os on x86_64-linux-gnu su at cs dot ucdavis.edu
` (5 preceding siblings ...)
2014-01-08 22:48 ` jakub at gcc dot gnu.org
@ 2014-01-09 9:34 ` rguenth at gcc dot gnu.org
2014-01-10 14:56 ` jakub at gcc dot gnu.org
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: rguenth at gcc dot gnu.org @ 2014-01-09 9:34 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59387
--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #7)
> Unfortunately it triggers (sccp no longer optimizes) on quite a few
> testcases:
>
> gcc.c-torture/execute/pr58277-1.c
> gcc.c-torture/execute/pr58831.c
> gcc.c-torture/execute/pr59387.c
> gcc.dg/pr58010.c
> gcc.dg/torture/pr55481.c
> gcc.dg/torture/pr56366.c
> gcc.dg/torture/pr59058.c
> gcc.dg/torture/pr59245.c
> gcc.dg/tree-ssa/loop-32.c
> gcc.dg/tree-ssa/loop-33.c
> gcc.dg/tree-ssa/loop-35.c
> gcc.dg/tree-ssa/scev-6.c
>
> (the first test only for -m64, all the rest both -m32 and -m64, the last
> even FAILs because of that). Couldn't we just transform that somehow into
> an unsigned type computation instead in that case, at least for simple cases?
You could leverage the code I added to LIM ... in the case where SCEV folded
casts, of course.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug tree-optimization/59387] [4.9 Regression] wrong code (hangs) at -Os on x86_64-linux-gnu
2013-12-04 18:41 [Bug tree-optimization/59387] New: wrong code (hangs) at -Os on x86_64-linux-gnu su at cs dot ucdavis.edu
` (6 preceding siblings ...)
2014-01-09 9:34 ` rguenth at gcc dot gnu.org
@ 2014-01-10 14:56 ` jakub at gcc dot gnu.org
2014-01-13 19:14 ` jakub at gcc dot gnu.org
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: jakub at gcc dot gnu.org @ 2014-01-10 14:56 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59387
--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 31797
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=31797&action=edit
gcc49-pr59387.patch
Untested fix.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug tree-optimization/59387] [4.9 Regression] wrong code (hangs) at -Os on x86_64-linux-gnu
2013-12-04 18:41 [Bug tree-optimization/59387] New: wrong code (hangs) at -Os on x86_64-linux-gnu su at cs dot ucdavis.edu
` (7 preceding siblings ...)
2014-01-10 14:56 ` jakub at gcc dot gnu.org
@ 2014-01-13 19:14 ` jakub at gcc dot gnu.org
2014-01-15 21:43 ` law at redhat dot com
2014-01-16 19:15 ` jakub at gcc dot gnu.org
10 siblings, 0 replies; 12+ messages in thread
From: jakub at gcc dot gnu.org @ 2014-01-13 19:14 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59387
--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Author: jakub
Date: Mon Jan 13 19:14:03 2014
New Revision: 206583
URL: http://gcc.gnu.org/viewcvs?rev=206583&root=gcc&view=rev
Log:
PR tree-optimization/59387
* tree-scalar-evolution.c: Include gimple-fold.h and gimplify-me.h.
(scev_const_prop): If folded_casts and type has undefined overflow,
use force_gimple_operand instead of force_gimple_operand_gsi and
for each added stmt if it is assign with
arith_code_with_undefined_signed_overflow, call
rewrite_to_defined_overflow.
* tree-ssa-loop-im.c: Don't include gimplify-me.h, include
gimple-fold.h instead.
(arith_code_with_undefined_signed_overflow,
rewrite_to_defined_overflow): Moved to ...
* gimple-fold.c (arith_code_with_undefined_signed_overflow,
rewrite_to_defined_overflow): ... here. No longer static.
Include gimplify-me.h.
* gimple-fold.h (arith_code_with_undefined_signed_overflow,
rewrite_to_defined_overflow): New prototypes.
* gcc.c-torture/execute/pr59387.c: New test.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/gimple-fold.c
trunk/gcc/gimple-fold.h
trunk/gcc/testsuite/ChangeLog
trunk/gcc/tree-scalar-evolution.c
trunk/gcc/tree-ssa-loop-im.c
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug tree-optimization/59387] [4.9 Regression] wrong code (hangs) at -Os on x86_64-linux-gnu
2013-12-04 18:41 [Bug tree-optimization/59387] New: wrong code (hangs) at -Os on x86_64-linux-gnu su at cs dot ucdavis.edu
` (8 preceding siblings ...)
2014-01-13 19:14 ` jakub at gcc dot gnu.org
@ 2014-01-15 21:43 ` law at redhat dot com
2014-01-16 19:15 ` jakub at gcc dot gnu.org
10 siblings, 0 replies; 12+ messages in thread
From: law at redhat dot com @ 2014-01-15 21:43 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59387
Jeffrey A. Law <law at redhat dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
CC| |law at redhat dot com
Resolution|--- |FIXED
--- Comment #11 from Jeffrey A. Law <law at redhat dot com> ---
Fixed by jakub's commit.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug tree-optimization/59387] [4.9 Regression] wrong code (hangs) at -Os on x86_64-linux-gnu
2013-12-04 18:41 [Bug tree-optimization/59387] New: wrong code (hangs) at -Os on x86_64-linux-gnu su at cs dot ucdavis.edu
` (9 preceding siblings ...)
2014-01-15 21:43 ` law at redhat dot com
@ 2014-01-16 19:15 ` jakub at gcc dot gnu.org
10 siblings, 0 replies; 12+ messages in thread
From: jakub at gcc dot gnu.org @ 2014-01-16 19:15 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59387
--- Comment #12 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Author: jakub
Date: Thu Jan 16 19:14:49 2014
New Revision: 206678
URL: http://gcc.gnu.org/viewcvs?rev=206678&root=gcc&view=rev
Log:
PR tree-optimization/59387
* gcc.c-torture/execute/pr59387.c: New test.
Added:
trunk/gcc/testsuite/gcc.c-torture/execute/pr59387.c
^ permalink raw reply [flat|nested] 12+ messages in thread