diff options
author | Andrew Stubbs <ams@codesourcery.com> | 2022-07-28 16:07:22 +0100 |
---|---|---|
committer | Andrew Stubbs <ams@codesourcery.com> | 2023-02-22 13:57:11 +0000 |
commit | 3da77f217c8b2089ecba3eb201e727c3fcdcd19d (patch) | |
tree | 2f3fb8460f25af2a5bf8a8bc9e8fe19f8b5b41f1 /gcc/internal-fn.def | |
parent | c878c6586dee353e685364910e02ad1a611d4634 (diff) | |
download | gcc-3da77f217c8b2089ecba3eb201e727c3fcdcd19d.zip gcc-3da77f217c8b2089ecba3eb201e727c3fcdcd19d.tar.gz gcc-3da77f217c8b2089ecba3eb201e727c3fcdcd19d.tar.bz2 |
vect: inbranch SIMD clones
There has been support for generating "inbranch" SIMD clones for a long time,
but nothing actually uses them (as far as I can see).
This patch add supports for a sub-set of possible cases (those using
mask_mode == VOIDmode). The other cases fail to vectorize, just as before,
so there should be no regressions.
The sub-set of support should cover all cases needed by amdgcn, at present.
gcc/ChangeLog:
* internal-fn.cc (expand_MASK_CALL): New.
* internal-fn.def (MASK_CALL): New.
* internal-fn.h (expand_MASK_CALL): New prototype.
* omp-simd-clone.cc (simd_clone_adjust_argument_types): Set vector_type
for mask arguments also.
* tree-if-conv.cc: Include cgraph.h.
(if_convertible_stmt_p): Do if conversions for calls to SIMD calls.
(predicate_statements): Convert functions to IFN_MASK_CALL.
* tree-vect-loop.cc (vect_get_datarefs_in_loop): Recognise
IFN_MASK_CALL as a SIMD function call.
* tree-vect-stmts.cc (vectorizable_simd_clone_call): Handle
IFN_MASK_CALL as an inbranch SIMD function call.
Generate the mask vector arguments.
gcc/testsuite/ChangeLog:
* gcc.dg/vect/vect-simd-clone-16.c: New test.
* gcc.dg/vect/vect-simd-clone-16b.c: New test.
* gcc.dg/vect/vect-simd-clone-16c.c: New test.
* gcc.dg/vect/vect-simd-clone-16d.c: New test.
* gcc.dg/vect/vect-simd-clone-16e.c: New test.
* gcc.dg/vect/vect-simd-clone-16f.c: New test.
* gcc.dg/vect/vect-simd-clone-17.c: New test.
* gcc.dg/vect/vect-simd-clone-17b.c: New test.
* gcc.dg/vect/vect-simd-clone-17c.c: New test.
* gcc.dg/vect/vect-simd-clone-17d.c: New test.
* gcc.dg/vect/vect-simd-clone-17e.c: New test.
* gcc.dg/vect/vect-simd-clone-17f.c: New test.
* gcc.dg/vect/vect-simd-clone-18.c: New test.
* gcc.dg/vect/vect-simd-clone-18b.c: New test.
* gcc.dg/vect/vect-simd-clone-18c.c: New test.
* gcc.dg/vect/vect-simd-clone-18d.c: New test.
* gcc.dg/vect/vect-simd-clone-18e.c: New test.
* gcc.dg/vect/vect-simd-clone-18f.c: New test.
Diffstat (limited to 'gcc/internal-fn.def')
-rw-r--r-- | gcc/internal-fn.def | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/internal-fn.def b/gcc/internal-fn.def index 22b4a2d..7fe742c 100644 --- a/gcc/internal-fn.def +++ b/gcc/internal-fn.def @@ -461,6 +461,9 @@ DEF_INTERNAL_FN (SPACESHIP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) DEF_INTERNAL_FN (ASSUME, ECF_CONST | ECF_LEAF | ECF_NOTHROW | ECF_LOOPING_CONST_OR_PURE, NULL) +/* For if-conversion of inbranch SIMD clones. */ +DEF_INTERNAL_FN (MASK_CALL, ECF_NOVOPS, NULL) + #undef DEF_INTERNAL_INT_FN #undef DEF_INTERNAL_FLT_FN #undef DEF_INTERNAL_FLT_FLOATN_FN |