[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / X86 / pr34592.ll
blob9249450a3d2aea9e8c08aa6902ec43fb06816ed7
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx2 -O0 | FileCheck %s
4 define <16 x i64> @pluto(<16 x i64> %arg, <16 x i64> %arg1, <16 x i64> %arg2, <16 x i64> %arg3, <16 x i64> %arg4) {
5 ; CHECK-LABEL: pluto:
6 ; CHECK:       # %bb.0: # %bb
7 ; CHECK-NEXT:    pushq %rbp
8 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
9 ; CHECK-NEXT:    .cfi_offset %rbp, -16
10 ; CHECK-NEXT:    movq %rsp, %rbp
11 ; CHECK-NEXT:    .cfi_def_cfa_register %rbp
12 ; CHECK-NEXT:    andq $-32, %rsp
13 ; CHECK-NEXT:    subq $128, %rsp
14 ; CHECK-NEXT:    vmovaps 240(%rbp), %ymm8
15 ; CHECK-NEXT:    vmovaps 208(%rbp), %ymm9
16 ; CHECK-NEXT:    vmovaps 176(%rbp), %ymm10
17 ; CHECK-NEXT:    vmovaps 144(%rbp), %ymm11
18 ; CHECK-NEXT:    vmovaps 112(%rbp), %ymm12
19 ; CHECK-NEXT:    vmovaps 80(%rbp), %ymm13
20 ; CHECK-NEXT:    vmovaps 48(%rbp), %ymm14
21 ; CHECK-NEXT:    vmovaps 16(%rbp), %ymm15
22 ; CHECK-NEXT:    vpblendd {{.*#+}} ymm2 = ymm6[0,1,2,3,4,5],ymm2[6,7]
23 ; CHECK-NEXT:    vmovaps %xmm9, %xmm6
24 ; CHECK-NEXT:    vmovaps %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
25 ; CHECK-NEXT:    # implicit-def: $ymm0
26 ; CHECK-NEXT:    vinserti128 $1, %xmm6, %ymm0, %ymm0
27 ; CHECK-NEXT:    vpalignr {{.*#+}} ymm11 = ymm2[8,9,10,11,12,13,14,15],ymm11[0,1,2,3,4,5,6,7],ymm2[24,25,26,27,28,29,30,31],ymm11[16,17,18,19,20,21,22,23]
28 ; CHECK-NEXT:    vpermq {{.*#+}} ymm11 = ymm11[2,3,2,0]
29 ; CHECK-NEXT:    vpblendd {{.*#+}} ymm0 = ymm11[0,1,2,3],ymm0[4,5],ymm11[6,7]
30 ; CHECK-NEXT:    # kill: def $xmm2 killed $xmm2 killed $ymm2
31 ; CHECK-NEXT:    # implicit-def: $ymm11
32 ; CHECK-NEXT:    vinserti128 $1, %xmm2, %ymm11, %ymm11
33 ; CHECK-NEXT:    vextracti128 $1, %ymm7, %xmm2
34 ; CHECK-NEXT:    vmovq {{.*#+}} xmm2 = xmm2[0],zero
35 ; CHECK-NEXT:    # implicit-def: $ymm6
36 ; CHECK-NEXT:    vmovaps %xmm2, %xmm6
37 ; CHECK-NEXT:    vpblendd {{.*#+}} ymm2 = ymm6[0,1,2,3],ymm11[4,5,6,7]
38 ; CHECK-NEXT:    vmovaps %xmm7, %xmm6
39 ; CHECK-NEXT:    vpslldq {{.*#+}} xmm6 = zero,zero,zero,zero,zero,zero,zero,zero,xmm6[0,1,2,3,4,5,6,7]
40 ; CHECK-NEXT:    # implicit-def: $ymm11
41 ; CHECK-NEXT:    vmovaps %xmm6, %xmm11
42 ; CHECK-NEXT:    vpalignr {{.*#+}} ymm9 = ymm9[8,9,10,11,12,13,14,15],ymm5[0,1,2,3,4,5,6,7],ymm9[24,25,26,27,28,29,30,31],ymm5[16,17,18,19,20,21,22,23]
43 ; CHECK-NEXT:    vpermq {{.*#+}} ymm9 = ymm9[0,1,0,3]
44 ; CHECK-NEXT:    vpblendd {{.*#+}} ymm9 = ymm11[0,1,2,3],ymm9[4,5,6,7]
45 ; CHECK-NEXT:    vpblendd {{.*#+}} ymm7 = ymm7[0,1],ymm8[2,3],ymm7[4,5,6,7]
46 ; CHECK-NEXT:    vpermq {{.*#+}} ymm7 = ymm7[2,1,1,3]
47 ; CHECK-NEXT:    vpshufd {{.*#+}} ymm5 = ymm5[0,1,0,1,4,5,4,5]
48 ; CHECK-NEXT:    vpblendd {{.*#+}} ymm5 = ymm7[0,1,2,3,4,5],ymm5[6,7]
49 ; CHECK-NEXT:    vmovaps %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
50 ; CHECK-NEXT:    vmovaps %ymm5, %ymm1
51 ; CHECK-NEXT:    vmovaps %ymm3, (%rsp) # 32-byte Spill
52 ; CHECK-NEXT:    vmovaps %ymm9, %ymm3
53 ; CHECK-NEXT:    movq %rbp, %rsp
54 ; CHECK-NEXT:    popq %rbp
55 ; CHECK-NEXT:    .cfi_def_cfa %rsp, 8
56 ; CHECK-NEXT:    retq
57 bb:
58   %tmp = select <16 x i1> <i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false>, <16 x i64> %arg, <16 x i64> %arg1
59   %tmp5 = select <16 x i1> <i1 true, i1 false, i1 false, i1 true, i1 true, i1 false, i1 false, i1 true, i1 false, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>, <16 x i64> %arg2, <16 x i64> zeroinitializer
60   %tmp6 = select <16 x i1> <i1 false, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 true, i1 true, i1 false, i1 false, i1 false, i1 true, i1 true, i1 true>, <16 x i64> %arg3, <16 x i64> %tmp5
61   %tmp7 = shufflevector <16 x i64> %tmp, <16 x i64> %tmp6, <16 x i32> <i32 11, i32 18, i32 24, i32 9, i32 14, i32 29, i32 29, i32 6, i32 14, i32 28, i32 8, i32 9, i32 22, i32 12, i32 25, i32 6>
62   ret <16 x i64> %tmp7