[AArch64][SME2] Add intrinsics to move multi-vectors to/from ZA.
authorKerry McLaughlin <kerry.mclaughlin@arm.com>
Wed, 25 Jan 2023 10:56:18 +0000 (10:56 +0000)
committerKerry McLaughlin <kerry.mclaughlin@arm.com>
Wed, 25 Jan 2023 11:34:09 +0000 (11:34 +0000)
commit5f3dab090bc7849ed6b91647d0e55174f1b7ad19
tree34e9ea2e69c776ab09ace0f45a41c54a25311c60
parent2725e2c0323f1408467452e3cc2a4a8cb3ea49a7
[AArch64][SME2] Add intrinsics to move multi-vectors to/from ZA.

Adds intrinsics for the following:
 - mova: array to vector / vector to array
 - mova: tile to vector / vector to tile

Tablegen patterns have been added to match the ZA write intrinsics. As the
read intrinsics return a multi-vector, a function called SelectMultiVectorMove
has been added to AArch64ISelDAGToDAG to select the correct instruction. The
SelectSMETile function has also been added to check that the tile number
passed to read intrinsics is valid for the base register.

This patch also cleans up the sme_vector_to_tile_patterns multiclass to remove
the pattern for an offset of 0, which is handled by tileslice.

NOTE: These intrinsics are still in development and are subject to future changes.

Reviewed By: david-arm

Differential Revision: https://reviews.llvm.org/D142031
llvm/include/llvm/IR/IntrinsicsAArch64.td
llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
llvm/lib/Target/AArch64/AArch64SMEInstrInfo.td
llvm/lib/Target/AArch64/SMEInstrFormats.td
llvm/test/CodeGen/AArch64/sme2-intrinsics-extract-mova.ll [new file with mode: 0644]
llvm/test/CodeGen/AArch64/sme2-intrinsics-insert-mova.ll [new file with mode: 0644]