public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/15757] New: Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X".
@ 2004-06-01  8:17 kazu at cs dot umass dot edu
  2004-06-01 11:20 ` [Bug tree-optimization/15757] " pinskia at gcc dot gnu dot org
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: kazu at cs dot umass dot edu @ 2004-06-01  8:17 UTC (permalink / raw)
  To: gcc-bugs

void bar1 (void);
void bar2 (void);

void
foo (unsigned int a, unsigned int b)
{
  if (a >= b)
    bar1 ();
  else if (b <= a)
    bar2 ();
}

The last tree-ssa form looks like so:

foo (a, b)
{
<bb 0>:
  if (a_1 >= b_2) goto <L0>; else goto <L1>;

<L0>:;
  bar1 () [tail call];
  goto <bb 4> (<L3>);

<L1>:;
  if (b_2 <= a_1) goto <L2>; else goto <L3>;

<L2>:;
  bar2 () [tail call];

<L3>:;
  return;

}

Note that the second "if" should go away completely as the two "if"s
are identical except the order of the variables appearing in the condition.

This actually occurs in alias.i.t50.tailc like so:

  if (T.1029_168 >= T.1030_170) goto <L6>; else goto <L2>;

<L2>:;
  if (T.1030_170 <= T.1029_168) goto <L3>; else goto <L4>;

If I have the identical conditions twice, including the order of the variables,
then the second "if" goes away as expected.

-- 
           Summary: Convert "If (a >= b) X else if (b <= a) Y" into "if (a
                    >= b) X".
           Product: gcc
           Version: 3.5.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: enhancement
          Priority: P2
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: kazu at cs dot umass dot edu
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15757


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug tree-optimization/15757] Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X".
  2004-06-01  8:17 [Bug tree-optimization/15757] New: Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X" kazu at cs dot umass dot edu
@ 2004-06-01 11:20 ` pinskia at gcc dot gnu dot org
  2004-06-05 20:22 ` law at redhat dot com
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-06-01 11:20 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2004-06-01 11:20 -------
Confirmed.

Hmm, looks like jump threading needs a little improvement.

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |law at gcc dot gnu dot org
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|                            |1
   Last reconfirmed|0000-00-00 00:00:00         |2004-06-01 11:20:34
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15757


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug tree-optimization/15757] Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X".
  2004-06-01  8:17 [Bug tree-optimization/15757] New: Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X" kazu at cs dot umass dot edu
  2004-06-01 11:20 ` [Bug tree-optimization/15757] " pinskia at gcc dot gnu dot org
@ 2004-06-05 20:22 ` law at redhat dot com
  2004-06-14 20:43 ` law at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: law at redhat dot com @ 2004-06-05 20:22 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From law at redhat dot com  2004-06-05 20:22 -------
Subject: Re:  Convert "If (a >= b) X else if
	(b <= a) Y" into "if (a >= b) X".

On Tue, 2004-06-01 at 05:20, pinskia at gcc dot gnu dot org wrote:
> ------- Additional Comments From pinskia at gcc dot gnu dot org  2004-06-01 11:20 -------
> Confirmed.
> 
> Hmm, looks like jump threading needs a little improvement.
No.  More correctly, we do not canonicalize equivalent expressions.

What we're looking at is canonicalizing commutative operators and
conditionals so that given two SSA_NAMEs as operands, they will
be automatically ordered such that the lowest SSA_NAME_VERSION 
appears first.  Given an SSA_NAME and a constant, the SSA_NAME
should come first.

A prototype of this (of course) fixes this problem.  I'm still
evaluating that prototype.

jeff



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15757


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug tree-optimization/15757] Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X".
  2004-06-01  8:17 [Bug tree-optimization/15757] New: Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X" kazu at cs dot umass dot edu
  2004-06-01 11:20 ` [Bug tree-optimization/15757] " pinskia at gcc dot gnu dot org
  2004-06-05 20:22 ` law at redhat dot com
@ 2004-06-14 20:43 ` law at gcc dot gnu dot org
  2004-06-16  5:08 ` law at gcc dot gnu dot org
  2004-07-10  0:45 ` pinskia at gcc dot gnu dot org
  4 siblings, 0 replies; 6+ messages in thread
From: law at gcc dot gnu dot org @ 2004-06-14 20:43 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From law at gcc dot gnu dot org  2004-06-14 20:43 -------
*** Bug 15758 has been marked as a duplicate of this bug. ***

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15757


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug tree-optimization/15757] Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X".
  2004-06-01  8:17 [Bug tree-optimization/15757] New: Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X" kazu at cs dot umass dot edu
                   ` (2 preceding siblings ...)
  2004-06-14 20:43 ` law at gcc dot gnu dot org
@ 2004-06-16  5:08 ` law at gcc dot gnu dot org
  2004-07-10  0:45 ` pinskia at gcc dot gnu dot org
  4 siblings, 0 replies; 6+ messages in thread
From: law at gcc dot gnu dot org @ 2004-06-16  5:08 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From law at gcc dot gnu dot org  2004-06-16 05:08 -------
Should be fixed with today's checkin to canonicalize expressions in
get_expr_operands.

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15757


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug tree-optimization/15757] Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X".
  2004-06-01  8:17 [Bug tree-optimization/15757] New: Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X" kazu at cs dot umass dot edu
                   ` (3 preceding siblings ...)
  2004-06-16  5:08 ` law at gcc dot gnu dot org
@ 2004-07-10  0:45 ` pinskia at gcc dot gnu dot org
  4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-07-10  0:45 UTC (permalink / raw)
  To: gcc-bugs



-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |3.5.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15757


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2004-07-10  0:45 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-06-01  8:17 [Bug tree-optimization/15757] New: Convert "If (a >= b) X else if (b <= a) Y" into "if (a >= b) X" kazu at cs dot umass dot edu
2004-06-01 11:20 ` [Bug tree-optimization/15757] " pinskia at gcc dot gnu dot org
2004-06-05 20:22 ` law at redhat dot com
2004-06-14 20:43 ` law at gcc dot gnu dot org
2004-06-16  5:08 ` law at gcc dot gnu dot org
2004-07-10  0:45 ` pinskia 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).