[ARM] Attempt to use whole register vmovs for MVE shuffles.
authorDavid Green <david.green@arm.com>
Tue, 26 Nov 2019 16:51:02 +0000 (16:51 +0000)
committerDavid Green <david.green@arm.com>
Sun, 8 Dec 2019 10:53:54 +0000 (10:53 +0000)
commit792fab343ba9029dd155f3ae5da30e12ed518c8a
treeeaa2be6282438fddb93fb79f398e1aac00107371
parent3a6eb5f16054e8c0f41a37542a5fc806016502a0
[ARM] Attempt to use whole register vmovs for MVE shuffles.

MVE doesn't have the range of shuffle instructions available in Neon. We
also cannot use the trick of cutting a difficult vector shuffle in half
to simplify things. Instead we need to be more careful about how we
lower shuffles.

This patch adds an extra combine that attempts to find "whole lane"
vmovs when lowering shuffles of smaller types. This helps us make some
shuffles a lot simpler, generating single lane movs for the parts that
can make use of it, falling back to the original shuffle for the rest.

Differential Revision: https://reviews.llvm.org/D69509
llvm/lib/Target/ARM/ARMISelLowering.cpp
llvm/test/CodeGen/Thumb2/mve-pred-shuffle.ll
llvm/test/CodeGen/Thumb2/mve-shuffle.ll
llvm/test/CodeGen/Thumb2/mve-shufflemov.ll
llvm/test/CodeGen/Thumb2/mve-vld3.ll
llvm/test/CodeGen/Thumb2/mve-vldst4.ll
llvm/test/CodeGen/Thumb2/mve-vst3.ll
llvm/test/CodeGen/Thumb2/mve-vst4.ll