[AArch64] Handle vector with two different values with efficient vector mask
authorJingu Kang <jingu.kang@arm.com>
Tue, 9 May 2023 09:37:20 +0000 (10:37 +0100)
committerJingu Kang <jingu.kang@arm.com>
Thu, 11 May 2023 09:26:00 +0000 (10:26 +0100)
commit7cc57c07e36fc6b4d176cebb28a9bbe637772175
treee2591dba9f774b89af69f06b9dfefb07f160e46e
parenteea5d9cc4188584cbfdc18a8bac5316596e70263
[AArch64] Handle vector with two different values with efficient vector mask

When we lower BUILD_VECTOR to VECTOR_SHUFFL, we could generate efficient vector
mask. For example,

 t24: v8i8 = BUILD_VECTOR t25, t25, t25, t25, t26, t26, t26, t26
 ==>
   t27: v8i8 = BUILD_VECTOR t26, t26, t26, t26, t26, t26, t26, t26
   t28: v8i8 = BUILD_VECTOR t25, t25, t25, t25, t25, t25, t25, t25
 t29: v8i8 = vector_shuffle<0,1,2,3,12,13,14,15> t27, t2

Differential Revision: https://reviews.llvm.org/D150345
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/test/CodeGen/AArch64/build-vector-two-dup.ll