aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndre Vieira <andre.simoesdiasvieira@arm.com>2023-04-11 10:07:43 +0100
committerAndre Vieira <andre.simoesdiasvieira@arm.com>2023-04-11 10:07:43 +0100
commit58c8c1b383bc3c286d6527fc6e8fb62463f9a877 (patch)
tree7aab8f1d83005d6f753fc6835882f2b072abf794 /gcc
parenta213e2c965382c24fe391ee5798effeba8da0fdf (diff)
downloadgcc-58c8c1b383bc3c286d6527fc6e8fb62463f9a877.zip
gcc-58c8c1b383bc3c286d6527fc6e8fb62463f9a877.tar.gz
gcc-58c8c1b383bc3c286d6527fc6e8fb62463f9a877.tar.bz2
if-conv: Restore MASK_CALL conversion [PR108888]
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-simd-clone-16.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-simd-clone-17.c2
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-simd-clone-18.c2
-rw-r--r--gcc/tree-if-conv.cc5
4 files changed, 6 insertions, 5 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16.c
index 3ff1cfe..125ff4f 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16.c
@@ -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)
{
diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17.c
index 803e0f2..3430d6f 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17.c
@@ -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)
{
diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18.c
index 81b478c..5324aee 100644
--- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18.c
+++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18.c
@@ -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)
{
diff --git a/gcc/tree-if-conv.cc b/gcc/tree-if-conv.cc
index 3494dcc..7b21b16 100644
--- a/gcc/tree-if-conv.cc
+++ b/gcc/tree-if-conv.cc
@@ -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"