1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw -mattr=+avx512dq -mattr=+avx512vl| FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test(<2 x i1> %a) { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test: 6*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllq $63, %xmm0, %xmm0 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmq %xmm0, %xmm0, %k0 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftlb $2, %k0, %k0 10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2w %k0, %xmm0 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 12*9880d681SAndroid Build Coastguard Worker %res = shufflevector <2 x i1> %a, <2 x i1> undef, <8 x i32> <i32 undef, i32 undef, i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef> 13*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %res 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test1(<2 x i1> %a) { 17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1: 18*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllq $63, %xmm0, %xmm0 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmq %xmm0, %xmm0, %k0 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftlb $4, %k0, %k0 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2w %k0, %xmm0 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 24*9880d681SAndroid Build Coastguard Worker %res = shufflevector <2 x i1> %a, <2 x i1> undef, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 0, i32 1, i32 undef, i32 undef> 25*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %res 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test2(<2 x i1> %a) { 29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2: 30*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllq $63, %xmm0, %xmm0 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmq %xmm0, %xmm0, %k0 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2q %k0, %zmm0 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpxord %zmm1, %zmm1, %zmm1 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vshufi64x2 {{.*#+}} zmm0 = zmm1[0,1,0,1],zmm0[0,1,0,1] 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllq $63, %zmm0, %zmm0 37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmq %zmm0, %zmm0, %k0 38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2w %k0, %xmm0 39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 40*9880d681SAndroid Build Coastguard Worker %res = shufflevector <2 x i1> %a, <2 x i1> zeroinitializer, <8 x i32> <i32 3, i32 3, i32 undef, i32 undef, i32 0, i32 1, i32 undef, i32 undef> 41*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %res 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test3(<4 x i1> %a) { 45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3: 46*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpslld $31, %xmm0, %xmm0 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmd %xmm0, %xmm0, %k0 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftlb $4, %k0, %k0 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftrb $4, %k0, %k0 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2w %k0, %xmm0 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker %res = shufflevector <4 x i1> %a, <4 x i1> zeroinitializer, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 55*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %res 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdefine <8 x i1> @test4(<4 x i1> %a, <4 x i1>%b) { 59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test4: 60*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpslld $31, %xmm0, %xmm0 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmd %xmm0, %xmm0, %k0 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpslld $31, %xmm1, %xmm0 64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmd %xmm0, %xmm0, %k1 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftlb $4, %k1, %k1 66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftlb $4, %k0, %k0 67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftrb $4, %k0, %k0 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: korb %k1, %k0, %k0 69*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2w %k0, %xmm0 70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker %res = shufflevector <4 x i1> %a, <4 x i1> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 73*9880d681SAndroid Build Coastguard Worker ret <8 x i1> %res 74*9880d681SAndroid Build Coastguard Worker} 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Workerdefine <4 x i1> @test5(<2 x i1> %a, <2 x i1>%b) { 77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test5: 78*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllq $63, %xmm0, %xmm0 80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmq %xmm0, %xmm0, %k0 81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllq $63, %xmm1, %xmm0 82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmq %xmm0, %xmm0, %k1 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftlb $2, %k1, %k1 84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftlb $2, %k0, %k0 85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftrb $2, %k0, %k0 86*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: korb %k1, %k0, %k0 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2d %k0, %xmm0 88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker %res = shufflevector <2 x i1> %a, <2 x i1> %b, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 91*9880d681SAndroid Build Coastguard Worker ret <4 x i1> %res 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerdefine <16 x i1> @test6(<2 x i1> %a, <2 x i1>%b) { 95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test6: 96*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllq $63, %xmm0, %xmm0 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmq %xmm0, %xmm0, %k0 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllq $63, %xmm1, %xmm0 100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmq %xmm0, %xmm0, %k1 101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftlb $2, %k1, %k1 102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftlb $2, %k0, %k0 103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftrb $2, %k0, %k0 104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: korb %k1, %k0, %k0 105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kunpckbw %k0, %k0, %k0 106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2b %k0, %xmm0 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Worker %res = shufflevector <2 x i1> %a, <2 x i1> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 110*9880d681SAndroid Build Coastguard Worker ret <16 x i1> %res 111*9880d681SAndroid Build Coastguard Worker} 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Workerdefine <32 x i1> @test7(<4 x i1> %a, <4 x i1>%b) { 114*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test7: 115*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpslld $31, %xmm0, %xmm0 117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmd %xmm0, %xmm0, %k0 118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpslld $31, %xmm1, %xmm0 119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmd %xmm0, %xmm0, %k1 120*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftlb $4, %k1, %k1 121*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftlb $4, %k0, %k0 122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftrb $4, %k0, %k0 123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: korb %k1, %k0, %k0 124*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kunpckbw %k0, %k0, %k0 125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kunpckwd %k0, %k0, %k0 126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2b %k0, %ymm0 127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Worker %res = shufflevector <4 x i1> %a, <4 x i1> %b, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 130*9880d681SAndroid Build Coastguard Worker ret <32 x i1> %res 131*9880d681SAndroid Build Coastguard Worker} 132*9880d681SAndroid Build Coastguard Worker 133*9880d681SAndroid Build Coastguard Workerdefine <64 x i1> @test8(<8 x i1> %a, <8 x i1>%b) { 134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8: 135*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 136*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllw $15, %xmm1, %xmm1 137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovw2m %xmm1, %k0 138*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllw $15, %xmm0, %xmm0 139*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovw2m %xmm0, %k1 140*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kunpckdq %k1, %k0, %k0 141*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2b %k0, %zmm0 142*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Worker %res = shufflevector <8 x i1> %a, <8 x i1> %b, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef> 145*9880d681SAndroid Build Coastguard Worker ret <64 x i1> %res 146*9880d681SAndroid Build Coastguard Worker} 147*9880d681SAndroid Build Coastguard Worker 148*9880d681SAndroid Build Coastguard Workerdefine <4 x i1> @test9(<8 x i1> %a, <8 x i1> %b) { 149*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test9: 150*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 151*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpsllw $15, %xmm0, %xmm0 152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovw2m %xmm0, %k0 153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftrw $4, %k0, %k0 154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2d %k0, %xmm0 155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 156*9880d681SAndroid Build Coastguard Worker %res = shufflevector <8 x i1> %a, <8 x i1> %b, <4 x i32> <i32 4, i32 5, i32 6, i32 7> 157*9880d681SAndroid Build Coastguard Worker ret <4 x i1> %res 158*9880d681SAndroid Build Coastguard Worker} 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Workerdefine <2 x i1> @test10(<4 x i1> %a, <4 x i1> %b) { 161*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test10: 162*9880d681SAndroid Build Coastguard Worker; CHECK: # BB#0: 163*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpslld $31, %xmm0, %xmm0 164*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vptestmd %xmm0, %xmm0, %k0 165*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kshiftrw $2, %k0, %k0 166*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpmovm2q %k0, %xmm0 167*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 168*9880d681SAndroid Build Coastguard Worker %res = shufflevector <4 x i1> %a, <4 x i1> %b, <2 x i32> <i32 2, i32 3> 169*9880d681SAndroid Build Coastguard Worker ret <2 x i1> %res 170*9880d681SAndroid Build Coastguard Worker} 171