https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113716
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |pinskia at gcc dot gnu.org
Ever confirmed|0 |1
Last reconfirmed| |2024-02-02
Status|UNCONFIRMED |NEW
Keywords| |missed-optimization
Severity|normal |enhancement
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Confirmed.
The IR we get is:
_2 = b_6(D) == 0;
_10 = _2 ? _1 : 0;
_4 = b_6(D) * _10;
I wonder if we could do something like:
(simplify
(mult:c (cond:s @0 @1 integer_zerop@2) @3)
(cond @0 (mult @1 @3) @2))
But that won't solve it.
Maybe something like:
(simplify
(mult:c @0 (cond (eq:c @0 integer_zerop@1) @2 integer_zerop))
@1)
But both of those seems very specific patterns. Maybe something more generic is
needed though.