diff options
author | Andre Vieira <andre.simoesdiasvieira@arm.com> | 2023-04-11 10:07:43 +0100 |
---|---|---|
committer | Andre Vieira <andre.simoesdiasvieira@arm.com> | 2023-04-11 10:07:43 +0100 |
commit | 58c8c1b383bc3c286d6527fc6e8fb62463f9a877 (patch) | |
tree | 7aab8f1d83005d6f753fc6835882f2b072abf794 /gcc | |
parent | a213e2c965382c24fe391ee5798effeba8da0fdf (diff) | |
download | gcc-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.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-simd-clone-17.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-simd-clone-18.c | 2 | ||||
-rw-r--r-- | gcc/tree-if-conv.cc | 5 |
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" |