diff --git a/gcc/match.pd b/gcc/match.pd index 362bcac291fd2d51f9922ec8bb523629fc0d27f4..0455dfa69937b212547832625b23a204cef7de2a 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -3360,6 +3360,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) } (if (wi::eq_p (c2, max) && wi::eq_p (c0_add_1, max)))))) +/* The boundary condition for case 9: IMM = 1 (branch with le): + SAT_U_SUB = IMM >= Y ? (IMM - Y) : 0. */ +(match (unsigned_integer_sat_sub @0 @1) + (cond^ (le @1 integer_onep@0) (bit_xor @1 integer_onep@0) integer_zerop) + (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type) + && types_match (type, @1)))) + /* Unsigned saturation sub with op_1 imm, case 10: SAT_U_SUB = X > IMM ? (X - IMM) : 0. = X >= IMM ? (X - IMM) : 0. */