if-conv: Restore MASK_CALL conversion [PR108888]
authorAndre Vieira <andre.simoesdiasvieira@arm.com>
Tue, 11 Apr 2023 09:07:43 +0000 (10:07 +0100)
committerAndre Vieira <andre.simoesdiasvieira@arm.com>
Tue, 11 Apr 2023 09:07:43 +0000 (10:07 +0100)
The original patch to fix this PR broke the if-conversion of calls into
IFN_MASK_CALL.  This patch restores that original behaviour and makes sure the
tests added earlier specifically test inbranch SIMD clones.

gcc/ChangeLog:

PR tree-optimization/108888
* tree-if-conv.cc (predicate_statements): Fix gimple call check.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/vect-simd-clone-16.c: Make simd clone inbranch only.
* gcc.dg/vect/vect-simd-clone-17.c: Likewise.
* gcc.dg/vect/vect-simd-clone-18.c: Likewise.

gcc/testsuite/gcc.dg/vect/vect-simd-clone-16.c
gcc/testsuite/gcc.dg/vect/vect-simd-clone-17.c
gcc/testsuite/gcc.dg/vect/vect-simd-clone-18.c
gcc/tree-if-conv.cc

index 3ff1cfee05951609d8ca93291d5d7c47cb07ec0d..125ff4f6c8d7df5e289187e523d32e0d12db9769 100644 (file)
@@ -9,7 +9,7 @@
 #endif
 
 /* A simple function that will be cloned.  */
-#pragma omp declare simd
+#pragma omp declare simd inbranch
 TYPE __attribute__((noinline))
 foo (TYPE a)
 {
index 803e0f25d45c1069633486c7b7d805638db83482..3430d6f5aa4f3ae3ed8bdfda80ef99d5517f15c6 100644 (file)
@@ -9,7 +9,7 @@
 #endif
 
 /* A simple function that will be cloned.  */
-#pragma omp declare simd uniform(b)
+#pragma omp declare simd inbranch uniform(b)
 TYPE __attribute__((noinline))
 foo (TYPE a, TYPE b)
 {
index 81b478c0206b6c74d59de8c51fd728428a9d8098..5324aee29c3173826057288d1604b5fe6de83c1e 100644 (file)
@@ -9,7 +9,7 @@
 #endif
 
 /* A simple function that will be cloned.  */
-#pragma omp declare simd uniform(b)
+#pragma omp declare simd inbranch uniform(b)
 TYPE __attribute__((noinline))
 foo (TYPE b, TYPE a)
 {
index 3494dccfe624a2cfb453db55a2de0616a134544a..7b21b16ff484f01caa7eefca0d74c54b8abba244 100644 (file)
@@ -2641,8 +2641,9 @@ predicate_statements (loop_p loop)
              gimple_assign_set_rhs1 (stmt, ifc_temp_var (type, rhs, &gsi));
              update_stmt (stmt);
            }
-         else if (gimple_plf (stmt, GF_PLF_2)
-                  && is_gimple_call (stmt))
+
+         if (gimple_plf (gsi_stmt (gsi), GF_PLF_2)
+             && is_gimple_call (gsi_stmt (gsi)))
            {
              /* Convert functions that have a SIMD clone to IFN_MASK_CALL.
                 This will cause the vectorizer to match the "in branch"