1; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512ifma | FileCheck %s 2 3declare <8 x i64> @llvm.x86.avx512.mask.vpmadd52h.uq.512(<8 x i64>, <8 x i64>, <8 x i64>, i8) 4 5define <8 x i64>@test_int_x86_avx512_mask_vpmadd52h_uq_512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 %x3) { 6; CHECK-LABEL: test_int_x86_avx512_mask_vpmadd52h_uq_512: 7; CHECK: kmovw %edi, %k1 8; CHECK: vmovaps %zmm0, %zmm3 9; CHECK: vpmadd52huq %zmm2, %zmm1, %zmm3 {%k1} 10; CHECK: vmovaps %zmm0, %zmm4 11; CHECK: vpmadd52huq %zmm2, %zmm1, %zmm4 12; CHECK: vpxord %zmm2, %zmm2, %zmm2 13; CHECK: vpmadd52huq %zmm2, %zmm1, %zmm0 {%k1} 14; CHECK: vpmadd52huq %zmm2, %zmm1, %zmm2 {%k1} {z} 15; CHECK: vpaddq %zmm0, %zmm3, %zmm0 16; CHECK: vpaddq %zmm2, %zmm4, %zmm1 17; CHECK: vpaddq %zmm0, %zmm1, %zmm0 18 19 %res = call <8 x i64> @llvm.x86.avx512.mask.vpmadd52h.uq.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 %x3) 20 %res1 = call <8 x i64> @llvm.x86.avx512.mask.vpmadd52h.uq.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> zeroinitializer, i8 %x3) 21 %res2 = call <8 x i64> @llvm.x86.avx512.mask.vpmadd52h.uq.512(<8 x i64> zeroinitializer, <8 x i64> %x1, <8 x i64> zeroinitializer, i8 %x3) 22 %res3 = call <8 x i64> @llvm.x86.avx512.mask.vpmadd52h.uq.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 -1) 23 %res4 = add <8 x i64> %res, %res1 24 %res5 = add <8 x i64> %res3, %res2 25 %res6 = add <8 x i64> %res5, %res4 26 ret <8 x i64> %res6 27} 28 29declare <8 x i64> @llvm.x86.avx512.maskz.vpmadd52h.uq.512(<8 x i64>, <8 x i64>, <8 x i64>, i8) 30 31define <8 x i64>@test_int_x86_avx512_maskz_vpmadd52h_uq_512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 %x3) { 32; CHECK-LABEL: test_int_x86_avx512_maskz_vpmadd52h_uq_512: 33; CHECK: kmovw %edi, %k1 34; CHECK: vmovaps %zmm0, %zmm3 35; CHECK: vpmadd52huq %zmm2, %zmm1, %zmm3 {%k1} {z} 36; CHECK: vmovaps %zmm0, %zmm4 37; CHECK: vpmadd52huq %zmm2, %zmm1, %zmm4 38; CHECK: vpxord %zmm2, %zmm2, %zmm2 39; CHECK: vpmadd52huq %zmm2, %zmm1, %zmm0 {%k1} {z} 40; CHECK: vpmadd52huq %zmm2, %zmm1, %zmm2 {%k1} {z} 41; CHECK: vpaddq %zmm0, %zmm3, %zmm0 42; CHECK: vpaddq %zmm2, %zmm4, %zmm1 43; CHECK: vpaddq %zmm0, %zmm1, %zmm0 44 45 %res = call <8 x i64> @llvm.x86.avx512.maskz.vpmadd52h.uq.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 %x3) 46 %res1 = call <8 x i64> @llvm.x86.avx512.maskz.vpmadd52h.uq.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> zeroinitializer, i8 %x3) 47 %res2 = call <8 x i64> @llvm.x86.avx512.maskz.vpmadd52h.uq.512(<8 x i64> zeroinitializer, <8 x i64> %x1, <8 x i64> zeroinitializer, i8 %x3) 48 %res3 = call <8 x i64> @llvm.x86.avx512.maskz.vpmadd52h.uq.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 -1) 49 %res4 = add <8 x i64> %res, %res1 50 %res5 = add <8 x i64> %res3, %res2 51 %res6 = add <8 x i64> %res5, %res4 52 ret <8 x i64> %res6 53} 54 55declare <8 x i64> @llvm.x86.avx512.mask.vpmadd52l.uq.512(<8 x i64>, <8 x i64>, <8 x i64>, i8) 56 57define <8 x i64>@test_int_x86_avx512_mask_vpmadd52l_uq_512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 %x3) { 58; CHECK-LABEL: test_int_x86_avx512_mask_vpmadd52l_uq_512: 59; CHECK: kmovw %edi, %k1 60; CHECK: vmovaps %zmm0, %zmm3 61; CHECK: vpmadd52luq %zmm2, %zmm1, %zmm3 {%k1} 62; CHECK: vmovaps %zmm0, %zmm4 63; CHECK: vpmadd52luq %zmm2, %zmm1, %zmm4 64; CHECK: vpxord %zmm2, %zmm2, %zmm2 65; CHECK: vpmadd52luq %zmm2, %zmm1, %zmm0 {%k1} 66; CHECK: vpmadd52luq %zmm2, %zmm1, %zmm2 {%k1} {z} 67; CHECK: vpaddq %zmm0, %zmm3, %zmm0 68; CHECK: vpaddq %zmm2, %zmm4, %zmm1 69; CHECK: vpaddq %zmm0, %zmm1, %zmm0 70 71 %res = call <8 x i64> @llvm.x86.avx512.mask.vpmadd52l.uq.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 %x3) 72 %res1 = call <8 x i64> @llvm.x86.avx512.mask.vpmadd52l.uq.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> zeroinitializer, i8 %x3) 73 %res2 = call <8 x i64> @llvm.x86.avx512.mask.vpmadd52l.uq.512(<8 x i64> zeroinitializer, <8 x i64> %x1, <8 x i64> zeroinitializer, i8 %x3) 74 %res3 = call <8 x i64> @llvm.x86.avx512.mask.vpmadd52l.uq.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 -1) 75 %res4 = add <8 x i64> %res, %res1 76 %res5 = add <8 x i64> %res3, %res2 77 %res6 = add <8 x i64> %res5, %res4 78 ret <8 x i64> %res6 79} 80 81declare <8 x i64> @llvm.x86.avx512.maskz.vpmadd52l.uq.512(<8 x i64>, <8 x i64>, <8 x i64>, i8) 82 83define <8 x i64>@test_int_x86_avx512_maskz_vpmadd52l_uq_512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 %x3) { 84; CHECK-LABEL: test_int_x86_avx512_maskz_vpmadd52l_uq_512: 85; CHECK: kmovw %edi, %k1 86; CHECK: vmovaps %zmm0, %zmm3 87; CHECK: vpmadd52luq %zmm2, %zmm1, %zmm3 {%k1} {z} 88; CHECK: vmovaps %zmm0, %zmm4 89; CHECK: vpmadd52luq %zmm2, %zmm1, %zmm4 90; CHECK: vpxord %zmm2, %zmm2, %zmm2 91; CHECK: vpmadd52luq %zmm2, %zmm1, %zmm0 {%k1} {z} 92; CHECK: vpmadd52luq %zmm2, %zmm1, %zmm2 {%k1} {z} 93; CHECK: vpaddq %zmm0, %zmm3, %zmm0 94; CHECK: vpaddq %zmm2, %zmm4, %zmm1 95; CHECK: vpaddq %zmm0, %zmm1, %zmm0 96 97 %res = call <8 x i64> @llvm.x86.avx512.maskz.vpmadd52l.uq.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 %x3) 98 %res1 = call <8 x i64> @llvm.x86.avx512.maskz.vpmadd52l.uq.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> zeroinitializer, i8 %x3) 99 %res2 = call <8 x i64> @llvm.x86.avx512.maskz.vpmadd52l.uq.512(<8 x i64> zeroinitializer, <8 x i64> %x1, <8 x i64> zeroinitializer, i8 %x3) 100 %res3 = call <8 x i64> @llvm.x86.avx512.maskz.vpmadd52l.uq.512(<8 x i64> %x0, <8 x i64> %x1, <8 x i64> %x2, i8 -1) 101 %res4 = add <8 x i64> %res, %res1 102 %res5 = add <8 x i64> %res3, %res2 103 %res6 = add <8 x i64> %res5, %res4 104 ret <8 x i64> %res6 105} 106