1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512bw -mattr=+avx512fp16 -mattr=+avx512vl | FileCheck %s
4 declare <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
5 declare <4 x float> @llvm.x86.avx512fp16.maskz.vfmul.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
6 declare <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
7 declare <4 x float> @llvm.x86.avx512fp16.maskz.vfcmul.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
8 declare <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
9 declare <4 x float> @llvm.x86.avx512fp16.maskz.vfmadd.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
10 declare <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
11 declare <4 x float> @llvm.x86.avx512fp16.maskz.vfcmadd.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
13 ;; no mask, no rounding
15 define <4 x float> @test_nm_nr_int_x86_avx512fp16_mask_cfmul_sh(<4 x float> %x0, <4 x float> %x1) {
16 ; CHECK-LABEL: test_nm_nr_int_x86_avx512fp16_mask_cfmul_sh:
18 ; CHECK-NEXT: vfmulcsh %xmm1, %xmm0, %xmm2
19 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
21 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> undef, i8 -1, i32 4)
25 define <4 x float> @test_nm_nr_int_x86_avx512fp16_mask_cfcmul_sh(<4 x float> %x0, <4 x float> %x1) {
26 ; CHECK-LABEL: test_nm_nr_int_x86_avx512fp16_mask_cfcmul_sh:
28 ; CHECK-NEXT: vfcmulcsh %xmm1, %xmm0, %xmm2
29 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
31 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> undef, i8 -1, i32 4)
35 define <4 x float> @test_nm_nr_int_x86_avx512fp16_cfmadd_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2) {
36 ; CHECK-LABEL: test_nm_nr_int_x86_avx512fp16_cfmadd_sh:
38 ; CHECK-NEXT: vfmaddcsh %xmm1, %xmm0, %xmm2
39 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
41 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 -1, i32 4)
45 define <4 x float> @test_nm_nr_int_x86_avx512fp16_cfcmadd_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2) {
46 ; CHECK-LABEL: test_nm_nr_int_x86_avx512fp16_cfcmadd_sh:
48 ; CHECK-NEXT: vfcmaddcsh %xmm1, %xmm0, %xmm2
49 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
51 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 -1, i32 4)
57 define <4 x float> @test_nm_r_int_x86_avx512fp16_mask_cfmul_sh(<4 x float> %x0, <4 x float> %x1) {
58 ; CHECK-LABEL: test_nm_r_int_x86_avx512fp16_mask_cfmul_sh:
60 ; CHECK-NEXT: vfmulcsh {rd-sae}, %xmm1, %xmm0, %xmm2
61 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
63 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> undef, i8 -1, i32 9)
67 define <4 x float> @test_nm_r_int_x86_avx512fp16_mask_cfcmul_sh(<4 x float> %x0, <4 x float> %x1) {
68 ; CHECK-LABEL: test_nm_r_int_x86_avx512fp16_mask_cfcmul_sh:
70 ; CHECK-NEXT: vfcmulcsh {rd-sae}, %xmm1, %xmm0, %xmm2
71 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
73 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> undef, i8 -1, i32 9)
77 define <4 x float> @test_nm_r_int_x86_avx512fp16_mask_cfmadd_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2) {
78 ; CHECK-LABEL: test_nm_r_int_x86_avx512fp16_mask_cfmadd_sh:
80 ; CHECK-NEXT: vfmaddcsh {rd-sae}, %xmm1, %xmm0, %xmm2
81 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
83 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 -1, i32 9)
87 define <4 x float> @test_nm_r_int_x86_avx512fp16_mask_cfcmadd_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2) {
88 ; CHECK-LABEL: test_nm_r_int_x86_avx512fp16_mask_cfcmadd_sh:
90 ; CHECK-NEXT: vfcmaddcsh {rd-sae}, %xmm1, %xmm0, %xmm2
91 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
93 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 -1, i32 9)
99 define <4 x float> @test_m_nr_int_x86_avx512fp16_mask_cfmul_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
100 ; CHECK-LABEL: test_m_nr_int_x86_avx512fp16_mask_cfmul_sh:
102 ; CHECK-NEXT: kmovd %edi, %k1
103 ; CHECK-NEXT: vfmulcsh %xmm1, %xmm0, %xmm2 {%k1}
104 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
106 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3, i32 4)
110 define <4 x float> @test_m_nr_int_x86_avx512fp16_mask_cfcmul_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
111 ; CHECK-LABEL: test_m_nr_int_x86_avx512fp16_mask_cfcmul_sh:
113 ; CHECK-NEXT: kmovd %edi, %k1
114 ; CHECK-NEXT: vfcmulcsh %xmm1, %xmm0, %xmm2 {%k1}
115 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
117 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3, i32 4)
121 define <4 x float> @test_m_nr_int_x86_avx512fp16_mask_cfmadd_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
122 ; CHECK-LABEL: test_m_nr_int_x86_avx512fp16_mask_cfmadd_sh:
124 ; CHECK-NEXT: kmovd %edi, %k1
125 ; CHECK-NEXT: vfmaddcsh %xmm1, %xmm0, %xmm2 {%k1}
126 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
128 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3, i32 4)
132 define <4 x float> @test_m_nr_int_x86_avx512fp16_mask_cfcmadd_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
133 ; CHECK-LABEL: test_m_nr_int_x86_avx512fp16_mask_cfcmadd_sh:
135 ; CHECK-NEXT: kmovd %edi, %k1
136 ; CHECK-NEXT: vfcmaddcsh %xmm1, %xmm0, %xmm2 {%k1}
137 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
139 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3, i32 4)
145 define <4 x float> @test_int_x86_avx512fp16_mask_cfmul_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
146 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cfmul_sh:
148 ; CHECK-NEXT: kmovd %edi, %k1
149 ; CHECK-NEXT: vfmulcsh {rd-sae}, %xmm1, %xmm0, %xmm2 {%k1}
150 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
152 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3, i32 9)
156 define <4 x float> @test_int_x86_avx512fp16_mask_cfcmul_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
157 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cfcmul_sh:
159 ; CHECK-NEXT: kmovd %edi, %k1
160 ; CHECK-NEXT: vfcmulcsh {rd-sae}, %xmm1, %xmm0, %xmm2 {%k1}
161 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
163 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3, i32 9)
167 define <4 x float> @test_int_x86_avx512fp16_mask_cfmadd_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
168 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cfmadd_sh:
170 ; CHECK-NEXT: kmovd %edi, %k1
171 ; CHECK-NEXT: vfmaddcsh {rd-sae}, %xmm1, %xmm0, %xmm2 {%k1}
172 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
174 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3, i32 9)
178 define <4 x float> @test_int_x86_avx512fp16_mask_cfcmadd_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
179 ; CHECK-LABEL: test_int_x86_avx512fp16_mask_cfcmadd_sh:
181 ; CHECK-NEXT: kmovd %edi, %k1
182 ; CHECK-NEXT: vfcmaddcsh {rd-sae}, %xmm1, %xmm0, %xmm2 {%k1}
183 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
185 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3, i32 9)
189 ;; maskz, no rounding
191 define <4 x float> @test_m_nr_int_x86_avx512fp16_maskz_cfmul_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
192 ; CHECK-LABEL: test_m_nr_int_x86_avx512fp16_maskz_cfmul_sh:
194 ; CHECK-NEXT: kmovd %edi, %k1
195 ; CHECK-NEXT: vfmulcsh %xmm1, %xmm0, %xmm2 {%k1} {z}
196 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
198 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> zeroinitializer, i8 %x3, i32 4)
202 define <4 x float> @test_m_nr_int_x86_avx512fp16_maskz_cfcmul_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
203 ; CHECK-LABEL: test_m_nr_int_x86_avx512fp16_maskz_cfcmul_sh:
205 ; CHECK-NEXT: kmovd %edi, %k1
206 ; CHECK-NEXT: vfcmulcsh %xmm1, %xmm0, %xmm2 {%k1} {z}
207 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
209 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> zeroinitializer, i8 %x3, i32 4)
213 define <4 x float> @test_m_nr_int_x86_avx512fp16_maskz_cfmadd_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
214 ; CHECK-LABEL: test_m_nr_int_x86_avx512fp16_maskz_cfmadd_sh:
216 ; CHECK-NEXT: kmovd %edi, %k1
217 ; CHECK-NEXT: vfmaddcsh %xmm1, %xmm0, %xmm2 {%k1} {z}
218 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
220 %res = call <4 x float> @llvm.x86.avx512fp16.maskz.vfmadd.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3, i32 4)
224 define <4 x float> @test_m_nr_int_x86_avx512fp16_maskz_cfcmadd_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
225 ; CHECK-LABEL: test_m_nr_int_x86_avx512fp16_maskz_cfcmadd_sh:
227 ; CHECK-NEXT: kmovd %edi, %k1
228 ; CHECK-NEXT: vfcmaddcsh %xmm1, %xmm0, %xmm2 {%k1} {z}
229 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
231 %res = call <4 x float> @llvm.x86.avx512fp16.maskz.vfcmadd.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3, i32 4)
237 define <4 x float> @test_int_x86_avx512fp16_maskz_cfmul_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
238 ; CHECK-LABEL: test_int_x86_avx512fp16_maskz_cfmul_sh:
240 ; CHECK-NEXT: kmovd %edi, %k1
241 ; CHECK-NEXT: vfmulcsh {rd-sae}, %xmm1, %xmm0, %xmm2 {%k1} {z}
242 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
244 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> zeroinitializer, i8 %x3, i32 9)
248 define <4 x float> @test_int_x86_avx512fp16_maskz_cfcmul_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
249 ; CHECK-LABEL: test_int_x86_avx512fp16_maskz_cfcmul_sh:
251 ; CHECK-NEXT: kmovd %edi, %k1
252 ; CHECK-NEXT: vfcmulcsh {rd-sae}, %xmm1, %xmm0, %xmm2 {%k1} {z}
253 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
255 %res = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> zeroinitializer, i8 %x3, i32 9)
259 define <4 x float> @test_int_x86_avx512fp16_maskz_cfmadd_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
260 ; CHECK-LABEL: test_int_x86_avx512fp16_maskz_cfmadd_sh:
262 ; CHECK-NEXT: kmovd %edi, %k1
263 ; CHECK-NEXT: vfmaddcsh {rd-sae}, %xmm1, %xmm0, %xmm2 {%k1} {z}
264 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
266 %res = call <4 x float> @llvm.x86.avx512fp16.maskz.vfmadd.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3, i32 9)
270 define <4 x float> @test_int_x86_avx512fp16_maskz_cfcmadd_sh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3) {
271 ; CHECK-LABEL: test_int_x86_avx512fp16_maskz_cfcmadd_sh:
273 ; CHECK-NEXT: kmovd %edi, %k1
274 ; CHECK-NEXT: vfcmaddcsh {rd-sae}, %xmm1, %xmm0, %xmm2 {%k1} {z}
275 ; CHECK-NEXT: vmovaps %xmm2, %xmm0
277 %res = call <4 x float> @llvm.x86.avx512fp16.maskz.vfcmadd.csh(<4 x float> %x0, <4 x float> %x1, <4 x float> %x2, i8 %x3, i32 9)