https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118804

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
                 CC|                            |pinskia at gcc dot gnu.org
   Last reconfirmed|                            |2025-02-09
             Status|UNCONFIRMED                 |NEW

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Confirmed. A slightly different testcase that should be optimized for the same
reason (might be easier to optimize as sometimes `x == CST && y == CST` turn
into `(x == CST) & (y == CST)` removing the short cut):
```

bool f(int , int );

bool bar (int x, int y) {
    if (x == y)
      return true;
    if (x == 999)
      if (y == 999)
        return true;
    return f(x,y);
}
```

=========== BB 3 ============
Imports: x_3(D)  
Exports: x_3(D)  
x_3(D)  [irange] int VARYING
Relational : (x_3(D) != y_4(D))
    <bb 3> [local count: 848578158]:
    if (x_3(D) == 999)
      goto <bb 4>; [51.12%]
    else
      goto <bb 5>; [48.88%]

3->4  (T) x_3(D) :      [irange] int [999, 999]
3->5  (F) x_3(D) :      [irange] int [-INF, 998][1000, +INF]

Notice due to the relational one we should also register 3->4 for y_4 [-INF,
998][1000, +INF]  and 3->5 for y_5: [999, 999].

Which means importing for BB 4:
Imports: y_4(D)  
Exports: y_4(D)  
y_4(D)  [irange] int VARYING
    <bb 4> [local count: 433793157]:
    if (y_4(D) == 999)
      goto <bb 6>; [20.97%]
    else
      goto <bb 5>; [79.03%]

The above conditional will be optimized away.


Now for the original case (on specific targets) is similar to:
```
bool bar2 (int x, int y, int z) {
  bool t = x != y;
  bool t1 = x == z & y == z;
  return t & t1;
}
```

Which can be patterned matched in match.
Like:
```
(simplify
 (bit_and:c (ne @0 @1) (bit_and:c (eq:c @0 @2) (eq:c @1 @2)))
 { constant_boolean_node (false, type); })
```
And I think that would solve the issue there.

Reply via email to