[ARM,MVE] Add the `vsbciq` intrinsics.
authorSimon Tatham <simon.tatham@arm.com>
Tue, 3 Mar 2020 17:37:05 +0000 (17:37 +0000)
committerSimon Tatham <simon.tatham@arm.com>
Wed, 4 Mar 2020 08:49:27 +0000 (08:49 +0000)
commit810127f6ab5d5d7e7d6b8c3ae0b96f2027437ca8
treef0c2b4dddde9a9c75b88e39b0ee240ac34f98750
parent9284abd0040afecfd619dbcf1b244a8b533291c9
[ARM,MVE] Add the `vsbciq` intrinsics.

Summary:
These are exactly parallel to the existing `vadciq` intrinsics, which
we implemented last year as part of the original MVE intrinsics
framework setup.

Just like VADC/VADCI, the MVE VSBC/VSBCI instructions deliver two
outputs, both of which the intrinsic exposes: a modified vector
register and a carry flag. So they have to be instruction-selected in
C++ rather than Tablegen. However, in this case, that's trivial: the
same C++ isel routine we already have for VADC works unchanged, and
all we have to do is to pass it a different instruction id.

Reviewers: MarkMurrayARM, dmgreen, miyuki, ostannard

Reviewed By: miyuki

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

Tags: #clang, #llvm

Differential Revision: https://reviews.llvm.org/D75444
clang/include/clang/Basic/arm_mve.td
clang/test/CodeGen/arm-mve-intrinsics/vadc.c
llvm/include/llvm/IR/IntrinsicsARM.td
llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp
llvm/test/CodeGen/Thumb2/mve-intrinsics/vadc.ll