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-apple-darwin -mcpu=knl -mattr=+avx512cd -mattr=+avx512vl| FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1) nounwind readonly 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx512.mask.lzcnt.d.128(<4 x i32>, <4 x i32>, i8) 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine <4 x i32>@test_int_x86_avx512_mask_vplzcnt_d_128(<4 x i32> %x0, <4 x i32> %x1, i8 %x2) { 9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vplzcnt_d_128: 10*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vplzcntd %xmm0, %xmm1 {%k1} 13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vplzcntd %xmm0, %xmm2 {%k1} {z} 14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vplzcntd %xmm0, %xmm0 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd %xmm0, %xmm1, %xmm0 16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd %xmm2, %xmm0, %xmm0 17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 18*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.x86.avx512.mask.lzcnt.d.128(<4 x i32> %x0, <4 x i32> %x1, i8 %x2) 19*9880d681SAndroid Build Coastguard Worker %res1 = call <4 x i32> @llvm.x86.avx512.mask.lzcnt.d.128(<4 x i32> %x0, <4 x i32> %x1, i8 -1) 20*9880d681SAndroid Build Coastguard Worker %res3 = call <4 x i32> @llvm.x86.avx512.mask.lzcnt.d.128(<4 x i32> %x0, <4 x i32> zeroinitializer, i8 %x2) 21*9880d681SAndroid Build Coastguard Worker %res2 = add <4 x i32> %res, %res1 22*9880d681SAndroid Build Coastguard Worker %res4 = add <4 x i32> %res2, %res3 23*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res4 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx512.mask.lzcnt.d.256(<8 x i32>, <8 x i32>, i8) 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerdefine <8 x i32>@test_int_x86_avx512_mask_vplzcnt_d_256(<8 x i32> %x0, <8 x i32> %x1, i8 %x2) { 29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vplzcnt_d_256: 30*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vplzcntd %ymm0, %ymm1 {%k1} 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vplzcntd %ymm0, %ymm0 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd %ymm0, %ymm1, %ymm0 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 36*9880d681SAndroid Build Coastguard Worker %res = call <8 x i32> @llvm.x86.avx512.mask.lzcnt.d.256(<8 x i32> %x0, <8 x i32> %x1, i8 %x2) 37*9880d681SAndroid Build Coastguard Worker %res1 = call <8 x i32> @llvm.x86.avx512.mask.lzcnt.d.256(<8 x i32> %x0, <8 x i32> %x1, i8 -1) 38*9880d681SAndroid Build Coastguard Worker %res2 = add <8 x i32> %res, %res1 39*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %res2 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.avx512.mask.lzcnt.q.128(<2 x i64>, <2 x i64>, i8) 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerdefine <2 x i64>@test_int_x86_avx512_mask_vplzcnt_q_128(<2 x i64> %x0, <2 x i64> %x1, i8 %x2) { 45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vplzcnt_q_128: 46*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vplzcntq %xmm0, %xmm1 {%k1} 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vplzcntq %xmm0, %xmm0 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddq %xmm0, %xmm1, %xmm0 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 52*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.x86.avx512.mask.lzcnt.q.128(<2 x i64> %x0, <2 x i64> %x1, i8 %x2) 53*9880d681SAndroid Build Coastguard Worker %res1 = call <2 x i64> @llvm.x86.avx512.mask.lzcnt.q.128(<2 x i64> %x0, <2 x i64> %x1, i8 -1) 54*9880d681SAndroid Build Coastguard Worker %res2 = add <2 x i64> %res, %res1 55*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res2 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx512.mask.lzcnt.q.256(<4 x i64>, <4 x i64>, i8) 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine <4 x i64>@test_int_x86_avx512_mask_vplzcnt_q_256(<4 x i64> %x0, <4 x i64> %x1, i8 %x2) { 61*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vplzcnt_q_256: 62*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vplzcntq %ymm0, %ymm1 {%k1} 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vplzcntq %ymm0, %ymm0 66*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddq %ymm0, %ymm1, %ymm0 67*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 68*9880d681SAndroid Build Coastguard Worker %res = call <4 x i64> @llvm.x86.avx512.mask.lzcnt.q.256(<4 x i64> %x0, <4 x i64> %x1, i8 %x2) 69*9880d681SAndroid Build Coastguard Worker %res1 = call <4 x i64> @llvm.x86.avx512.mask.lzcnt.q.256(<4 x i64> %x0, <4 x i64> %x1, i8 -1) 70*9880d681SAndroid Build Coastguard Worker %res2 = add <4 x i64> %res, %res1 71*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %res2 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx512.mask.conflict.d.128(<4 x i32>, <4 x i32>, i8) 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Workerdefine <4 x i32>@test_int_x86_avx512_mask_vpconflict_d_128(<4 x i32> %x0, <4 x i32> %x1, i8 %x2) { 77*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vpconflict_d_128: 78*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpconflictd %xmm0, %xmm1 {%k1} 81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpconflictd %xmm0, %xmm2 {%k1} {z} 82*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpconflictd %xmm0, %xmm0 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd %xmm0, %xmm1, %xmm0 84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd %xmm2, %xmm0, %xmm0 85*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 86*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.x86.avx512.mask.conflict.d.128(<4 x i32> %x0, <4 x i32> %x1, i8 %x2) 87*9880d681SAndroid Build Coastguard Worker %res1 = call <4 x i32> @llvm.x86.avx512.mask.conflict.d.128(<4 x i32> %x0, <4 x i32> %x1, i8 -1) 88*9880d681SAndroid Build Coastguard Worker %res3 = call <4 x i32> @llvm.x86.avx512.mask.conflict.d.128(<4 x i32> %x0, <4 x i32> zeroinitializer, i8 %x2) 89*9880d681SAndroid Build Coastguard Worker %res2 = add <4 x i32> %res, %res1 90*9880d681SAndroid Build Coastguard Worker %res4 = add <4 x i32> %res2, %res3 91*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res4 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx512.mask.conflict.d.256(<8 x i32>, <8 x i32>, i8) 95*9880d681SAndroid Build Coastguard Worker 96*9880d681SAndroid Build Coastguard Workerdefine <8 x i32>@test_int_x86_avx512_mask_vpconflict_d_256(<8 x i32> %x0, <8 x i32> %x1, i8 %x2) { 97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vpconflict_d_256: 98*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpconflictd %ymm0, %ymm1 {%k1} 101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpconflictd %ymm0, %ymm0 102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddd %ymm0, %ymm1, %ymm0 103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 104*9880d681SAndroid Build Coastguard Worker %res = call <8 x i32> @llvm.x86.avx512.mask.conflict.d.256(<8 x i32> %x0, <8 x i32> %x1, i8 %x2) 105*9880d681SAndroid Build Coastguard Worker %res1 = call <8 x i32> @llvm.x86.avx512.mask.conflict.d.256(<8 x i32> %x0, <8 x i32> %x1, i8 -1) 106*9880d681SAndroid Build Coastguard Worker %res2 = add <8 x i32> %res, %res1 107*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %res2 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.avx512.mask.conflict.q.128(<2 x i64>, <2 x i64>, i8) 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine <2 x i64>@test_int_x86_avx512_mask_vpconflict_q_128(<2 x i64> %x0, <2 x i64> %x1, i8 %x2) { 113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vpconflict_q_128: 114*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpconflictq %xmm0, %xmm1 {%k1} 117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpconflictq %xmm0, %xmm0 118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddq %xmm0, %xmm1, %xmm0 119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 120*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.x86.avx512.mask.conflict.q.128(<2 x i64> %x0, <2 x i64> %x1, i8 %x2) 121*9880d681SAndroid Build Coastguard Worker %res1 = call <2 x i64> @llvm.x86.avx512.mask.conflict.q.128(<2 x i64> %x0, <2 x i64> %x1, i8 -1) 122*9880d681SAndroid Build Coastguard Worker %res2 = add <2 x i64> %res, %res1 123*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res2 124*9880d681SAndroid Build Coastguard Worker} 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx512.mask.conflict.q.256(<4 x i64>, <4 x i64>, i8) 127*9880d681SAndroid Build Coastguard Worker 128*9880d681SAndroid Build Coastguard Workerdefine <4 x i64>@test_int_x86_avx512_mask_vpconflict_q_256(<4 x i64> %x0, <4 x i64> %x1, i8 %x2) { 129*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_int_x86_avx512_mask_vpconflict_q_256: 130*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k1 132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpconflictq %ymm0, %ymm1 {%k1} 133*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpconflictq %ymm0, %ymm0 134*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpaddq %ymm0, %ymm1, %ymm0 135*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 136*9880d681SAndroid Build Coastguard Worker %res = call <4 x i64> @llvm.x86.avx512.mask.conflict.q.256(<4 x i64> %x0, <4 x i64> %x1, i8 %x2) 137*9880d681SAndroid Build Coastguard Worker %res1 = call <4 x i64> @llvm.x86.avx512.mask.conflict.q.256(<4 x i64> %x0, <4 x i64> %x1, i8 -1) 138*9880d681SAndroid Build Coastguard Worker %res2 = add <4 x i64> %res, %res1 139*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %res2 140*9880d681SAndroid Build Coastguard Worker} 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @test_x86_vbroadcastmw_256(i16 %a0) { 143*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_vbroadcastmw_256: 144*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k0 146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpbroadcastmw2d %k0, %ymm0 147*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 148*9880d681SAndroid Build Coastguard Worker %res = call <8 x i32> @llvm.x86.avx512.broadcastmw.256(i16 %a0) ; 149*9880d681SAndroid Build Coastguard Worker ret <8 x i32> %res 150*9880d681SAndroid Build Coastguard Worker} 151*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.x86.avx512.broadcastmw.256(i16) 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test_x86_vbroadcastmw_128(i16 %a0) { 154*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_vbroadcastmw_128: 155*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k0 157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpbroadcastmw2d %k0, %xmm0 158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 159*9880d681SAndroid Build Coastguard Worker %res = call <4 x i32> @llvm.x86.avx512.broadcastmw.128(i16 %a0) ; 160*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %res 161*9880d681SAndroid Build Coastguard Worker} 162*9880d681SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.x86.avx512.broadcastmw.128(i16) 163*9880d681SAndroid Build Coastguard Worker 164*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @test_x86_broadcastmb_256(i8 %a0) { 165*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_broadcastmb_256: 166*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 167*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k0 168*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpbroadcastmb2q %k0, %ymm0 169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 170*9880d681SAndroid Build Coastguard Worker %res = call <4 x i64> @llvm.x86.avx512.broadcastmb.256(i8 %a0) ; 171*9880d681SAndroid Build Coastguard Worker ret <4 x i64> %res 172*9880d681SAndroid Build Coastguard Worker} 173*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.x86.avx512.broadcastmb.256(i8) 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @test_x86_broadcastmb_128(i8 %a0) { 176*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_x86_broadcastmb_128: 177*9880d681SAndroid Build Coastguard Worker; CHECK: ## BB#0: 178*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: kmovw %edi, %k0 179*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vpbroadcastmb2q %k0, %xmm0 180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: retq 181*9880d681SAndroid Build Coastguard Worker %res = call <2 x i64> @llvm.x86.avx512.broadcastmb.128(i8 %a0) ; 182*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %res 183*9880d681SAndroid Build Coastguard Worker} 184*9880d681SAndroid Build Coastguard Workerdeclare <2 x i64> @llvm.x86.avx512.broadcastmb.128(i8) 185