* [Bug tree-optimization/21559] [4.1 Regression] missed jump threading
[not found] <bug-21559-6528@http.gcc.gnu.org/bugzilla/>
@ 2005-10-27 0:12 ` pinskia at gcc dot gnu dot org
2005-10-29 18:09 ` pinskia at gcc dot gnu dot org
` (8 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-10-27 0:12 UTC (permalink / raw)
To: gcc-bugs
------- Comment #5 from pinskia at gcc dot gnu dot org 2005-10-27 00:12 -------
I should note that this is a true code gen regression and not just a missed one
at the tree level.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.1 Regression] missed jump threading
[not found] <bug-21559-6528@http.gcc.gnu.org/bugzilla/>
2005-10-27 0:12 ` [Bug tree-optimization/21559] [4.1 Regression] missed jump threading pinskia at gcc dot gnu dot org
@ 2005-10-29 18:09 ` pinskia at gcc dot gnu dot org
2005-10-30 23:32 ` pinskia at gcc dot gnu dot org
` (7 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-10-29 18:09 UTC (permalink / raw)
To: gcc-bugs
------- Comment #6 from pinskia at gcc dot gnu dot org 2005-10-29 18:09 -------
Another one of these I filed this bug after looking at someone else's bug for
code gen regressions.
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|4.1.0 |4.2.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.1 Regression] missed jump threading
[not found] <bug-21559-6528@http.gcc.gnu.org/bugzilla/>
2005-10-27 0:12 ` [Bug tree-optimization/21559] [4.1 Regression] missed jump threading pinskia at gcc dot gnu dot org
2005-10-29 18:09 ` pinskia at gcc dot gnu dot org
@ 2005-10-30 23:32 ` pinskia at gcc dot gnu dot org
2006-02-07 20:03 ` [Bug tree-optimization/21559] [4.1/4.2 " law at redhat dot com
` (6 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-10-30 23:32 UTC (permalink / raw)
To: gcc-bugs
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Priority|P2 |P5
Target Milestone|4.2.0 |4.1.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.1/4.2 Regression] missed jump threading
[not found] <bug-21559-6528@http.gcc.gnu.org/bugzilla/>
` (2 preceding siblings ...)
2005-10-30 23:32 ` pinskia at gcc dot gnu dot org
@ 2006-02-07 20:03 ` law at redhat dot com
2006-02-28 20:38 ` mmitchel at gcc dot gnu dot org
` (5 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: law at redhat dot com @ 2006-02-07 20:03 UTC (permalink / raw)
To: gcc-bugs
------- Comment #7 from law at redhat dot com 2006-02-07 20:03 -------
With today's changes we thread the "break" edge out of the loop. We could
still do better.
Basically we need to realize that bytes can never have the value zero when we
hit the loop test "while (toread != 0)". Once we realize that, then we'd know
that the test (if bytes == 0) has a known result on all paths reaching the
conditional.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.1/4.2 Regression] missed jump threading
[not found] <bug-21559-6528@http.gcc.gnu.org/bugzilla/>
` (3 preceding siblings ...)
2006-02-07 20:03 ` [Bug tree-optimization/21559] [4.1/4.2 " law at redhat dot com
@ 2006-02-28 20:38 ` mmitchel at gcc dot gnu dot org
2006-05-25 2:45 ` mmitchel at gcc dot gnu dot org
` (4 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: mmitchel at gcc dot gnu dot org @ 2006-02-28 20:38 UTC (permalink / raw)
To: gcc-bugs
--
mmitchel at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|4.1.0 |4.1.1
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.1/4.2 Regression] missed jump threading
[not found] <bug-21559-6528@http.gcc.gnu.org/bugzilla/>
` (4 preceding siblings ...)
2006-02-28 20:38 ` mmitchel at gcc dot gnu dot org
@ 2006-05-25 2:45 ` mmitchel at gcc dot gnu dot org
2007-02-14 9:37 ` [Bug tree-optimization/21559] [4.1/4.2/4.3 " mmitchel at gcc dot gnu dot org
` (3 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: mmitchel at gcc dot gnu dot org @ 2006-05-25 2:45 UTC (permalink / raw)
To: gcc-bugs
------- Comment #8 from mmitchel at gcc dot gnu dot org 2006-05-25 02:36 -------
Will not be fixed in 4.1.1; adjust target milestone to 4.1.2.
--
mmitchel at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|4.1.1 |4.1.2
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.1/4.2/4.3 Regression] missed jump threading
[not found] <bug-21559-6528@http.gcc.gnu.org/bugzilla/>
` (5 preceding siblings ...)
2006-05-25 2:45 ` mmitchel at gcc dot gnu dot org
@ 2007-02-14 9:37 ` mmitchel at gcc dot gnu dot org
2008-07-04 16:53 ` [Bug tree-optimization/21559] [4.2/4.3/4.4 " jsm28 at gcc dot gnu dot org
` (2 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: mmitchel at gcc dot gnu dot org @ 2007-02-14 9:37 UTC (permalink / raw)
To: gcc-bugs
--
mmitchel at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|4.1.2 |4.1.3
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.2/4.3/4.4 Regression] missed jump threading
[not found] <bug-21559-6528@http.gcc.gnu.org/bugzilla/>
` (6 preceding siblings ...)
2007-02-14 9:37 ` [Bug tree-optimization/21559] [4.1/4.2/4.3 " mmitchel at gcc dot gnu dot org
@ 2008-07-04 16:53 ` jsm28 at gcc dot gnu dot org
2008-11-22 11:37 ` steven at gcc dot gnu dot org
2008-11-22 15:48 ` [Bug tree-optimization/21559] [4.2/4.3 " rguenth at gcc dot gnu dot org
9 siblings, 0 replies; 16+ messages in thread
From: jsm28 at gcc dot gnu dot org @ 2008-07-04 16:53 UTC (permalink / raw)
To: gcc-bugs
------- Comment #9 from jsm28 at gcc dot gnu dot org 2008-07-04 16:53 -------
Closing 4.1 branch.
--
jsm28 at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|[4.1/4.2/4.3/4.4 Regression]|[4.2/4.3/4.4 Regression]
|missed jump threading |missed jump threading
Target Milestone|4.1.3 |4.2.5
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.2/4.3/4.4 Regression] missed jump threading
[not found] <bug-21559-6528@http.gcc.gnu.org/bugzilla/>
` (7 preceding siblings ...)
2008-07-04 16:53 ` [Bug tree-optimization/21559] [4.2/4.3/4.4 " jsm28 at gcc dot gnu dot org
@ 2008-11-22 11:37 ` steven at gcc dot gnu dot org
2008-11-22 15:48 ` [Bug tree-optimization/21559] [4.2/4.3 " rguenth at gcc dot gnu dot org
9 siblings, 0 replies; 16+ messages in thread
From: steven at gcc dot gnu dot org @ 2008-11-22 11:37 UTC (permalink / raw)
To: gcc-bugs
------- Comment #10 from steven at gcc dot gnu dot org 2008-11-22 11:36 -------
Trunk today generates the following code (this is the final_cleanup dump):
;; Function foo (foo)
foo ()
{
static char eof_reached = 0;
int bytes;
int toread;
<bb 2>:
toread = 4096;
<bb 3>:
bytes = bar (toread);
if (bytes <= 0)
goto <bb 4>;
else
goto <bb 5>;
<bb 4>:
if (bytes != 0)
goto <bb 6>;
else
goto <bb 7>;
<bb 5>:
toread = toread - bytes;
<bb 6>:
if (toread != 0)
goto <bb 3>;
else
goto <bb 8>;
<bb 7>:
eof_reached = 1;
<bb 8>:
return;
}
Looks like we can't do any better than that -- can we??
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.2/4.3 Regression] missed jump threading
[not found] <bug-21559-6528@http.gcc.gnu.org/bugzilla/>
` (8 preceding siblings ...)
2008-11-22 11:37 ` steven at gcc dot gnu dot org
@ 2008-11-22 15:48 ` rguenth at gcc dot gnu dot org
9 siblings, 0 replies; 16+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2008-11-22 15:48 UTC (permalink / raw)
To: gcc-bugs
------- Comment #11 from rguenth at gcc dot gnu dot org 2008-11-22 15:47 -------
I don't see how. Fixed thus, WONTFIX on the branches.
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Known to fail|4.3.0 4.2.0 |4.3.2 4.2.4
Resolution| |FIXED
Target Milestone|4.2.5 |4.4.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.1 Regression] missed jump threading
2005-05-13 22:42 [Bug tree-optimization/21559] New: [4.1 " pinskia at gcc dot gnu dot org
@ 2005-05-13 22:43 ` pinskia at gcc dot gnu dot org
2005-05-16 0:07 ` steven at gcc dot gnu dot org
` (4 subsequent siblings)
5 siblings, 0 replies; 16+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-05-13 22:43 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|--- |4.1.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.1 Regression] missed jump threading
2005-05-13 22:42 [Bug tree-optimization/21559] New: [4.1 " pinskia at gcc dot gnu dot org
2005-05-13 22:43 ` [Bug tree-optimization/21559] " pinskia at gcc dot gnu dot org
@ 2005-05-16 0:07 ` steven at gcc dot gnu dot org
2005-07-27 17:18 ` law at redhat dot com
` (3 subsequent siblings)
5 siblings, 0 replies; 16+ messages in thread
From: steven at gcc dot gnu dot org @ 2005-05-16 0:07 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Last reconfirmed|0000-00-00 00:00:00 |2005-05-16 00:07:25
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.1 Regression] missed jump threading
2005-05-13 22:42 [Bug tree-optimization/21559] New: [4.1 " pinskia at gcc dot gnu dot org
2005-05-13 22:43 ` [Bug tree-optimization/21559] " pinskia at gcc dot gnu dot org
2005-05-16 0:07 ` steven at gcc dot gnu dot org
@ 2005-07-27 17:18 ` law at redhat dot com
2005-07-28 22:03 ` law at redhat dot com
` (2 subsequent siblings)
5 siblings, 0 replies; 16+ messages in thread
From: law at redhat dot com @ 2005-07-27 17:18 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From law at redhat dot com 2005-07-27 17:13 -------
It's highly unlikely threading is going to be able to completely eliminate the
test for bytes == 0.
The fundamental problem is the threader has no way of knowing that the loop exit
test (toread != 0) can never be true if bytes == 0.
Now there is a missed threading opportunity in this code, when bytes <= 0, but
! (bytes < 0) we exit the loop via a break statement. Clearly when we exit the
loop via that break statement, we need not test bytes == 0 again outside the loop.
It's also the case that the test bytes < 0 can and should be simplified into
bytes != 0. In fact, if VRP is enhanced to perform that simplification, then
we do thread the loop exit via the break statement.
jeff
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.1 Regression] missed jump threading
2005-05-13 22:42 [Bug tree-optimization/21559] New: [4.1 " pinskia at gcc dot gnu dot org
` (2 preceding siblings ...)
2005-07-27 17:18 ` law at redhat dot com
@ 2005-07-28 22:03 ` law at redhat dot com
2005-07-29 12:30 ` pinskia at gcc dot gnu dot org
2005-07-31 5:46 ` phython at gcc dot gnu dot org
5 siblings, 0 replies; 16+ messages in thread
From: law at redhat dot com @ 2005-07-28 22:03 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From law at redhat dot com 2005-07-28 22:00 -------
The attached patch is a piece of what will be necessary to fully optimize this
testcase in the future.
The first step is getting VRP to discover that all the paths to the bytes == 0
test have a range of either [0, 0] or ~[0, 0]. Two changes are necessary to
make that happen.
a. When we're searching for uses of a conditional's operand, we currently
ignore any uses in blocks that have been visited. That causes us to miss
uses, particularly those in PHI nodes at dominance frontiers. With that
fixed, we get some additional ASSERT_EXPRs on the paths out of the loop
to the bytes == 0 test. The first hunk in the patch takes care of this
issue.
b. When evaluating a PHI, we have some checks to avoid expanding ranges
over and over and over again as we gain more information at PHI nodes.
This is fine and good, except that it's too aggressive. Consider if
we are meeting two ranges [ , -1] and [1, ]. vrp_meet will correctly
give us ~ [0, 0], but the code in vrp_visit_phi_node will try to expand
the [ , -1] range rather than use the anti-range returned by vrp_meet.
This results in getting a VARYING range rather than ~[0, 0]. THe second
hunk in the attached patch fixes that little goof.
Once VRP computes all the necessary information, it's just a matter of using
that information to perform the optimization we want. I haven't decided what
the best approach would be. It's really a jump threading optimization.
a. Jump threading in tree-vrp. This may not be as sick as it sounds. The
idea would be that much of the jump threading code would become a common
routine used by tree-vrp and DOM. That would probably mean the remaining
VRP bits in DOM would disappear since tree-vrp would perform any threading
based on VRP.
b. Make range information persistent so that DOM could use the VRP information
computed by tree-vrp.
Anyway, this is definitely not stuff we want to try to squeeze into 4.1. So I'm
going to attach my work-to-date so that nobody has to recreate it when we open
up stage1 for GCC 4.2.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.1 Regression] missed jump threading
2005-05-13 22:42 [Bug tree-optimization/21559] New: [4.1 " pinskia at gcc dot gnu dot org
` (3 preceding siblings ...)
2005-07-28 22:03 ` law at redhat dot com
@ 2005-07-29 12:30 ` pinskia at gcc dot gnu dot org
2005-07-31 5:46 ` phython at gcc dot gnu dot org
5 siblings, 0 replies; 16+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-07-29 12:30 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
Severity|normal |minor
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread
* [Bug tree-optimization/21559] [4.1 Regression] missed jump threading
2005-05-13 22:42 [Bug tree-optimization/21559] New: [4.1 " pinskia at gcc dot gnu dot org
` (4 preceding siblings ...)
2005-07-29 12:30 ` pinskia at gcc dot gnu dot org
@ 2005-07-31 5:46 ` phython at gcc dot gnu dot org
5 siblings, 0 replies; 16+ messages in thread
From: phython at gcc dot gnu dot org @ 2005-07-31 5:46 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From phython at gcc dot gnu dot org 2005-07-31 05:45 -------
I would really prefer option b, where we keep VRP information persistant. That
way fold can use VRP information when available.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21559
^ permalink raw reply [flat|nested] 16+ messages in thread