https://gcc.gnu.org/g:1c07f7a1b45b3d6f46cb25f3bf068d94fe4131e8

commit r15-5968-g1c07f7a1b45b3d6f46cb25f3bf068d94fe4131e8
Author: Richard Biener <rguent...@suse.de>
Date:   Thu Dec 5 13:24:27 2024 +0100

    Remove some duplicates reported by genmatch
    
    genmatch currently has a difficulty to decide whether a duplicate
    structural match is really duplicate as uses of captures within
    predicates or in C code can be order dependent.  For example
    a reported duplicate results in
    
     {
       tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p0, _q20, _q21 }
       if (gimple_simplify_112 (res_op, seq, valueize, type, captures))
         return true;
     }
     {
       tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p0, _q21, _q20 };
       if (gimple_simplify_112 (res_op, seq, valueize, type, captures))
         return true;
     }
    
    where the difference is only in _q20 and _q21 being swapped but
    that resulting in a call to bitwise_inverted_equal_p (_p1, X)
    with X once _q20 and once _q21.  That is, we treat bare
    captures as equal for reporting duplicates.
    
    Due to bitwise_inverted_equal_p there are meanwhile a _lot_ of
    duplicates reported that are not actual duplicates.
    
    The following removes some that are though, as the operands are
    only passed to types_match.
    
            * match.pd (.SAT_ADD patterns using IFN_ADD_OVERFLOW): Remove :c 
that
            only causes duplicate patterns.

Diff:
---
 gcc/match.pd | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/gcc/match.pd b/gcc/match.pd
index 650c3f4cc1df..d3aabae59ac3 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -3146,30 +3146,30 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
  (match (unsigned_integer_sat_add @0 @1)
   /* SUM = ADD_OVERFLOW (X, Y)
      SAT_U_ADD = REALPART (SUM) | -IMAGPART (SUM)   */
-  (bit_ior:c (realpart (IFN_ADD_OVERFLOW:c@2 @0 @1)) (negate (imagpart @2)))
+  (bit_ior:c (realpart (IFN_ADD_OVERFLOW@2 @0 @1)) (negate (imagpart @2)))
   (if (types_match (type, @0, @1))))
  (match (unsigned_integer_sat_add @0 @1)
   /* SUM = ADD_OVERFLOW (X, Y)
      SAT_U_ADD = REALPART (SUM) | -(IMAGPART (SUM) != 0)   */
-  (bit_ior:c (realpart (IFN_ADD_OVERFLOW:c@2 @0 @1))
+  (bit_ior:c (realpart (IFN_ADD_OVERFLOW@2 @0 @1))
             (negate (convert (ne (imagpart @2) integer_zerop))))
   (if (types_match (type, @0, @1))))
  (match (unsigned_integer_sat_add @0 @1)
   /* SUM = ADD_OVERFLOW (X, Y)
      SAT_U_ADD = IMAGPART (SUM) == 0 ? REALPART (SUM) : -1   */
-  (cond^ (eq (imagpart (IFN_ADD_OVERFLOW:c@2 @0 @1)) integer_zerop)
+  (cond^ (eq (imagpart (IFN_ADD_OVERFLOW@2 @0 @1)) integer_zerop)
         (realpart @2) integer_minus_onep)
   (if (types_match (type, @0, @1))))
  (match (unsigned_integer_sat_add @0 @1)
   /* SUM = ADD_OVERFLOW (X, Y)
      SAT_U_ADD = IMAGPART (SUM) != 0 ? -1 : REALPART (SUM)  */
-  (cond^ (ne (imagpart (IFN_ADD_OVERFLOW:c@2 @0 @1)) integer_zerop)
+  (cond^ (ne (imagpart (IFN_ADD_OVERFLOW@2 @0 @1)) integer_zerop)
         integer_minus_onep (realpart @2))
   (if (types_match (type, @0, @1))))
  (match (unsigned_integer_sat_add @0 @1)
   /* SUM = ADD_OVERFLOW (X, IMM)
      SAT_U_ADD = IMAGPART (SUM) != 0 ? -1 : REALPART (SUM)  */
-  (cond^ (ne (imagpart (IFN_ADD_OVERFLOW:c@2 @0 INTEGER_CST@1)) integer_zerop)
+  (cond^ (ne (imagpart (IFN_ADD_OVERFLOW@2 @0 INTEGER_CST@1)) integer_zerop)
         integer_minus_onep (realpart @2))
   (if (types_match (type, @0) && int_fits_type_p (@1, type)))))

Reply via email to