[AArch64] Use DUP for BUILD_VECTOR with few different elements.
authorFlorian Hahn <flo@fhahn.com>
Wed, 28 Oct 2020 19:48:20 +0000 (19:48 +0000)
committerFlorian Hahn <flo@fhahn.com>
Wed, 28 Oct 2020 19:48:20 +0000 (19:48 +0000)
commitba78cae20f1467ebba6bd1005ef3e48e1fd96dee
treefb265e5d9704fb7880d5bbacd9ca2c24a3ddb414
parentacd7be74ca12f8f08e52d6d80850a9b230109134
[AArch64] Use DUP for BUILD_VECTOR with few different elements.

If most elements of BUILD_VECTOR are the same, with a few different
elements, it is better to use DUP  for the common elements and
INSERT_VECTOR_ELT for the different elements.

Currently this transform is guarded quite restrictively to only trigger
in clearly beneficial cases.

With D90176, the lowering for patterns originating from code like
` float32x4_t y = {a,a,a,0};` (common in 3D apps) are lowered even
better (unnecessary fmov is removed).

Reviewed By: efriedma

Differential Revision: https://reviews.llvm.org/D90233
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/test/CodeGen/AArch64/arm64-vector-insertion.ll