[AArch64 NEON] Add more scenarios to use perm instructions when lowering shuffle_vector
authorKevin Qin <Kevin.Qin@arm.com>
Mon, 13 Jan 2014 01:56:29 +0000 (01:56 +0000)
committerKevin Qin <Kevin.Qin@arm.com>
Mon, 13 Jan 2014 01:56:29 +0000 (01:56 +0000)
commit5c8b8e61df9744ec1efbf6760abbcb62058541a8
treece610618c86a3e3654873031262ca20fb3bc2db6
parentb6e0946d407acf62a3f55ae22ce578d5af3bc5cc
[AArch64 NEON] Add more scenarios to use perm instructions when lowering shuffle_vector

This patch covered 2 more scenarios:

1.  Two operands of shuffle_vector are the same, like
%shuffle.i = shufflevector <8 x i8> %a, <8 x i8> %a, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>

2. One of operands is undef, like
%shuffle.i = shufflevector <8 x i8> %a, <8 x i8> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>

After this patch, perm instructions will have chance to be emitted instead of lots of INS.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199069 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/AArch64/AArch64ISelLowering.cpp
test/CodeGen/AArch64/neon-perm.ll