[TwoAddressInstructionPass] When looking for a 3 addr conversion after commuting...
[oota-llvm.git] / test / CodeGen / X86 / avx2-vperm.ll
1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=core-avx2 -mattr=+avx2 | FileCheck %s
2
3 define <8 x i32> @perm_cl_int_8x32(<8 x i32> %A) nounwind readnone {
4 entry:
5 ; CHECK: perm_cl_int_8x32
6 ; CHECK: vpermd
7   %B = shufflevector <8 x i32> %A, <8 x i32> undef, <8 x i32> <i32 0, i32 7, i32 2, i32 1, i32 2, i32 7, i32 6, i32 0>
8   ret <8 x i32> %B
9 }
10
11
12 define <8 x float> @perm_cl_fp_8x32(<8 x float> %A) nounwind readnone {
13 entry:
14 ; CHECK: perm_cl_fp_8x32
15 ; CHECK: vpermps
16   %B = shufflevector <8 x float> %A, <8 x float> undef, <8 x i32> <i32 undef, i32 7, i32 2, i32 undef, i32 4, i32 undef, i32 1, i32 6>
17   ret <8 x float> %B
18 }
19
20 define <4 x i64> @perm_cl_int_4x64(<4 x i64> %A) nounwind readnone {
21 entry:
22 ; CHECK: perm_cl_int_4x64
23 ; CHECK: vpermq
24   %B = shufflevector <4 x i64> %A, <4 x i64> undef, <4 x i32> <i32 0, i32 3, i32 2, i32 1>
25   ret <4 x i64> %B
26 }
27
28 define <4 x double> @perm_cl_fp_4x64(<4 x double> %A) nounwind readnone {
29 entry:
30 ; CHECK: perm_cl_fp_4x64
31 ; CHECK: vpermpd
32   %B = shufflevector <4 x double> %A, <4 x double> undef, <4 x i32> <i32 0, i32 3, i32 2, i32 1>
33   ret <4 x double> %B
34 }