]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
match: Fix some incorrect vector fp comparison combines [PR 126455]
authorAndrea Pinski <andrew.pinski@oss.qualcomm.com>
Wed, 29 Jul 2026 23:44:17 +0000 (16:44 -0700)
committerAndrea Pinski <andrew.pinski@oss.qualcomm.com>
Thu, 30 Jul 2026 03:52:44 +0000 (20:52 -0700)
This fixes r16-2134-gf33cc3af8fd9c4 which extended some patterns to
support vector types but these patterns are only valid for integral
types and the check that was used was VECTOR_TYPE.
This fixes it by using VECTOR_INTEGRAL_TYPE || VECTOR_BOOLCEAN_TYPE
which prevent the, for vector floating point types.

Pushed as obvious after bootstrap/test on x86_64-linux-gnu.

PR tree-optimization/126455

gcc/ChangeLog:

* match.pd: Fix up patterns dealing with bitwise AND/OR/XOR
and comparisons for floating point types.

Signed-off-by: Andrea Pinski <andrew.pinski@oss.qualcomm.com>
gcc/match.pd

index 668fbe70d24d8c28bb5f56d634d18f450b6a5aa9..4b2a360966c9742b235283e97e0a21e8c7178935 100644 (file)
@@ -3485,7 +3485,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
    (if ((TREE_CODE (@1) == INTEGER_CST
         && TREE_CODE (@2) == INTEGER_CST)
        || ((INTEGRAL_TYPE_P (TREE_TYPE (@1))
-   || (VECTOR_TYPE_P (TREE_TYPE (@1))
+   || ((VECTOR_INTEGER_TYPE_P (TREE_TYPE (@1))
+       || VECTOR_BOOLEAN_TYPE_P (TREE_TYPE (@1)))
    && expand_vec_cmp_expr_p (TREE_TYPE (@1), type, code2))
             || POINTER_TYPE_P (TREE_TYPE (@1)))
            && bitwise_equal_p (@1, @2)))
@@ -3576,7 +3577,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
   (if ((TREE_CODE (@1) == INTEGER_CST
        && TREE_CODE (@2) == INTEGER_CST)
        || ((INTEGRAL_TYPE_P (TREE_TYPE (@1))
-       || (VECTOR_TYPE_P (TREE_TYPE (@1))
+       || ((VECTOR_INTEGER_TYPE_P (TREE_TYPE (@1))
+           || VECTOR_BOOLEAN_TYPE_P (TREE_TYPE (@1)))
        && expand_vec_cmp_expr_p (TREE_TYPE (@1), type, code2))
            || POINTER_TYPE_P (TREE_TYPE (@1)))
           && operand_equal_p (@1, @2)))
@@ -3766,7 +3768,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
    (op:c (cmp1:c @0 @1) (cmp2 @0 @1))
    (if (INTEGRAL_TYPE_P (TREE_TYPE (@0))
       || POINTER_TYPE_P (TREE_TYPE (@0))
-      || (VECTOR_TYPE_P (TREE_TYPE (@1))
+      || ((VECTOR_INTEGER_TYPE_P (TREE_TYPE (@1))
+          || VECTOR_BOOLEAN_TYPE_P (TREE_TYPE (@1)))
       && expand_vec_cmp_expr_p (TREE_TYPE (@0), type, rcmp)))
     (rcmp @0 @1)))))
 
@@ -3778,7 +3781,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
   (eq:c (cmp1:c @0 @1) (cmp2 @0 @1))
   (if (INTEGRAL_TYPE_P (TREE_TYPE (@0))
                || POINTER_TYPE_P (TREE_TYPE (@0))
-      || (VECTOR_TYPE_P (TREE_TYPE (@0))
+      || ((VECTOR_INTEGER_TYPE_P (TREE_TYPE (@1))
+          || VECTOR_BOOLEAN_TYPE_P (TREE_TYPE (@1)))
       && expand_vec_cmp_expr_p (TREE_TYPE (@0), type,  rcmp)))
     (rcmp @0 @1))))