public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug tree-optimization/20580] New: Using ASSERT_EXPR to improve constant propagation of conditional constants @ 2005-03-21 18:40 steven at gcc dot gnu dot org 2005-03-21 18:41 ` [Bug tree-optimization/20580] " steven at gcc dot gnu dot org ` (3 more replies) 0 siblings, 4 replies; 5+ messages in thread From: steven at gcc dot gnu dot org @ 2005-03-21 18:40 UTC (permalink / raw) To: gcc-bugs This is an enhancement request for constant propagation on the tree-cleanup-branch. Consider the following small test case: int foo (int a, int b) { if (a || b) { a = 3; return a + b; } return a + b; } We currently compile this to the following .optimized dump: foo (a, b) { int D.1465; int D.1464; <bb 0>: if ((a | b) != 0) goto <L0>; else goto <L1>; <L0>:; D.1465 = b + 3; goto <bb 3> (<L2>); <L1>:; D.1465 = a + b; /* Ah-ha! But we know both a and b must be 0! */ <L2>:; return D.1465; } Notice the "D.1465 = a + b;". We can know that both a and b are 0 at this point, or the condition "(a | b)" could not have been false. So this test case could be optimized to something like this: foo (a, b) { int D.1465; int D.1464; <bb 0>: if ((a | b) != 0) goto <L0>; else goto <L1>; <L0>:; D.1465 = b + 3; goto <bb 3> (<L2>); <L1>:; D.1465 = 0; <L2>:; return D.1465; } In the traditional SSA-CCP algorithm this is actually difficult to do, but on the tree-cleanup-branch, we can insert ASSERT_EXPRs for a and b in the false arm of the conditional: foo (a, b) { int D.1465; int D.1464; <bb 0>: D.1464_4 = a_2 | b_3; if (D.1464_4 != 0) goto <L0>; else goto <L1>; <L0>:; D.1465_8 = b_3 + 3; goto <bb 3> (<L2>); <L1>:; a_7 = ASSERT_EXPR <a_2, 0>; b_8 = ASSERT_EXPR <a_3, 0> D.1465_6 = a_7 + b_8; # D.1465_1 = PHI <D.1465_8(1), D.1465_6(2)>; <L2>:; return D.1465_1; } This should allow us to propagate more constants. -- Summary: Using ASSERT_EXPR to improve constant propagation of conditional constants Product: gcc Version: 4.1.0 Status: UNCONFIRMED Keywords: missed-optimization, TREE Severity: enhancement Priority: P2 Component: tree-optimization AssignedTo: dnovillo at gcc dot gnu dot org ReportedBy: steven at gcc dot gnu dot org CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20580 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug tree-optimization/20580] Using ASSERT_EXPR to improve constant propagation of conditional constants 2005-03-21 18:40 [Bug tree-optimization/20580] New: Using ASSERT_EXPR to improve constant propagation of conditional constants steven at gcc dot gnu dot org @ 2005-03-21 18:41 ` steven at gcc dot gnu dot org 2005-03-22 20:50 ` kazu at cs dot umass dot edu ` (2 subsequent siblings) 3 siblings, 0 replies; 5+ messages in thread From: steven at gcc dot gnu dot org @ 2005-03-21 18:41 UTC (permalink / raw) To: gcc-bugs ------- Additional Comments From steven at gcc dot gnu dot org 2005-03-21 18:41 ------- This should be fairly trivial to do on the tree-cleanup-branch, so this is "fixable" for GCC 4.1. Let's hope it gives a real improvement... ;-) Confirmed because I already discussed this idea with Diego. -- What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever Confirmed| |1 Last reconfirmed|0000-00-00 00:00:00 |2005-03-21 18:41:06 date| | Target Milestone|--- |4.1.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20580 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug tree-optimization/20580] Using ASSERT_EXPR to improve constant propagation of conditional constants 2005-03-21 18:40 [Bug tree-optimization/20580] New: Using ASSERT_EXPR to improve constant propagation of conditional constants steven at gcc dot gnu dot org 2005-03-21 18:41 ` [Bug tree-optimization/20580] " steven at gcc dot gnu dot org @ 2005-03-22 20:50 ` kazu at cs dot umass dot edu 2005-04-05 2:00 ` pinskia at gcc dot gnu dot org 2005-06-04 16:47 ` dnovillo at gcc dot gnu dot org 3 siblings, 0 replies; 5+ messages in thread From: kazu at cs dot umass dot edu @ 2005-03-22 20:50 UTC (permalink / raw) To: gcc-bugs ------- Additional Comments From kazu at cs dot umass dot edu 2005-03-22 20:50 ------- We probably need something like substitute_and_fold for VRP as well. Otherwise, we can't fold a + b into 0. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20580 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug tree-optimization/20580] Using ASSERT_EXPR to improve constant propagation of conditional constants 2005-03-21 18:40 [Bug tree-optimization/20580] New: Using ASSERT_EXPR to improve constant propagation of conditional constants steven at gcc dot gnu dot org 2005-03-21 18:41 ` [Bug tree-optimization/20580] " steven at gcc dot gnu dot org 2005-03-22 20:50 ` kazu at cs dot umass dot edu @ 2005-04-05 2:00 ` pinskia at gcc dot gnu dot org 2005-06-04 16:47 ` dnovillo at gcc dot gnu dot org 3 siblings, 0 replies; 5+ messages in thread From: pinskia at gcc dot gnu dot org @ 2005-04-05 2:00 UTC (permalink / raw) To: gcc-bugs -- What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|4.1.0 |--- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20580 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug tree-optimization/20580] Using ASSERT_EXPR to improve constant propagation of conditional constants 2005-03-21 18:40 [Bug tree-optimization/20580] New: Using ASSERT_EXPR to improve constant propagation of conditional constants steven at gcc dot gnu dot org ` (2 preceding siblings ...) 2005-04-05 2:00 ` pinskia at gcc dot gnu dot org @ 2005-06-04 16:47 ` dnovillo at gcc dot gnu dot org 3 siblings, 0 replies; 5+ messages in thread From: dnovillo at gcc dot gnu dot org @ 2005-06-04 16:47 UTC (permalink / raw) To: gcc-bugs ------- Additional Comments From dnovillo at gcc dot gnu dot org 2005-06-04 16:47 ------- Fixed with http://gcc.gnu.org/ml/gcc-patches/2005-06/msg00127.html -- What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED Target Milestone|--- |4.1.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20580 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2005-06-04 16:47 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2005-03-21 18:40 [Bug tree-optimization/20580] New: Using ASSERT_EXPR to improve constant propagation of conditional constants steven at gcc dot gnu dot org 2005-03-21 18:41 ` [Bug tree-optimization/20580] " steven at gcc dot gnu dot org 2005-03-22 20:50 ` kazu at cs dot umass dot edu 2005-04-05 2:00 ` pinskia at gcc dot gnu dot org 2005-06-04 16:47 ` dnovillo at gcc dot gnu dot org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).