https://gcc.gnu.org/g:f54d42e00007e7a558b273d87f95b3e5b1938f5a

commit r15-4293-gf54d42e00007e7a558b273d87f95b3e5b1938f5a
Author: Richard Biener <rguent...@suse.de>
Date:   Sat Oct 12 14:51:37 2024 +0200

    tree-optimization/117104 - add missed guards to max(a,b) != a simplification
    
    For vector types we have to make sure the comparison result is a vector
    type and the resulting compare operation is supported.  As the resulting
    compare is never an equality compare I didn't bother to check for the
    cbranch case.
    
            PR tree-optimization/117104
            * match.pd ((cmp:c (minmax:c @0 @1) @0) -> (out @0 @1)): Properly
            guard the vector case.
    
            * gcc.dg/pr117104.c: New testcase.

Diff:
---
 gcc/match.pd                    |  6 +++++-
 gcc/testsuite/gcc.dg/pr117104.c | 12 ++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/gcc/match.pd b/gcc/match.pd
index f2b5f3af9ef6..eff1ace87f54 100644
--- a/gcc/match.pd
+++ b/gcc/match.pd
@@ -4688,7 +4688,11 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
      out    (le  gt  gt  le  ge  lt  lt  ge )
  (simplify
   (cmp:c (minmax:c @0 @1) @0)
-  (if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0)))
+  (if (ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))
+       && (!VECTOR_TYPE_P (TREE_TYPE (@0))
+          || (VECTOR_TYPE_P (type)
+              && (!expand_vec_cmp_expr_p (TREE_TYPE (@0), type, cmp)
+                  || expand_vec_cmp_expr_p (TREE_TYPE (@0), type, out)))))
    (out @0 @1))))
 /* MIN (X, 5) == 0 -> X == 0
    MIN (X, 5) == 7 -> false  */
diff --git a/gcc/testsuite/gcc.dg/pr117104.c b/gcc/testsuite/gcc.dg/pr117104.c
new file mode 100644
index 000000000000..9aa5734f7927
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr117104.c
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-vect-cost-model" } */
+/* { dg-additional-options "-mavx" { target { x86_64-*-* i?86-*-* } } } */
+
+void g();
+void f(long *a)
+{
+  long b0 = a[0] > 0 ? a[0] : 0;
+  long b1 = a[1] > 0 ? a[1] : 0;
+  if ((b0|b1) == 0)
+    g();
+}

Reply via email to