From 74c492ea1299d1d6a35d135f4ddd3fe0ea072e40 Mon Sep 17 00:00:00 2001 From: Andre Vieira Date: Tue, 11 Apr 2023 10:07:43 +0100 Subject: [PATCH] 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. (cherry picked from commit 58c8c1b383bc3c286d6527fc6e8fb62463f9a877) --- gcc/ChangeLog.omp | 8 ++++++++ gcc/testsuite/ChangeLog.omp | 10 ++++++++++ gcc/testsuite/gcc.dg/vect/vect-simd-clone-16.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-simd-clone-17.c | 2 +- gcc/testsuite/gcc.dg/vect/vect-simd-clone-18.c | 2 +- gcc/tree-if-conv.cc | 5 +++-- 6 files changed, 24 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp index 9b57f00db7ce..566643d62fef 100644 --- a/gcc/ChangeLog.omp +++ b/gcc/ChangeLog.omp @@ -1,3 +1,11 @@ +2023-04-13 Andrew Stubbs + + Backport from mainline: + Andre Vieira + + PR tree-optimization/108888 + * tree-if-conv.cc (predicate_statements): Fix gimple call check. + 2023-04-03 Andrew Stubbs * config/gcn/gcn-valu.md (one_cmpl2): New. diff --git a/gcc/testsuite/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp index 612ff287c558..b7611bd6a13b 100644 --- a/gcc/testsuite/ChangeLog.omp +++ b/gcc/testsuite/ChangeLog.omp @@ -1,3 +1,13 @@ +2023-04-13 Andrew Stubbs + + Backport from mainline: + Andre Vieira + + PR tree-optimization/108888 + * 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. + 2023-03-27 Frederik Harwath * c-c++-common/gomp/loop-transforms/unroll-inner-1.c: New test. 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 ce9a6dad1b78..fbabd6005c24 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 756225e4306f..a9d10807a77c 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 febf9fdf85ee..5ad92e3ad866 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 16da1dc8df28..337a298e8598 100644 --- a/gcc/tree-if-conv.cc +++ b/gcc/tree-if-conv.cc @@ -2646,8 +2646,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" -- 2.47.2