xref: /llvm-project/llvm/test/CodeGen/X86/pr34592.ll (revision 8e7618aa21652132f930b6576b92291c5f1d46b6)
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 --check-prefixes=CHECK-O0
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=avx2 -O3 | FileCheck %s --check-prefixes=CHECK-O3
4
5define <16 x i64> @pluto(<16 x i64> %arg, <16 x i64> %arg1, <16 x i64> %arg2, <16 x i64> %arg3, <16 x i64> %arg4) nounwind {
6; CHECK-O0-LABEL: pluto:
7; CHECK-O0:       # %bb.0: # %bb
8; CHECK-O0-NEXT:    pushq %rbp
9; CHECK-O0-NEXT:    movq %rsp, %rbp
10; CHECK-O0-NEXT:    andq $-32, %rsp
11; CHECK-O0-NEXT:    subq $64, %rsp
12; CHECK-O0-NEXT:    vmovaps %ymm4, %ymm10
13; CHECK-O0-NEXT:    vmovaps %ymm3, %ymm9
14; CHECK-O0-NEXT:    vmovaps %ymm2, (%rsp) # 32-byte Spill
15; CHECK-O0-NEXT:    vmovaps %ymm1, %ymm8
16; CHECK-O0-NEXT:    vmovaps %ymm0, %ymm3
17; CHECK-O0-NEXT:    vmovaps (%rsp), %ymm0 # 32-byte Reload
18; CHECK-O0-NEXT:    vmovaps 240(%rbp), %ymm4
19; CHECK-O0-NEXT:    vmovaps 208(%rbp), %ymm1
20; CHECK-O0-NEXT:    vmovaps 176(%rbp), %ymm2
21; CHECK-O0-NEXT:    vmovaps 144(%rbp), %ymm2
22; CHECK-O0-NEXT:    vmovaps 112(%rbp), %ymm11
23; CHECK-O0-NEXT:    vmovaps 80(%rbp), %ymm11
24; CHECK-O0-NEXT:    vmovaps 48(%rbp), %ymm11
25; CHECK-O0-NEXT:    vmovaps 16(%rbp), %ymm11
26; CHECK-O0-NEXT:    vpblendd {{.*#+}} ymm0 = ymm6[0,1,2,3,4,5],ymm0[6,7]
27; CHECK-O0-NEXT:    vpunpcklqdq {{.*#+}} ymm2 = ymm2[0],ymm1[0],ymm2[2],ymm1[2]
28; CHECK-O0-NEXT:    vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
29; CHECK-O0-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[3,1,2,1]
30; CHECK-O0-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm2[2,3,4,5],ymm0[6,7]
31; CHECK-O0-NEXT:    vperm2i128 {{.*#+}} ymm2 = ymm7[2,3],ymm6[0,1]
32; CHECK-O0-NEXT:    vxorps %xmm3, %xmm3, %xmm3
33; CHECK-O0-NEXT:    vpblendd {{.*#+}} ymm2 = ymm2[0,1],ymm3[2,3],ymm2[4,5,6,7]
34; CHECK-O0-NEXT:    vmovaps %xmm1, %xmm3
35; CHECK-O0-NEXT:    vmovaps %xmm7, %xmm1
36; CHECK-O0-NEXT:    vpblendd {{.*#+}} xmm3 = xmm1[0,1],xmm3[2,3]
37; CHECK-O0-NEXT:    # implicit-def: $ymm1
38; CHECK-O0-NEXT:    vmovaps %xmm3, %xmm1
39; CHECK-O0-NEXT:    vpermq {{.*#+}} ymm3 = ymm1[0,0,1,3]
40; CHECK-O0-NEXT:    vpslldq {{.*#+}} ymm1 = zero,zero,zero,zero,zero,zero,zero,zero,ymm5[0,1,2,3,4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,ymm5[16,17,18,19,20,21,22,23]
41; CHECK-O0-NEXT:    vpblendd {{.*#+}} ymm3 = ymm1[0,1],ymm3[2,3,4,5],ymm1[6,7]
42; CHECK-O0-NEXT:    vpunpcklqdq {{.*#+}} ymm1 = ymm7[0],ymm5[0],ymm7[2],ymm5[2]
43; CHECK-O0-NEXT:    vpblendd {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
44; CHECK-O0-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,1,1,3]
45; CHECK-O0-NEXT:    movq %rbp, %rsp
46; CHECK-O0-NEXT:    popq %rbp
47; CHECK-O0-NEXT:    retq
48;
49; CHECK-O3-LABEL: pluto:
50; CHECK-O3:       # %bb.0: # %bb
51; CHECK-O3-NEXT:    pushq %rbp
52; CHECK-O3-NEXT:    movq %rsp, %rbp
53; CHECK-O3-NEXT:    andq $-32, %rsp
54; CHECK-O3-NEXT:    subq $32, %rsp
55; CHECK-O3-NEXT:    vmovdqa 208(%rbp), %ymm3
56; CHECK-O3-NEXT:    vmovdqa 144(%rbp), %ymm0
57; CHECK-O3-NEXT:    vpblendd {{.*#+}} ymm1 = ymm6[0,1,2,3,4,5],ymm2[6,7]
58; CHECK-O3-NEXT:    vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm3[0],ymm0[2],ymm3[2]
59; CHECK-O3-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
60; CHECK-O3-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[3,1,2,1]
61; CHECK-O3-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3,4,5],ymm1[6,7]
62; CHECK-O3-NEXT:    vperm2i128 {{.*#+}} ymm1 = ymm7[2,3],ymm6[0,1]
63; CHECK-O3-NEXT:    vpxor %xmm2, %xmm2, %xmm2
64; CHECK-O3-NEXT:    vpblendd {{.*#+}} ymm2 = ymm1[0,1],ymm2[2,3],ymm1[4,5,6,7]
65; CHECK-O3-NEXT:    vpunpcklqdq {{.*#+}} ymm1 = ymm7[0],ymm5[0],ymm7[2],ymm5[2]
66; CHECK-O3-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[2,1,2,3]
67; CHECK-O3-NEXT:    vpbroadcastq 248(%rbp), %ymm4
68; CHECK-O3-NEXT:    vpblendd {{.*#+}} ymm1 = ymm1[0,1],ymm4[2,3,4,5],ymm1[6,7]
69; CHECK-O3-NEXT:    vpblendd {{.*#+}} xmm3 = xmm7[0,1],xmm3[2,3]
70; CHECK-O3-NEXT:    vpermq {{.*#+}} ymm3 = ymm3[0,0,1,3]
71; CHECK-O3-NEXT:    vpslldq {{.*#+}} ymm4 = zero,zero,zero,zero,zero,zero,zero,zero,ymm5[0,1,2,3,4,5,6,7],zero,zero,zero,zero,zero,zero,zero,zero,ymm5[16,17,18,19,20,21,22,23]
72; CHECK-O3-NEXT:    vpblendd {{.*#+}} ymm3 = ymm4[0,1],ymm3[2,3,4,5],ymm4[6,7]
73; CHECK-O3-NEXT:    movq %rbp, %rsp
74; CHECK-O3-NEXT:    popq %rbp
75; CHECK-O3-NEXT:    retq
76bb:
77  %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
78  %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
79  %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
80  %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>
81  ret <16 x i64> %tmp7
82}
83