Home | History | Annotate | Download | only in X86
      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