1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512ifma | FileCheck %s 2 3 declare <8 x i64> @llvm.x86.avx512.mask.vpmadd52h.uq.512(<8 x i64>, <8 x i64>, <8 x i64>, i8) 4 5 define <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 29 declare <8 x i64> @llvm.x86.avx512.maskz.vpmadd52h.uq.512(<8 x i64>, <8 x i64>, <8 x i64>, i8) 30 31 define <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 55 declare <8 x i64> @llvm.x86.avx512.mask.vpmadd52l.uq.512(<8 x i64>, <8 x i64>, <8 x i64>, i8) 56 57 define <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 81 declare <8 x i64> @llvm.x86.avx512.maskz.vpmadd52l.uq.512(<8 x i64>, <8 x i64>, <8 x i64>, i8) 82 83 define <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