llvm-project/clang/utils
Simon Tatham bd0f271c9e [ARM][MVE] Add intrinsics for immediate shifts. (reland)
This adds the family of `vshlq_n` and `vshrq_n` ACLE intrinsics, which
shift every lane of a vector left or right by a compile-time
immediate. They mostly work by expanding to the IR `shl`, `lshr` and
`ashr` operations, with their second operand being a vector splat of
the immediate.

There's a fiddly special case, though. ACLE specifies that the
immediate in `vshrq_n` can take values up to //and including// the bit
size of the vector lane. But LLVM IR thinks that shifting right by the
full size of the lane is UB, and feels free to replace the `lshr` with
an `undef` half way through the optimization pipeline. Hence, to keep
this legal in source code, I have to detect it at codegen time.
Logical (unsigned) right shifts by the element size are handled by
simply emitting the zero vector; arithmetic ones are converted into a
shift of one bit less, which will always give the same output.

In order to do that check, I also had to enhance the tablegen
MveEmitter so that it can cope with converting a builtin function's
operand into a bare integer to pass to a code-generating subfunction.
Previously the only bare integers it knew how to handle were flags
generated from within `arm_mve.td`.

Reviewers: dmgreen, miyuki, MarkMurrayARM, ostannard

Reviewed By: dmgreen, MarkMurrayARM

Subscribers: echristo, hokein, rdhindsa, kristof.beyls, hiraditya, cfe-commits, llvm-commits

Tags: #clang, #llvm

Differential Revision: https://reviews.llvm.org/D71065
2019-12-11 10:10:09 +00:00
..
ABITest Portable Python script across Python version 2018-12-18 16:07:37 +00:00
CIndex Portable Python script across Python version 2018-12-18 16:07:37 +00:00
ClangVisualizers Improve MSVC visualizations so the parser shows where we are in the code 2019-08-06 13:29:35 +00:00
TableGen [ARM][MVE] Add intrinsics for immediate shifts. (reland) 2019-12-11 10:10:09 +00:00
TestUtils Portable Python script across Python version 2018-12-18 16:07:37 +00:00
VtableTest
analyzer [analyzer] exploded-graph-rewriter: Rename Environment to Expressions. 2019-10-18 20:15:41 +00:00
check_cfc Portable Python script across Python version 2019-01-03 14:27:05 +00:00
hmaptool [clang] [cmake] Add distribution install targets for remaining components 2019-10-04 05:43:20 +00:00
perf-training Revert "NFC: utils/perf-training: Python 3 compatibility for lit.cfg" 2019-07-24 22:42:50 +00:00
valgrind
CaptureCmd
ClangDataFormat.py
CmpDriver
FindSpecRefs
FuzzTest
bash-autocomplete.sh [bash-completion] Fix tab separation on macOS 2018-05-24 16:25:40 +00:00
builtin-defines.c This reverts commit 632a36bfcfc8273c1861f04ff6758d863c47c784. 2019-07-13 06:27:35 +00:00
clangdiag.py Portable Python script across Python version 2018-12-18 16:07:37 +00:00
convert_arm_neon.py Recommit ARM-NEON: make type modifiers orthogonal and allow multiple modifiers. 2019-11-26 09:21:47 +00:00
creduce-clang-crash.py Handle two corner cases in creduce-clang-crash.py 2019-12-05 16:24:24 -08:00
find-unused-diagnostics.sh Unused diagnostics can occur in tblgen. 2018-01-25 15:57:22 +00:00
make-ast-dump-check.sh Add script to update OpenMP -ast-dump test expectations, and use it to 2019-06-02 04:00:38 +00:00
modfuzz.py Portable Python script across Python version 2018-12-18 16:07:37 +00:00
token-delta.py Portable Python script across Python version 2018-12-18 16:07:37 +00:00