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 3 4define <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 $32, %rsp 14; CHECK-NEXT: vmovaps %ymm4, %ymm10 15; CHECK-NEXT: vmovaps %ymm3, %ymm9 16; CHECK-NEXT: vmovaps %ymm1, %ymm8 17; CHECK-NEXT: vmovaps %ymm0, %ymm4 18; CHECK-NEXT: vmovaps 240(%rbp), %ymm1 19; CHECK-NEXT: vmovaps 208(%rbp), %ymm3 20; CHECK-NEXT: vmovaps 176(%rbp), %ymm0 21; CHECK-NEXT: vmovaps 144(%rbp), %ymm0 22; CHECK-NEXT: vmovaps 112(%rbp), %ymm11 23; CHECK-NEXT: vmovaps 80(%rbp), %ymm11 24; CHECK-NEXT: vmovaps 48(%rbp), %ymm11 25; CHECK-NEXT: vmovaps 16(%rbp), %ymm11 26; CHECK-NEXT: vpblendd {{.*#+}} ymm4 = ymm6[0,1,2,3,4,5],ymm2[6,7] 27; CHECK-NEXT: vmovaps %xmm3, %xmm8 28; CHECK-NEXT: # implicit-def: $ymm2 29; CHECK-NEXT: vinserti128 $1, %xmm8, %ymm2, %ymm2 30; CHECK-NEXT: vpalignr {{.*#+}} ymm0 = ymm4[8,9,10,11,12,13,14,15],ymm0[0,1,2,3,4,5,6,7],ymm4[24,25,26,27,28,29,30,31],ymm0[16,17,18,19,20,21,22,23] 31; CHECK-NEXT: vpermq {{.*#+}} ymm0 = ymm0[2,3,2,0] 32; CHECK-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5],ymm0[6,7] 33; CHECK-NEXT: vmovaps %xmm7, %xmm2 34; CHECK-NEXT: vpslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1,2,3,4,5,6,7] 35; CHECK-NEXT: # implicit-def: $ymm2 36; CHECK-NEXT: vmovaps %xmm4, %xmm2 37; CHECK-NEXT: vpalignr {{.*#+}} ymm3 = ymm3[8,9,10,11,12,13,14,15],ymm5[0,1,2,3,4,5,6,7],ymm3[24,25,26,27,28,29,30,31],ymm5[16,17,18,19,20,21,22,23] 38; CHECK-NEXT: vpermq {{.*#+}} ymm3 = ymm3[0,1,0,3] 39; CHECK-NEXT: vpblendd {{.*#+}} ymm3 = ymm2[0,1,2,3],ymm3[4,5,6,7] 40; CHECK-NEXT: vpblendd {{.*#+}} ymm1 = ymm7[0,1],ymm1[2,3],ymm7[4,5,6,7] 41; CHECK-NEXT: vpermq {{.*#+}} ymm1 = ymm1[2,1,1,3] 42; CHECK-NEXT: vpshufd {{.*#+}} ymm2 = ymm5[0,1,0,1,4,5,4,5] 43; CHECK-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5],ymm2[6,7] 44; CHECK-NEXT: vextracti128 $1, %ymm7, %xmm2 45; CHECK-NEXT: vmovq {{.*#+}} xmm4 = xmm2[0],zero 46; CHECK-NEXT: # implicit-def: $ymm2 47; CHECK-NEXT: vmovaps %xmm4, %xmm2 48; CHECK-NEXT: vperm2i128 {{.*#+}} ymm2 = ymm2[0,1],ymm6[0,1] 49; CHECK-NEXT: movq %rbp, %rsp 50; CHECK-NEXT: popq %rbp 51; CHECK-NEXT: .cfi_def_cfa %rsp, 8 52; CHECK-NEXT: retq 53bb: 54 %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 55 %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 56 %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 57 %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> 58 ret <16 x i64> %tmp7 59} 60