https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117141
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Status|UNCONFIRMED |NEW Last reconfirmed| |2024-10-14 CC| |pinskia at gcc dot gnu.org --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (match (signed_integer_sat_sub @0 @1) (cond^ (ne (imagpart (IFN_SUB_OVERFLOW@2 @0 @1)) integer_zerop) (bit_xor:c (negate (convert (lt @0 integer_zerop))) max_value) (realpart @2)) (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type) && types_match (type, @0, @1)))) (match (signed_integer_sat_sub @0 @1) (cond^ (ne (imagpart (IFN_SUB_OVERFLOW:c@2 @0 @1)) integer_zerop) (bit_xor:c (nop_convert? (negate (nop_convert? (convert (lt @0 integer_zerop))))) max_value) (realpart @2)) (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type) && types_match (type, @0, @1)))) The difference is the second has a optional nop_convert which allows for the first one. I think the first one can be safely removed as the second one will match it too. So confirmed.