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.