[ARM][MVE][Intrinsics] Add *_x() variants of my *_m() intrinsics.
authorMark Murray <mark.murray@arm.com>
Wed, 11 Dec 2019 17:53:12 +0000 (17:53 +0000)
committerMark Murray <mark.murray@arm.com>
Fri, 13 Dec 2019 11:51:23 +0000 (11:51 +0000)
commit228c74076d5168a35274b04505f99e373f74f65f
treed6d0176e1c82b894f5cd8b868ee4717e5e21c56e
parent9bace26a690a778ec0f09a9aae9537dfbdb6f42f
[ARM][MVE][Intrinsics] Add *_x() variants of my *_m() intrinsics.

Summary:
Better use of multiclass is used, and this helped find some existing
bugs in the predicated VMULL* intrinsics, which are now fixed.

The refactored VMULL[TB]Q_(INT|POLY)_M() intrinsics were discovered
to have an argument ("inactive") with incorrect type, and this required
a fix that is included in this whole patch. The argument "inactive"
should have been the same width (per vector element) as the return
type of the intrinsic, but was not in the case where the return type
was double the element width of the input types.

To assist in testing the multiclassing , and to thwart further gremlins,
the unit tests are improved in scope.

The *.ll tests are all generated by a small bit of throw-away scripting
from the corresponding *.c tests, and as such the diffs are large and
nasty. Look at the file rather than the diff.

Reviewers: dmgreen, miyuki, ostannard, simon_tatham

Subscribers: kristof.beyls, hiraditya, cfe-commits, llvm-commits

Tags: #clang, #llvm

Differential Revision: https://reviews.llvm.org/D71421
41 files changed:
clang/include/clang/Basic/arm_mve.td
clang/test/CodeGen/arm-mve-intrinsics/vabdq.c
clang/test/CodeGen/arm-mve-intrinsics/vaddq.c
clang/test/CodeGen/arm-mve-intrinsics/vandq.c
clang/test/CodeGen/arm-mve-intrinsics/vbicq.c
clang/test/CodeGen/arm-mve-intrinsics/veorq.c
clang/test/CodeGen/arm-mve-intrinsics/vhaddq.c
clang/test/CodeGen/arm-mve-intrinsics/vmaxnmq.c
clang/test/CodeGen/arm-mve-intrinsics/vmaxq.c
clang/test/CodeGen/arm-mve-intrinsics/vminnmq.c
clang/test/CodeGen/arm-mve-intrinsics/vminq.c
clang/test/CodeGen/arm-mve-intrinsics/vmulhq.c
clang/test/CodeGen/arm-mve-intrinsics/vmullbq.c
clang/test/CodeGen/arm-mve-intrinsics/vmulltq.c
clang/test/CodeGen/arm-mve-intrinsics/vmulq.c
clang/test/CodeGen/arm-mve-intrinsics/vornq.c
clang/test/CodeGen/arm-mve-intrinsics/vorrq.c
clang/test/CodeGen/arm-mve-intrinsics/vrhaddq.c
clang/test/CodeGen/arm-mve-intrinsics/vrmulhq.c
clang/test/CodeGen/arm-mve-intrinsics/vsubq.c [new file with mode: 0644]
llvm/include/llvm/IR/IntrinsicsARM.td
llvm/lib/Target/ARM/ARMInstrMVE.td
llvm/test/CodeGen/Thumb2/mve-intrinsics/vabdq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vaddq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vandq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vbicq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/veorq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vhaddq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vmaxnmq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vmaxq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vminnmq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vminq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vmulhq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vmullbq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vmulltq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vmulq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vornq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vorrq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vrhaddq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vrmulhq.ll
llvm/test/CodeGen/Thumb2/mve-intrinsics/vsubq.ll [new file with mode: 0644]