]> git.ipfire.org Git - thirdparty/gcc.git/commit
vect: inbranch SIMD clones
authorAndrew Stubbs <ams@codesourcery.com>
Thu, 28 Jul 2022 15:07:22 +0000 (16:07 +0100)
committerAndrew Stubbs <ams@codesourcery.com>
Thu, 23 Feb 2023 16:20:11 +0000 (16:20 +0000)
commit286f2cb24c214d8c9aa7d2592a499d9963f4952c
treea4086d740012519b60d6cc0d8fd373682cdacfcf
parent3ad47717bf7163ed1628c829e06166a74c1e9cd3
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.

(cherry picked from commit 3da77f217c8b2089ecba3eb201e727c3fcdcd19d)
27 files changed:
gcc/ChangeLog.omp
gcc/internal-fn.cc
gcc/internal-fn.def
gcc/internal-fn.h
gcc/omp-simd-clone.cc
gcc/testsuite/ChangeLog.omp
gcc/testsuite/gcc.dg/vect/vect-simd-clone-16.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-16b.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-16d.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-16e.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-16f.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-17.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-17b.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-17c.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-17d.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-17e.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-17f.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-18.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-18b.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-18c.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-18d.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-18e.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-simd-clone-18f.c [new file with mode: 0644]
gcc/tree-if-conv.cc
gcc/tree-vect-loop.cc
gcc/tree-vect-stmts.cc