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.