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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |13.3
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2023-10-04
             Status|UNCONFIRMED                 |NEW

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Confirmed. 


EVRP removes the second __bultin_signbit incorrectly.
Most likely due to:
```

Folding statement: if (_3 != 0)
 Registering value_relation (l_11(D) == r_12(D)) on (2->3)
```

which then we get:
```
Predicate evaluates to: DON'T KNOW
Matching expression match.pd:2679, gimple-match-2.cc:35
Matching expression match.pd:2682, gimple-match-1.cc:66
Matching expression match.pd:2689, gimple-match-2.cc:96
Not folded
Folding statement: _20 = __builtin_signbit (r_12(D));
Queued stmt for removal.  Folds to: 0
Folding statement: if (_20 != 0)
gimple_simplified to if (0 != 0)
gimple_simplified to if (0 != 0)
Folded into: if (0 != 0)
```

For -O1 DOM does:
```
1>>> STMT 1 = _8 le_expr 0
1>>> STMT 1 = _8 ge_expr 0
1>>> STMT 1 = _8 eq_expr 0
1>>> STMT 0 = _8 ne_expr 0
0>>> COPY _8 = 0
Optimizing statement _10 = __builtin_signbit (r_6(D));
  Replaced 'r_6(D)' with constant '0.0'
gimple_simplified to _10 = 0;
  Folded to: _10 = 0;
LKUP STMT _10 = 0
==== ASGN _10 = 0
Optimizing statement if (_10 != 0)
  Replaced '_10' with constant '0'
gimple_simplified to if (0 != 0)
  Folded to: if (0 != 0)
LKUP STMT 0 ne_expr 0
<<<< STMT 0 = _8 ne_expr 0
<<<< STMT 1 = _8 eq_expr 0
<<<< STMT 1 = _8 ge_expr 0
<<<< STMT 1 = _8 le_expr 0
<<<< COPY _8 = 0
```
Which is wrong too.

Reply via email to