• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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