On Tue, Oct 15, 2024 at 1:31 AM <pan2...@intel.com> wrote: > > From: Pan Li <pan2...@intel.com> > > This patch would like to fix the warning as below: > > /home/slyfox/dev/git/gcc/gcc/match.pd:3424:3 warning: duplicate pattern > (cond^ (ne (imagpart (IFN_SUB_OVERFLOW:c@2 @0 @1)) integer_zerop) > ^ > /home/slyfox/dev/git/gcc/gcc/match.pd:3397:3 warning: previous pattern > defined here > (cond^ (ne (imagpart (IFN_SUB_OVERFLOW@2 @0 @1)) integer_zerop) > > The second has a optional nop_convert which allows for the first one, > thus remove the dup one.
OK. > PR middle-end/117141 > > The below test suites are passed for this patch. > * The rv64gcv fully regression test. > * The x86 bootstrap test. > * The x86 fully regression test. > > gcc/ChangeLog: > > * match.pd: Remove the dup pattern for signed SAT_SUB. > > Signed-off-by: Pan Li <pan2...@intel.com> > --- > gcc/match.pd | 15 ++------------- > 1 file changed, 2 insertions(+), 13 deletions(-) > > diff --git a/gcc/match.pd b/gcc/match.pd > index ee53c25cef9..22fad1a8757 100644 > --- a/gcc/match.pd > +++ b/gcc/match.pd > @@ -3395,7 +3395,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > The T and UT are type pair like T=int8_t, UT=uint8_t. */ > (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))) > + (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) > @@ -3417,18 +3418,6 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > @2) > (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type)))) > > -/* Signed saturation sub, case 5: > - Z = .SUB_OVERFLOW (X, Y) > - SAT_S_SUB = IMAGPART_EXPR (Z) != 0 ? (-(T)(X < 0) ^ MAX) : minus; */ > -(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)))) > - > /* Unsigned saturation truncate, case 1, sizeof (WT) > sizeof (NT). > SAT_U_TRUNC = (NT)x | (NT)(-(X > (WT)(NT)(-1))). */ > (match (unsigned_integer_sat_trunc @0) > -- > 2.43.0 >