diff options
author | Simon Tatham <simon.tatham@arm.com> | 2019-12-11 10:04:14 +0000 |
---|---|---|
committer | Simon Tatham <simon.tatham@arm.com> | 2019-12-11 10:10:09 +0000 |
commit | bd0f271c9e55ab69b45258e4922869099ed18307 (patch) | |
tree | 540e175232c894ece4ec62d533bdc7f38e9025ae /lldb/packages/Python/lldbsuite/test/python_api | |
parent | c8b74ee264a943aad29fd0864c610ba5504f73a8 (diff) | |
download | bcm5719-llvm-bd0f271c9e55ab69b45258e4922869099ed18307.tar.gz bcm5719-llvm-bd0f271c9e55ab69b45258e4922869099ed18307.zip |
[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
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/python_api')
0 files changed, 0 insertions, 0 deletions