Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / X86 / stack-folding-fp-avx512fp16vl.ll
blobe2ed997783f59b8a64467c64bdc9ab48940a12cc
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -O3 -disable-peephole -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+avx512fp16 < %s | FileCheck %s
4 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
5 target triple = "x86_64-unknown-unknown"
7 ; Stack reload folding tests.
9 ; By including a nop call with sideeffects we can force a partial register spill of the
10 ; relevant registers and check that the reload is correctly folded into the instruction.
12 define <8 x half> @stack_fold_addph(<8 x half> %a0, <8 x half> %a1) {
13 ; CHECK-LABEL: stack_fold_addph:
14 ; CHECK:       # %bb.0:
15 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
16 ; CHECK-NEXT:    #APP
17 ; CHECK-NEXT:    nop
18 ; CHECK-NEXT:    #NO_APP
19 ; CHECK-NEXT:    vaddph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
20 ; CHECK-NEXT:    retq
21   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
22   %2 = fadd <8 x half> %a0, %a1
23   ret <8 x half> %2
26 define <16 x half> @stack_fold_addph_ymm(<16 x half> %a0, <16 x half> %a1) {
27 ; CHECK-LABEL: stack_fold_addph_ymm:
28 ; CHECK:       # %bb.0:
29 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
30 ; CHECK-NEXT:    #APP
31 ; CHECK-NEXT:    nop
32 ; CHECK-NEXT:    #NO_APP
33 ; CHECK-NEXT:    vaddph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload
34 ; CHECK-NEXT:    retq
35   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
36   %2 = fadd <16 x half> %a0, %a1
37   ret <16 x half> %2
40 define i8 @stack_fold_cmpph(<8 x half> %a0, <8 x half> %a1) {
41 ; CHECK-LABEL: stack_fold_cmpph:
42 ; CHECK:       # %bb.0:
43 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
44 ; CHECK-NEXT:    #APP
45 ; CHECK-NEXT:    nop
46 ; CHECK-NEXT:    #NO_APP
47 ; CHECK-NEXT:    vcmpeqph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %k0 # 16-byte Folded Reload
48 ; CHECK-NEXT:    kmovd %k0, %eax
49 ; CHECK-NEXT:    # kill: def $al killed $al killed $eax
50 ; CHECK-NEXT:    retq
51   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
52   %res = call <8 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.128(<8 x half> %a0, <8 x half> %a1, i32 0, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>)
53   %2 = bitcast <8 x i1> %res to i8
54   ret i8 %2
56 declare <8 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.128(<8 x half>, <8 x half>, i32,  <8 x i1>)
58 define i16 @stack_fold_cmpph_ymm(<16 x half> %a0, <16 x half> %a1) {
59 ; CHECK-LABEL: stack_fold_cmpph_ymm:
60 ; CHECK:       # %bb.0:
61 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
62 ; CHECK-NEXT:    #APP
63 ; CHECK-NEXT:    nop
64 ; CHECK-NEXT:    #NO_APP
65 ; CHECK-NEXT:    vcmpeqph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %k0 # 32-byte Folded Reload
66 ; CHECK-NEXT:    kmovd %k0, %eax
67 ; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
68 ; CHECK-NEXT:    vzeroupper
69 ; CHECK-NEXT:    retq
70   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
71   %res = call <16 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.256(<16 x half> %a0, <16 x half> %a1, i32 0, <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>)
72   %2 = bitcast <16 x i1> %res to i16
73   ret i16 %2
75 declare <16 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.256(<16 x half>, <16 x half>, i32, <16 x i1>)
77 define <8 x half> @stack_fold_divph(<8 x half> %a0, <8 x half> %a1) {
78 ; CHECK-LABEL: stack_fold_divph:
79 ; CHECK:       # %bb.0:
80 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
81 ; CHECK-NEXT:    #APP
82 ; CHECK-NEXT:    nop
83 ; CHECK-NEXT:    #NO_APP
84 ; CHECK-NEXT:    vdivph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
85 ; CHECK-NEXT:    retq
86   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
87   %2 = fdiv <8 x half> %a0, %a1
88   ret <8 x half> %2
91 define <16 x half> @stack_fold_divph_ymm(<16 x half> %a0, <16 x half> %a1) {
92 ; CHECK-LABEL: stack_fold_divph_ymm:
93 ; CHECK:       # %bb.0:
94 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
95 ; CHECK-NEXT:    #APP
96 ; CHECK-NEXT:    nop
97 ; CHECK-NEXT:    #NO_APP
98 ; CHECK-NEXT:    vdivph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload
99 ; CHECK-NEXT:    retq
100   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
101   %2 = fdiv <16 x half> %a0, %a1
102   ret <16 x half> %2
105 define i8 @stack_fold_fpclassph(<8 x half> %a0) {
106 ; CHECK-LABEL: stack_fold_fpclassph:
107 ; CHECK:       # %bb.0:
108 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
109 ; CHECK-NEXT:    #APP
110 ; CHECK-NEXT:    nop
111 ; CHECK-NEXT:    #NO_APP
112 ; CHECK-NEXT:    vfpclassphx $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 16-byte Folded Reload
113 ; CHECK-NEXT:    kmovd %k0, %eax
114 ; CHECK-NEXT:    # kill: def $al killed $al killed $eax
115 ; CHECK-NEXT:    retq
116   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
117   %2 = call <8 x i1> @llvm.x86.avx512fp16.fpclass.ph.128(<8 x half> %a0, i32 4)
118   %3 = bitcast <8 x i1> %2 to i8
119   ret i8 %3
121 declare <8 x i1> @llvm.x86.avx512fp16.fpclass.ph.128(<8 x half>, i32)
123 define i8 @stack_fold_fpclassph_mask(<8 x half> %a0, ptr %p) {
124 ; CHECK-LABEL: stack_fold_fpclassph_mask:
125 ; CHECK:       # %bb.0:
126 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
127 ; CHECK-NEXT:    #APP
128 ; CHECK-NEXT:    nop
129 ; CHECK-NEXT:    #NO_APP
130 ; CHECK-NEXT:    kmovb (%rdi), %k1
131 ; CHECK-NEXT:    vfpclassphx $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 {%k1} # 16-byte Folded Reload
132 ; CHECK-NEXT:    kmovd %k0, %eax
133 ; CHECK-NEXT:    # kill: def $al killed $al killed $eax
134 ; CHECK-NEXT:    retq
135   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
136   %2 = call <8 x i1> @llvm.x86.avx512fp16.fpclass.ph.128(<8 x half> %a0, i32 4)
137   %mask = load <8 x i1>, ptr %p
138   %3 = and <8 x i1> %2, %mask
139   %4 = bitcast <8 x i1> %3 to i8
140   ret i8 %4
143 define i16 @stack_fold_fpclassph_ymm(<16 x half> %a0) {
144 ; CHECK-LABEL: stack_fold_fpclassph_ymm:
145 ; CHECK:       # %bb.0:
146 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
147 ; CHECK-NEXT:    #APP
148 ; CHECK-NEXT:    nop
149 ; CHECK-NEXT:    #NO_APP
150 ; CHECK-NEXT:    vfpclassphy $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 32-byte Folded Reload
151 ; CHECK-NEXT:    kmovd %k0, %eax
152 ; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
153 ; CHECK-NEXT:    vzeroupper
154 ; CHECK-NEXT:    retq
155   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
156   %2 = call <16 x i1> @llvm.x86.avx512fp16.fpclass.ph.256(<16 x half> %a0, i32 4)
157   %3 = bitcast <16 x i1> %2 to i16
158   ret i16 %3
160 declare <16 x i1> @llvm.x86.avx512fp16.fpclass.ph.256(<16 x half>, i32)
162 define i16 @stack_fold_fpclassph_mask_ymm(<16 x half> %a0, ptr %p) {
163 ; CHECK-LABEL: stack_fold_fpclassph_mask_ymm:
164 ; CHECK:       # %bb.0:
165 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
166 ; CHECK-NEXT:    #APP
167 ; CHECK-NEXT:    nop
168 ; CHECK-NEXT:    #NO_APP
169 ; CHECK-NEXT:    kmovw (%rdi), %k1
170 ; CHECK-NEXT:    vfpclassphy $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 {%k1} # 32-byte Folded Reload
171 ; CHECK-NEXT:    kmovd %k0, %eax
172 ; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
173 ; CHECK-NEXT:    vzeroupper
174 ; CHECK-NEXT:    retq
175   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
176   %2 = call <16 x i1> @llvm.x86.avx512fp16.fpclass.ph.256(<16 x half> %a0, i32 4)
177   %mask = load <16 x i1>, ptr %p
178   %3 = and <16 x i1> %2, %mask
179   %4 = bitcast <16 x i1> %3 to i16
180   ret i16 %4
183 define <8 x half> @stack_fold_getexpph(<8 x half> %a0) {
184 ; CHECK-LABEL: stack_fold_getexpph:
185 ; CHECK:       # %bb.0:
186 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
187 ; CHECK-NEXT:    #APP
188 ; CHECK-NEXT:    nop
189 ; CHECK-NEXT:    #NO_APP
190 ; CHECK-NEXT:    vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
191 ; CHECK-NEXT:    retq
192   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
193   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.ph.128(<8 x half> %a0, <8 x half> undef, i8 -1)
194   ret <8 x half> %2
196 declare <8 x half> @llvm.x86.avx512fp16.mask.getexp.ph.128(<8 x half>, <8 x half>, i8)
198 define <8 x half> @stack_fold_getexpph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {
199 ; CHECK-LABEL: stack_fold_getexpph_mask:
200 ; CHECK:       # %bb.0:
201 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
202 ; CHECK-NEXT:    kmovd %esi, %k1
203 ; CHECK-NEXT:    #APP
204 ; CHECK-NEXT:    nop
205 ; CHECK-NEXT:    #NO_APP
206 ; CHECK-NEXT:    vmovaps (%rdi), %xmm1
207 ; CHECK-NEXT:    vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload
208 ; CHECK-NEXT:    vmovaps %xmm1, %xmm0
209 ; CHECK-NEXT:    retq
210   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
211   %2 = load <8 x half>, ptr %passthru
212   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.ph.128(<8 x half> %a0, <8 x half> %2, i8 %mask)
213   ret <8 x half> %3
216 define <8 x half> @stack_fold_getexpph_maskz(<8 x half> %a0, ptr %mask) {
217 ; CHECK-LABEL: stack_fold_getexpph_maskz:
218 ; CHECK:       # %bb.0:
219 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
220 ; CHECK-NEXT:    #APP
221 ; CHECK-NEXT:    nop
222 ; CHECK-NEXT:    #NO_APP
223 ; CHECK-NEXT:    kmovb (%rdi), %k1
224 ; CHECK-NEXT:    vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload
225 ; CHECK-NEXT:    retq
226   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
227   %2 = load i8, ptr %mask
228   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.ph.128(<8 x half> %a0, <8 x half> zeroinitializer, i8 %2)
229   ret <8 x half> %3
232 define <16 x half> @stack_fold_getexpph_ymm(<16 x half> %a0) {
233 ; CHECK-LABEL: stack_fold_getexpph_ymm:
234 ; CHECK:       # %bb.0:
235 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
236 ; CHECK-NEXT:    #APP
237 ; CHECK-NEXT:    nop
238 ; CHECK-NEXT:    #NO_APP
239 ; CHECK-NEXT:    vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload
240 ; CHECK-NEXT:    retq
241   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
242   %2 = call <16 x half> @llvm.x86.avx512fp16.mask.getexp.ph.256(<16 x half> %a0, <16 x half> undef, i16 -1)
243   ret <16 x half> %2
245 declare <16 x half> @llvm.x86.avx512fp16.mask.getexp.ph.256(<16 x half>, <16 x half>, i16)
247 define <16 x half> @stack_fold_getexpph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {
248 ; CHECK-LABEL: stack_fold_getexpph_mask_ymm:
249 ; CHECK:       # %bb.0:
250 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
251 ; CHECK-NEXT:    kmovd %esi, %k1
252 ; CHECK-NEXT:    #APP
253 ; CHECK-NEXT:    nop
254 ; CHECK-NEXT:    #NO_APP
255 ; CHECK-NEXT:    vmovaps (%rdi), %ymm1
256 ; CHECK-NEXT:    vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload
257 ; CHECK-NEXT:    vmovaps %ymm1, %ymm0
258 ; CHECK-NEXT:    retq
259   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
260   %2 = load <16 x half>, ptr %passthru
261   %3 = call <16 x half> @llvm.x86.avx512fp16.mask.getexp.ph.256(<16 x half> %a0, <16 x half> %2, i16 %mask)
262   ret <16 x half> %3
265 define <16 x half> @stack_fold_getexpph_maskz_ymm(<16 x half> %a0, ptr %mask) {
266 ; CHECK-LABEL: stack_fold_getexpph_maskz_ymm:
267 ; CHECK:       # %bb.0:
268 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
269 ; CHECK-NEXT:    #APP
270 ; CHECK-NEXT:    nop
271 ; CHECK-NEXT:    #NO_APP
272 ; CHECK-NEXT:    kmovw (%rdi), %k1
273 ; CHECK-NEXT:    vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload
274 ; CHECK-NEXT:    retq
275   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
276   %2 = load i16, ptr %mask
277   %3 = call <16 x half> @llvm.x86.avx512fp16.mask.getexp.ph.256(<16 x half> %a0, <16 x half> zeroinitializer, i16 %2)
278   ret <16 x half> %3
281 define <8 x half> @stack_fold_getmantph(<8 x half> %a0) {
282 ; CHECK-LABEL: stack_fold_getmantph:
283 ; CHECK:       # %bb.0:
284 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
285 ; CHECK-NEXT:    #APP
286 ; CHECK-NEXT:    nop
287 ; CHECK-NEXT:    #NO_APP
288 ; CHECK-NEXT:    vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
289 ; CHECK-NEXT:    retq
290   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
291   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.ph.128(<8 x half> %a0, i32 8, <8 x half> undef, i8 -1)
292   ret <8 x half> %2
294 declare <8 x half> @llvm.x86.avx512fp16.mask.getmant.ph.128(<8 x half>, i32, <8 x half>, i8)
296 define <8 x half> @stack_fold_getmantph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {
297 ; CHECK-LABEL: stack_fold_getmantph_mask:
298 ; CHECK:       # %bb.0:
299 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
300 ; CHECK-NEXT:    kmovd %esi, %k1
301 ; CHECK-NEXT:    #APP
302 ; CHECK-NEXT:    nop
303 ; CHECK-NEXT:    #NO_APP
304 ; CHECK-NEXT:    vmovaps (%rdi), %xmm1
305 ; CHECK-NEXT:    vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload
306 ; CHECK-NEXT:    vmovaps %xmm1, %xmm0
307 ; CHECK-NEXT:    retq
308   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
309   %2 = load <8 x half>, ptr %passthru
310   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.ph.128(<8 x half> %a0, i32 8, <8 x half> %2, i8 %mask)
311   ret <8 x half> %3
314 define <8 x half> @stack_fold_getmantph_maskz(<8 x half> %a0, ptr %mask) {
315 ; CHECK-LABEL: stack_fold_getmantph_maskz:
316 ; CHECK:       # %bb.0:
317 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
318 ; CHECK-NEXT:    #APP
319 ; CHECK-NEXT:    nop
320 ; CHECK-NEXT:    #NO_APP
321 ; CHECK-NEXT:    kmovb (%rdi), %k1
322 ; CHECK-NEXT:    vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload
323 ; CHECK-NEXT:    retq
324   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
325   %2 = load i8, ptr %mask
326   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.ph.128(<8 x half> %a0, i32 8, <8 x half> zeroinitializer, i8 %2)
327   ret <8 x half> %3
330 define <16 x half> @stack_fold_getmantph_ymm(<16 x half> %a0) {
331 ; CHECK-LABEL: stack_fold_getmantph_ymm:
332 ; CHECK:       # %bb.0:
333 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
334 ; CHECK-NEXT:    #APP
335 ; CHECK-NEXT:    nop
336 ; CHECK-NEXT:    #NO_APP
337 ; CHECK-NEXT:    vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload
338 ; CHECK-NEXT:    retq
339   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
340   %2 = call <16 x half> @llvm.x86.avx512fp16.mask.getmant.ph.256(<16 x half> %a0, i32 8, <16 x half> undef, i16 -1)
341   ret <16 x half> %2
343 declare <16 x half> @llvm.x86.avx512fp16.mask.getmant.ph.256(<16 x half>, i32, <16 x half>, i16)
345 define <16 x half> @stack_fold_getmantph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {
346 ; CHECK-LABEL: stack_fold_getmantph_mask_ymm:
347 ; CHECK:       # %bb.0:
348 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
349 ; CHECK-NEXT:    kmovd %esi, %k1
350 ; CHECK-NEXT:    #APP
351 ; CHECK-NEXT:    nop
352 ; CHECK-NEXT:    #NO_APP
353 ; CHECK-NEXT:    vmovaps (%rdi), %ymm1
354 ; CHECK-NEXT:    vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload
355 ; CHECK-NEXT:    vmovaps %ymm1, %ymm0
356 ; CHECK-NEXT:    retq
357   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
358   %2 = load <16 x half>, ptr %passthru
359   %3 = call <16 x half> @llvm.x86.avx512fp16.mask.getmant.ph.256(<16 x half> %a0, i32 8, <16 x half> %2, i16 %mask)
360   ret <16 x half> %3
363 define <16 x half> @stack_fold_getmantph_maskz_ymm(<16 x half> %a0, ptr %mask) {
364 ; CHECK-LABEL: stack_fold_getmantph_maskz_ymm:
365 ; CHECK:       # %bb.0:
366 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
367 ; CHECK-NEXT:    #APP
368 ; CHECK-NEXT:    nop
369 ; CHECK-NEXT:    #NO_APP
370 ; CHECK-NEXT:    kmovw (%rdi), %k1
371 ; CHECK-NEXT:    vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload
372 ; CHECK-NEXT:    retq
373   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
374   %2 = load i16, ptr %mask
375   %3 = call <16 x half> @llvm.x86.avx512fp16.mask.getmant.ph.256(<16 x half> %a0, i32 8, <16 x half> zeroinitializer, i16 %2)
376   ret <16 x half> %3
379 define <8 x half> @stack_fold_maxph(<8 x half> %a0, <8 x half> %a1) #0 {
380 ; CHECK-LABEL: stack_fold_maxph:
381 ; CHECK:       # %bb.0:
382 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
383 ; CHECK-NEXT:    #APP
384 ; CHECK-NEXT:    nop
385 ; CHECK-NEXT:    #NO_APP
386 ; CHECK-NEXT:    vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
387 ; CHECK-NEXT:    retq
388   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
389   %2 = call <8 x half> @llvm.x86.avx512fp16.max.ph.128(<8 x half> %a0, <8 x half> %a1)
390   ret <8 x half> %2
392 declare <8 x half> @llvm.x86.avx512fp16.max.ph.128(<8 x half>, <8 x half>) nounwind readnone
394 define <8 x half> @stack_fold_maxph_commutable(<8 x half> %a0, <8 x half> %a1) #1 {
395 ; CHECK-LABEL: stack_fold_maxph_commutable:
396 ; CHECK:       # %bb.0:
397 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
398 ; CHECK-NEXT:    #APP
399 ; CHECK-NEXT:    nop
400 ; CHECK-NEXT:    #NO_APP
401 ; CHECK-NEXT:    vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
402 ; CHECK-NEXT:    retq
403   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
404   %2 = call <8 x half> @llvm.x86.avx512fp16.max.ph.128(<8 x half> %a0, <8 x half> %a1)
405   ret <8 x half> %2
408 define <16 x half> @stack_fold_maxph_ymm(<16 x half> %a0, <16 x half> %a1) #0 {
409 ; CHECK-LABEL: stack_fold_maxph_ymm:
410 ; CHECK:       # %bb.0:
411 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
412 ; CHECK-NEXT:    #APP
413 ; CHECK-NEXT:    nop
414 ; CHECK-NEXT:    #NO_APP
415 ; CHECK-NEXT:    vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload
416 ; CHECK-NEXT:    retq
417   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
418   %2 = call <16 x half> @llvm.x86.avx512fp16.max.ph.256(<16 x half> %a0, <16 x half> %a1)
419   ret <16 x half> %2
421 declare <16 x half> @llvm.x86.avx512fp16.max.ph.256(<16 x half>, <16 x half>) nounwind readnone
423 define <16 x half> @stack_fold_maxph_ymm_commutable(<16 x half> %a0, <16 x half> %a1) #1 {
424 ; CHECK-LABEL: stack_fold_maxph_ymm_commutable:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
427 ; CHECK-NEXT:    #APP
428 ; CHECK-NEXT:    nop
429 ; CHECK-NEXT:    #NO_APP
430 ; CHECK-NEXT:    vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload
431 ; CHECK-NEXT:    retq
432   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
433   %2 = call <16 x half> @llvm.x86.avx512fp16.max.ph.256(<16 x half> %a0, <16 x half> %a1)
434   ret <16 x half> %2
437 define <8 x half> @stack_fold_minph(<8 x half> %a0, <8 x half> %a1) #0 {
438 ; CHECK-LABEL: stack_fold_minph:
439 ; CHECK:       # %bb.0:
440 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
441 ; CHECK-NEXT:    #APP
442 ; CHECK-NEXT:    nop
443 ; CHECK-NEXT:    #NO_APP
444 ; CHECK-NEXT:    vminph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
445 ; CHECK-NEXT:    retq
446   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
447   %2 = call <8 x half> @llvm.x86.avx512fp16.min.ph.128(<8 x half> %a0, <8 x half> %a1)
448   ret <8 x half> %2
450 declare <8 x half> @llvm.x86.avx512fp16.min.ph.128(<8 x half>, <8 x half>) nounwind readnone
452 define <8 x half> @stack_fold_minph_commutable(<8 x half> %a0, <8 x half> %a1) #1 {
453 ; CHECK-LABEL: stack_fold_minph_commutable:
454 ; CHECK:       # %bb.0:
455 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
456 ; CHECK-NEXT:    #APP
457 ; CHECK-NEXT:    nop
458 ; CHECK-NEXT:    #NO_APP
459 ; CHECK-NEXT:    vminph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
460 ; CHECK-NEXT:    retq
461   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
462   %2 = call <8 x half> @llvm.x86.avx512fp16.min.ph.128(<8 x half> %a0, <8 x half> %a1)
463   ret <8 x half> %2
466 define <16 x half> @stack_fold_minph_ymm(<16 x half> %a0, <16 x half> %a1) #0 {
467 ; CHECK-LABEL: stack_fold_minph_ymm:
468 ; CHECK:       # %bb.0:
469 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
470 ; CHECK-NEXT:    #APP
471 ; CHECK-NEXT:    nop
472 ; CHECK-NEXT:    #NO_APP
473 ; CHECK-NEXT:    vminph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload
474 ; CHECK-NEXT:    retq
475   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
476   %2 = call <16 x half> @llvm.x86.avx512fp16.min.ph.256(<16 x half> %a0, <16 x half> %a1)
477   ret <16 x half> %2
479 declare <16 x half> @llvm.x86.avx512fp16.min.ph.256(<16 x half>, <16 x half>) nounwind readnone
481 define <16 x half> @stack_fold_minph_ymm_commutable(<16 x half> %a0, <16 x half> %a1) #1 {
482 ; CHECK-LABEL: stack_fold_minph_ymm_commutable:
483 ; CHECK:       # %bb.0:
484 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
485 ; CHECK-NEXT:    #APP
486 ; CHECK-NEXT:    nop
487 ; CHECK-NEXT:    #NO_APP
488 ; CHECK-NEXT:    vminph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload
489 ; CHECK-NEXT:    retq
490   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
491   %2 = call <16 x half> @llvm.x86.avx512fp16.min.ph.256(<16 x half> %a0, <16 x half> %a1)
492   ret <16 x half> %2
495 define <8 x half> @stack_fold_mulph(<8 x half> %a0, <8 x half> %a1) {
496 ; CHECK-LABEL: stack_fold_mulph:
497 ; CHECK:       # %bb.0:
498 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
499 ; CHECK-NEXT:    #APP
500 ; CHECK-NEXT:    nop
501 ; CHECK-NEXT:    #NO_APP
502 ; CHECK-NEXT:    vmulph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
503 ; CHECK-NEXT:    retq
504   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
505   %2 = fmul <8 x half> %a0, %a1
506   ret <8 x half> %2
509 define <16 x half> @stack_fold_mulph_ymm(<16 x half> %a0, <16 x half> %a1) {
510 ; CHECK-LABEL: stack_fold_mulph_ymm:
511 ; CHECK:       # %bb.0:
512 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
513 ; CHECK-NEXT:    #APP
514 ; CHECK-NEXT:    nop
515 ; CHECK-NEXT:    #NO_APP
516 ; CHECK-NEXT:    vmulph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload
517 ; CHECK-NEXT:    retq
518   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
519   %2 = fmul <16 x half> %a0, %a1
520   ret <16 x half> %2
523 define <8 x half> @stack_fold_rcpph(<8 x half> %a0) {
524 ; CHECK-LABEL: stack_fold_rcpph:
525 ; CHECK:       # %bb.0:
526 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
527 ; CHECK-NEXT:    #APP
528 ; CHECK-NEXT:    nop
529 ; CHECK-NEXT:    #NO_APP
530 ; CHECK-NEXT:    vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
531 ; CHECK-NEXT:    retq
532   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
533   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.rcp.ph.128(<8 x half> %a0, <8 x half> undef, i8 -1)
534   ret <8 x half> %2
536 declare <8 x half> @llvm.x86.avx512fp16.mask.rcp.ph.128(<8 x half>, <8 x half>, i8)
538 define <8 x half> @stack_fold_rcpph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {
539 ; CHECK-LABEL: stack_fold_rcpph_mask:
540 ; CHECK:       # %bb.0:
541 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
542 ; CHECK-NEXT:    kmovd %esi, %k1
543 ; CHECK-NEXT:    #APP
544 ; CHECK-NEXT:    nop
545 ; CHECK-NEXT:    #NO_APP
546 ; CHECK-NEXT:    vmovaps (%rdi), %xmm1
547 ; CHECK-NEXT:    vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload
548 ; CHECK-NEXT:    vmovaps %xmm1, %xmm0
549 ; CHECK-NEXT:    retq
550   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
551   %2 = load <8 x half>, ptr %passthru
552   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rcp.ph.128(<8 x half> %a0, <8 x half> %2, i8 %mask)
553   ret <8 x half> %3
556 define <8 x half> @stack_fold_rcpph_maskz(<8 x half> %a0, ptr %mask) {
557 ; CHECK-LABEL: stack_fold_rcpph_maskz:
558 ; CHECK:       # %bb.0:
559 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
560 ; CHECK-NEXT:    #APP
561 ; CHECK-NEXT:    nop
562 ; CHECK-NEXT:    #NO_APP
563 ; CHECK-NEXT:    kmovb (%rdi), %k1
564 ; CHECK-NEXT:    vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload
565 ; CHECK-NEXT:    retq
566   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
567   %2 = load i8, ptr %mask
568   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rcp.ph.128(<8 x half> %a0, <8 x half> zeroinitializer, i8 %2)
569   ret <8 x half> %3
572 define <16 x half> @stack_fold_rcpph_ymm(<16 x half> %a0) {
573 ; CHECK-LABEL: stack_fold_rcpph_ymm:
574 ; CHECK:       # %bb.0:
575 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
576 ; CHECK-NEXT:    #APP
577 ; CHECK-NEXT:    nop
578 ; CHECK-NEXT:    #NO_APP
579 ; CHECK-NEXT:    vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload
580 ; CHECK-NEXT:    retq
581   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
582   %2 = call <16 x half> @llvm.x86.avx512fp16.mask.rcp.ph.256(<16 x half> %a0, <16 x half> undef, i16 -1)
583   ret <16 x half> %2
585 declare <16 x half> @llvm.x86.avx512fp16.mask.rcp.ph.256(<16 x half>, <16 x half>, i16)
587 define <16 x half> @stack_fold_rcpph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {
588 ; CHECK-LABEL: stack_fold_rcpph_mask_ymm:
589 ; CHECK:       # %bb.0:
590 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
591 ; CHECK-NEXT:    kmovd %esi, %k1
592 ; CHECK-NEXT:    #APP
593 ; CHECK-NEXT:    nop
594 ; CHECK-NEXT:    #NO_APP
595 ; CHECK-NEXT:    vmovaps (%rdi), %ymm1
596 ; CHECK-NEXT:    vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload
597 ; CHECK-NEXT:    vmovaps %ymm1, %ymm0
598 ; CHECK-NEXT:    retq
599   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
600   %2 = load <16 x half>, ptr %passthru
601   %3 = call <16 x half> @llvm.x86.avx512fp16.mask.rcp.ph.256(<16 x half> %a0, <16 x half> %2, i16 %mask)
602   ret <16 x half> %3
605 define <16 x half> @stack_fold_rcpph_maskz_ymm(<16 x half> %a0, ptr %mask) {
606 ; CHECK-LABEL: stack_fold_rcpph_maskz_ymm:
607 ; CHECK:       # %bb.0:
608 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
609 ; CHECK-NEXT:    #APP
610 ; CHECK-NEXT:    nop
611 ; CHECK-NEXT:    #NO_APP
612 ; CHECK-NEXT:    kmovw (%rdi), %k1
613 ; CHECK-NEXT:    vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload
614 ; CHECK-NEXT:    retq
615   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
616   %2 = load i16, ptr %mask
617   %3 = call <16 x half> @llvm.x86.avx512fp16.mask.rcp.ph.256(<16 x half> %a0, <16 x half> zeroinitializer, i16 %2)
618   ret <16 x half> %3
621 define <8 x half> @stack_fold_reduceph(<8 x half> %a0) {
622 ; CHECK-LABEL: stack_fold_reduceph:
623 ; CHECK:       # %bb.0:
624 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
625 ; CHECK-NEXT:    #APP
626 ; CHECK-NEXT:    nop
627 ; CHECK-NEXT:    #NO_APP
628 ; CHECK-NEXT:    vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
629 ; CHECK-NEXT:    retq
630   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
631   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.ph.128(<8 x half> %a0, i32 8, <8 x half> undef, i8 -1)
632   ret <8 x half> %2
634 declare <8 x half> @llvm.x86.avx512fp16.mask.reduce.ph.128(<8 x half>, i32, <8 x half>, i8)
636 define <8 x half> @stack_fold_reduceph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {
637 ; CHECK-LABEL: stack_fold_reduceph_mask:
638 ; CHECK:       # %bb.0:
639 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
640 ; CHECK-NEXT:    kmovd %esi, %k1
641 ; CHECK-NEXT:    #APP
642 ; CHECK-NEXT:    nop
643 ; CHECK-NEXT:    #NO_APP
644 ; CHECK-NEXT:    vmovaps (%rdi), %xmm1
645 ; CHECK-NEXT:    vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload
646 ; CHECK-NEXT:    vmovaps %xmm1, %xmm0
647 ; CHECK-NEXT:    retq
648   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
649   %2 = load <8 x half>, ptr %passthru
650   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.ph.128(<8 x half> %a0, i32 8, <8 x half> %2, i8 %mask)
651   ret <8 x half> %3
654 define <8 x half> @stack_fold_reduceph_maskz(<8 x half> %a0, ptr %mask) {
655 ; CHECK-LABEL: stack_fold_reduceph_maskz:
656 ; CHECK:       # %bb.0:
657 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
658 ; CHECK-NEXT:    #APP
659 ; CHECK-NEXT:    nop
660 ; CHECK-NEXT:    #NO_APP
661 ; CHECK-NEXT:    kmovb (%rdi), %k1
662 ; CHECK-NEXT:    vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload
663 ; CHECK-NEXT:    retq
664   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
665   %2 = load i8, ptr %mask
666   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.ph.128(<8 x half> %a0, i32 8, <8 x half> zeroinitializer, i8 %2)
667   ret <8 x half> %3
670 define <16 x half> @stack_fold_reduceph_ymm(<16 x half> %a0) {
671 ; CHECK-LABEL: stack_fold_reduceph_ymm:
672 ; CHECK:       # %bb.0:
673 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
674 ; CHECK-NEXT:    #APP
675 ; CHECK-NEXT:    nop
676 ; CHECK-NEXT:    #NO_APP
677 ; CHECK-NEXT:    vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload
678 ; CHECK-NEXT:    retq
679   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
680   %2 = call <16 x half> @llvm.x86.avx512fp16.mask.reduce.ph.256(<16 x half> %a0, i32 8, <16 x half> undef, i16 -1)
681   ret <16 x half> %2
683 declare <16 x half> @llvm.x86.avx512fp16.mask.reduce.ph.256(<16 x half>, i32, <16 x half>, i16)
685 define <16 x half> @stack_fold_reduceph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {
686 ; CHECK-LABEL: stack_fold_reduceph_mask_ymm:
687 ; CHECK:       # %bb.0:
688 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
689 ; CHECK-NEXT:    kmovd %esi, %k1
690 ; CHECK-NEXT:    #APP
691 ; CHECK-NEXT:    nop
692 ; CHECK-NEXT:    #NO_APP
693 ; CHECK-NEXT:    vmovaps (%rdi), %ymm1
694 ; CHECK-NEXT:    vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload
695 ; CHECK-NEXT:    vmovaps %ymm1, %ymm0
696 ; CHECK-NEXT:    retq
697   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
698   %2 = load <16 x half>, ptr %passthru
699   %3 = call <16 x half> @llvm.x86.avx512fp16.mask.reduce.ph.256(<16 x half> %a0, i32 8, <16 x half> %2, i16 %mask)
700   ret <16 x half> %3
703 define <16 x half> @stack_fold_reduceph_maskz_ymm(<16 x half> %a0, ptr %mask) {
704 ; CHECK-LABEL: stack_fold_reduceph_maskz_ymm:
705 ; CHECK:       # %bb.0:
706 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
707 ; CHECK-NEXT:    #APP
708 ; CHECK-NEXT:    nop
709 ; CHECK-NEXT:    #NO_APP
710 ; CHECK-NEXT:    kmovw (%rdi), %k1
711 ; CHECK-NEXT:    vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload
712 ; CHECK-NEXT:    retq
713   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
714   %2 = load i16, ptr %mask
715   %3 = call <16 x half> @llvm.x86.avx512fp16.mask.reduce.ph.256(<16 x half> %a0, i32 8, <16 x half> zeroinitializer, i16 %2)
716   ret <16 x half> %3
719 define <8 x half> @stack_fold_rndscaleph(<8 x half> %a0) {
720 ; CHECK-LABEL: stack_fold_rndscaleph:
721 ; CHECK:       # %bb.0:
722 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
723 ; CHECK-NEXT:    #APP
724 ; CHECK-NEXT:    nop
725 ; CHECK-NEXT:    #NO_APP
726 ; CHECK-NEXT:    vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
727 ; CHECK-NEXT:    retq
728   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
729   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.128(<8 x half> %a0, i32 8, <8 x half> undef, i8 -1)
730   ret <8 x half> %2
732 declare <8 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.128(<8 x half>, i32, <8 x half>, i8)
734 define <8 x half> @stack_fold_rndscaleph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {
735 ; CHECK-LABEL: stack_fold_rndscaleph_mask:
736 ; CHECK:       # %bb.0:
737 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
738 ; CHECK-NEXT:    kmovd %esi, %k1
739 ; CHECK-NEXT:    #APP
740 ; CHECK-NEXT:    nop
741 ; CHECK-NEXT:    #NO_APP
742 ; CHECK-NEXT:    vmovaps (%rdi), %xmm1
743 ; CHECK-NEXT:    vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload
744 ; CHECK-NEXT:    vmovaps %xmm1, %xmm0
745 ; CHECK-NEXT:    retq
746   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
747   %2 = load <8 x half>, ptr %passthru
748   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.128(<8 x half> %a0, i32 8, <8 x half> %2, i8 %mask)
749   ret <8 x half> %3
752 define <8 x half> @stack_fold_rndscaleph_maskz(<8 x half> %a0, ptr %mask) {
753 ; CHECK-LABEL: stack_fold_rndscaleph_maskz:
754 ; CHECK:       # %bb.0:
755 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
756 ; CHECK-NEXT:    #APP
757 ; CHECK-NEXT:    nop
758 ; CHECK-NEXT:    #NO_APP
759 ; CHECK-NEXT:    kmovb (%rdi), %k1
760 ; CHECK-NEXT:    vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload
761 ; CHECK-NEXT:    retq
762   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
763   %2 = load i8, ptr %mask
764   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.128(<8 x half> %a0, i32 8, <8 x half> zeroinitializer, i8 %2)
765   ret <8 x half> %3
768 define <16 x half> @stack_fold_rndscaleph_ymm(<16 x half> %a0) {
769 ; CHECK-LABEL: stack_fold_rndscaleph_ymm:
770 ; CHECK:       # %bb.0:
771 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
772 ; CHECK-NEXT:    #APP
773 ; CHECK-NEXT:    nop
774 ; CHECK-NEXT:    #NO_APP
775 ; CHECK-NEXT:    vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload
776 ; CHECK-NEXT:    retq
777   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
778   %2 = call <16 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.256(<16 x half> %a0, i32 8, <16 x half> undef, i16 -1)
779   ret <16 x half> %2
781 declare <16 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.256(<16 x half>, i32, <16 x half>, i16)
783 define <16 x half> @stack_fold_rndscaleph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {
784 ; CHECK-LABEL: stack_fold_rndscaleph_mask_ymm:
785 ; CHECK:       # %bb.0:
786 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
787 ; CHECK-NEXT:    kmovd %esi, %k1
788 ; CHECK-NEXT:    #APP
789 ; CHECK-NEXT:    nop
790 ; CHECK-NEXT:    #NO_APP
791 ; CHECK-NEXT:    vmovaps (%rdi), %ymm1
792 ; CHECK-NEXT:    vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload
793 ; CHECK-NEXT:    vmovaps %ymm1, %ymm0
794 ; CHECK-NEXT:    retq
795   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
796   %2 = load <16 x half>, ptr %passthru
797   %3 = call <16 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.256(<16 x half> %a0, i32 8, <16 x half> %2, i16 %mask)
798   ret <16 x half> %3
801 define <16 x half> @stack_fold_rndscaleph_maskz_ymm(<16 x half> %a0, ptr %mask) {
802 ; CHECK-LABEL: stack_fold_rndscaleph_maskz_ymm:
803 ; CHECK:       # %bb.0:
804 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
805 ; CHECK-NEXT:    #APP
806 ; CHECK-NEXT:    nop
807 ; CHECK-NEXT:    #NO_APP
808 ; CHECK-NEXT:    kmovw (%rdi), %k1
809 ; CHECK-NEXT:    vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload
810 ; CHECK-NEXT:    retq
811   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
812   %2 = load i16, ptr %mask
813   %3 = call <16 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.256(<16 x half> %a0, i32 8, <16 x half> zeroinitializer, i16 %2)
814   ret <16 x half> %3
817 define <8 x half> @stack_fold_rsqrtph(<8 x half> %a0) {
818 ; CHECK-LABEL: stack_fold_rsqrtph:
819 ; CHECK:       # %bb.0:
820 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
821 ; CHECK-NEXT:    #APP
822 ; CHECK-NEXT:    nop
823 ; CHECK-NEXT:    #NO_APP
824 ; CHECK-NEXT:    vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
825 ; CHECK-NEXT:    retq
826   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
827   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.128(<8 x half> %a0, <8 x half> undef, i8 -1)
828   ret <8 x half> %2
830 declare <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.128(<8 x half>, <8 x half>, i8)
832 define <8 x half> @stack_fold_rsqrtph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {
833 ; CHECK-LABEL: stack_fold_rsqrtph_mask:
834 ; CHECK:       # %bb.0:
835 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
836 ; CHECK-NEXT:    kmovd %esi, %k1
837 ; CHECK-NEXT:    #APP
838 ; CHECK-NEXT:    nop
839 ; CHECK-NEXT:    #NO_APP
840 ; CHECK-NEXT:    vmovaps (%rdi), %xmm1
841 ; CHECK-NEXT:    vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload
842 ; CHECK-NEXT:    vmovaps %xmm1, %xmm0
843 ; CHECK-NEXT:    retq
844   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
845   %2 = load <8 x half>, ptr %passthru
846   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.128(<8 x half> %a0, <8 x half> %2, i8 %mask)
847   ret <8 x half> %3
850 define <8 x half> @stack_fold_rsqrtph_maskz(<8 x half> %a0, ptr %mask) {
851 ; CHECK-LABEL: stack_fold_rsqrtph_maskz:
852 ; CHECK:       # %bb.0:
853 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
854 ; CHECK-NEXT:    #APP
855 ; CHECK-NEXT:    nop
856 ; CHECK-NEXT:    #NO_APP
857 ; CHECK-NEXT:    kmovb (%rdi), %k1
858 ; CHECK-NEXT:    vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload
859 ; CHECK-NEXT:    retq
860   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
861   %2 = load i8, ptr %mask
862   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.128(<8 x half> %a0, <8 x half> zeroinitializer, i8 %2)
863   ret <8 x half> %3
866 define <16 x half> @stack_fold_rsqrtph_ymm(<16 x half> %a0) {
867 ; CHECK-LABEL: stack_fold_rsqrtph_ymm:
868 ; CHECK:       # %bb.0:
869 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
870 ; CHECK-NEXT:    #APP
871 ; CHECK-NEXT:    nop
872 ; CHECK-NEXT:    #NO_APP
873 ; CHECK-NEXT:    vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload
874 ; CHECK-NEXT:    retq
875   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
876   %2 = call <16 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.256(<16 x half> %a0, <16 x half> undef, i16 -1)
877   ret <16 x half> %2
879 declare <16 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.256(<16 x half>, <16 x half>, i16)
881 define <16 x half> @stack_fold_rsqrtph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {
882 ; CHECK-LABEL: stack_fold_rsqrtph_mask_ymm:
883 ; CHECK:       # %bb.0:
884 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
885 ; CHECK-NEXT:    kmovd %esi, %k1
886 ; CHECK-NEXT:    #APP
887 ; CHECK-NEXT:    nop
888 ; CHECK-NEXT:    #NO_APP
889 ; CHECK-NEXT:    vmovaps (%rdi), %ymm1
890 ; CHECK-NEXT:    vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload
891 ; CHECK-NEXT:    vmovaps %ymm1, %ymm0
892 ; CHECK-NEXT:    retq
893   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
894   %2 = load <16 x half>, ptr %passthru
895   %3 = call <16 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.256(<16 x half> %a0, <16 x half> %2, i16 %mask)
896   ret <16 x half> %3
899 define <16 x half> @stack_fold_rsqrtph_maskz_ymm(<16 x half> %a0, ptr %mask) {
900 ; CHECK-LABEL: stack_fold_rsqrtph_maskz_ymm:
901 ; CHECK:       # %bb.0:
902 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
903 ; CHECK-NEXT:    #APP
904 ; CHECK-NEXT:    nop
905 ; CHECK-NEXT:    #NO_APP
906 ; CHECK-NEXT:    kmovw (%rdi), %k1
907 ; CHECK-NEXT:    vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload
908 ; CHECK-NEXT:    retq
909   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
910   %2 = load i16, ptr %mask
911   %3 = call <16 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.256(<16 x half> %a0, <16 x half> zeroinitializer, i16 %2)
912   ret <16 x half> %3
915 define <8 x half> @stack_fold_sqrtph(<8 x half> %a0) {
916 ; CHECK-LABEL: stack_fold_sqrtph:
917 ; CHECK:       # %bb.0:
918 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
919 ; CHECK-NEXT:    #APP
920 ; CHECK-NEXT:    nop
921 ; CHECK-NEXT:    #NO_APP
922 ; CHECK-NEXT:    vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
923 ; CHECK-NEXT:    retq
924   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
925   %2 = call <8 x half> @llvm.sqrt.v8f16(<8 x half> %a0)
926   ret <8 x half> %2
928 declare <8 x half> @llvm.sqrt.v8f16(<8 x half>)
930 define <8 x half> @stack_fold_sqrtph_mask(<8 x half> %a0, ptr %passthru, i8 %mask) {
931 ; CHECK-LABEL: stack_fold_sqrtph_mask:
932 ; CHECK:       # %bb.0:
933 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
934 ; CHECK-NEXT:    #APP
935 ; CHECK-NEXT:    nop
936 ; CHECK-NEXT:    #NO_APP
937 ; CHECK-NEXT:    vmovaps (%rdi), %xmm1
938 ; CHECK-NEXT:    kmovd %esi, %k1
939 ; CHECK-NEXT:    vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 {%k1} # 16-byte Folded Reload
940 ; CHECK-NEXT:    vmovaps %xmm1, %xmm0
941 ; CHECK-NEXT:    retq
942   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
943   %2 = load <8 x half>, ptr %passthru
944   %3 = call <8 x half> @llvm.sqrt.v8f16(<8 x half> %a0)
945   %4 = bitcast i8 %mask to <8 x i1>
946   %5 = select <8 x i1> %4, <8 x half> %3, <8 x half> %2
947   ret <8 x half> %5
950 define <8 x half> @stack_fold_sqrtph_maskz(<8 x half> %a0, ptr %mask) {
951 ; CHECK-LABEL: stack_fold_sqrtph_maskz:
952 ; CHECK:       # %bb.0:
953 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
954 ; CHECK-NEXT:    #APP
955 ; CHECK-NEXT:    nop
956 ; CHECK-NEXT:    #NO_APP
957 ; CHECK-NEXT:    kmovb (%rdi), %k1
958 ; CHECK-NEXT:    vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 {%k1} {z} # 16-byte Folded Reload
959 ; CHECK-NEXT:    retq
960   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
961   %2 = load i8, ptr %mask
962   %3 = call <8 x half> @llvm.sqrt.v8f16(<8 x half> %a0)
963   %4 = bitcast i8 %2 to <8 x i1>
964   %5 = select <8 x i1> %4, <8 x half> %3, <8 x half> zeroinitializer
965   ret <8 x half> %5
968 define <16 x half> @stack_fold_sqrtph_ymm(<16 x half> %a0) {
969 ; CHECK-LABEL: stack_fold_sqrtph_ymm:
970 ; CHECK:       # %bb.0:
971 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
972 ; CHECK-NEXT:    #APP
973 ; CHECK-NEXT:    nop
974 ; CHECK-NEXT:    #NO_APP
975 ; CHECK-NEXT:    vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Folded Reload
976 ; CHECK-NEXT:    retq
977   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
978   %2 = call <16 x half> @llvm.sqrt.v16f16(<16 x half> %a0)
979   ret <16 x half> %2
981 declare <16 x half> @llvm.sqrt.v16f16(<16 x half>)
983 define <16 x half> @stack_fold_sqrtph_mask_ymm(<16 x half> %a0, ptr %passthru, i16 %mask) {
984 ; CHECK-LABEL: stack_fold_sqrtph_mask_ymm:
985 ; CHECK:       # %bb.0:
986 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
987 ; CHECK-NEXT:    #APP
988 ; CHECK-NEXT:    nop
989 ; CHECK-NEXT:    #NO_APP
990 ; CHECK-NEXT:    vmovaps (%rdi), %ymm1
991 ; CHECK-NEXT:    kmovd %esi, %k1
992 ; CHECK-NEXT:    vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1 {%k1} # 32-byte Folded Reload
993 ; CHECK-NEXT:    vmovaps %ymm1, %ymm0
994 ; CHECK-NEXT:    retq
995   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
996   %2 = load <16 x half>, ptr %passthru
997   %3 = call <16 x half> @llvm.sqrt.v16f16(<16 x half> %a0)
998   %4 = bitcast i16 %mask to <16 x i1>
999   %5 = select <16 x i1> %4, <16 x half> %3, <16 x half> %2
1000   ret <16 x half> %5
1003 define <16 x half> @stack_fold_sqrtph_maskz_ymm(<16 x half> %a0, ptr %mask) {
1004 ; CHECK-LABEL: stack_fold_sqrtph_maskz_ymm:
1005 ; CHECK:       # %bb.0:
1006 ; CHECK-NEXT:    vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1007 ; CHECK-NEXT:    #APP
1008 ; CHECK-NEXT:    nop
1009 ; CHECK-NEXT:    #NO_APP
1010 ; CHECK-NEXT:    kmovw (%rdi), %k1
1011 ; CHECK-NEXT:    vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 {%k1} {z} # 32-byte Folded Reload
1012 ; CHECK-NEXT:    retq
1013   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1014   %2 = load i16, ptr %mask
1015   %3 = call <16 x half> @llvm.sqrt.v16f16(<16 x half> %a0)
1016   %4 = bitcast i16 %2 to <16 x i1>
1017   %5 = select <16 x i1> %4, <16 x half> %3, <16 x half> zeroinitializer
1018   ret <16 x half> %5
1021 define <8 x half> @stack_fold_subph(<8 x half> %a0, <8 x half> %a1) {
1022 ; CHECK-LABEL: stack_fold_subph:
1023 ; CHECK:       # %bb.0:
1024 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1025 ; CHECK-NEXT:    #APP
1026 ; CHECK-NEXT:    nop
1027 ; CHECK-NEXT:    #NO_APP
1028 ; CHECK-NEXT:    vsubph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
1029 ; CHECK-NEXT:    retq
1030   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1031   %2 = fsub <8 x half> %a0, %a1
1032   ret <8 x half> %2
1035 define <16 x half> @stack_fold_subph_ymm(<16 x half> %a0, <16 x half> %a1) {
1036 ; CHECK-LABEL: stack_fold_subph_ymm:
1037 ; CHECK:       # %bb.0:
1038 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1039 ; CHECK-NEXT:    #APP
1040 ; CHECK-NEXT:    nop
1041 ; CHECK-NEXT:    #NO_APP
1042 ; CHECK-NEXT:    vsubph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 32-byte Folded Reload
1043 ; CHECK-NEXT:    retq
1044   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1045   %2 = fsub <16 x half> %a0, %a1
1046   ret <16 x half> %2
1049 define <4 x float> @stack_fold_fmulc(<4 x float> %a0, <4 x float> %a1) {
1050 ; CHECK-LABEL: stack_fold_fmulc:
1051 ; CHECK:       # %bb.0:
1052 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1053 ; CHECK-NEXT:    #APP
1054 ; CHECK-NEXT:    nop
1055 ; CHECK-NEXT:    #NO_APP
1056 ; CHECK-NEXT:    vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 # 16-byte Folded Reload
1057 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1058 ; CHECK-NEXT:    retq
1059   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1060   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.128(<4 x float> %a0, <4 x float> %a1, <4 x float> undef, i8 -1)
1061   ret <4 x float> %2
1063 declare <4 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.128(<4 x float>, <4 x float>, <4 x float>, i8)
1065 define <4 x float> @stack_fold_fmulc_mask(<4 x float> %a0, <4 x float> %a1, ptr %passthru, i8 %mask) {
1066 ; CHECK-LABEL: stack_fold_fmulc_mask:
1067 ; CHECK:       # %bb.0:
1068 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1069 ; CHECK-NEXT:    kmovd %esi, %k1
1070 ; CHECK-NEXT:    #APP
1071 ; CHECK-NEXT:    nop
1072 ; CHECK-NEXT:    #NO_APP
1073 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
1074 ; CHECK-NEXT:    vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
1075 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1076 ; CHECK-NEXT:    retq
1077   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1078   %2 = load <4 x float>, ptr %passthru
1079   %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.128(<4 x float> %a0, <4 x float> %a1, <4 x float> %2, i8 %mask)
1080   ret <4 x float> %3
1083 define <4 x float> @stack_fold_fmulc_maskz(<4 x float> %a0, <4 x float> %a1, ptr %mask) {
1084 ; CHECK-LABEL: stack_fold_fmulc_maskz:
1085 ; CHECK:       # %bb.0:
1086 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1087 ; CHECK-NEXT:    #APP
1088 ; CHECK-NEXT:    nop
1089 ; CHECK-NEXT:    #NO_APP
1090 ; CHECK-NEXT:    kmovb (%rdi), %k1
1091 ; CHECK-NEXT:    vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} {z} # 16-byte Folded Reload
1092 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1093 ; CHECK-NEXT:    retq
1094   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1095   %2 = load i8, ptr %mask
1096   %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.128(<4 x float> %a0, <4 x float> %a1, <4 x float> zeroinitializer, i8 %2)
1097   ret <4 x float> %3
1100 define <4 x float> @stack_fold_fcmulc(<4 x float> %a0, <4 x float> %a1) {
1101 ; CHECK-LABEL: stack_fold_fcmulc:
1102 ; CHECK:       # %bb.0:
1103 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1104 ; CHECK-NEXT:    #APP
1105 ; CHECK-NEXT:    nop
1106 ; CHECK-NEXT:    #NO_APP
1107 ; CHECK-NEXT:    vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 # 16-byte Folded Reload
1108 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1109 ; CHECK-NEXT:    retq
1110   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1111   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.128(<4 x float> %a0, <4 x float> %a1, <4 x float> undef, i8 -1)
1112   ret <4 x float> %2
1114 declare <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.128(<4 x float>, <4 x float>, <4 x float>, i8)
1116 define <4 x float> @stack_fold_fcmulc_mask(<4 x float> %a0, <4 x float> %a1, ptr %passthru, i8 %mask) {
1117 ; CHECK-LABEL: stack_fold_fcmulc_mask:
1118 ; CHECK:       # %bb.0:
1119 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1120 ; CHECK-NEXT:    kmovd %esi, %k1
1121 ; CHECK-NEXT:    #APP
1122 ; CHECK-NEXT:    nop
1123 ; CHECK-NEXT:    #NO_APP
1124 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
1125 ; CHECK-NEXT:    vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
1126 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1127 ; CHECK-NEXT:    retq
1128   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1129   %2 = load <4 x float>, ptr %passthru
1130   %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.128(<4 x float> %a0, <4 x float> %a1, <4 x float> %2, i8 %mask)
1131   ret <4 x float> %3
1134 define <4 x float> @stack_fold_fcmulc_maskz(<4 x float> %a0, <4 x float> %a1, ptr %mask) {
1135 ; CHECK-LABEL: stack_fold_fcmulc_maskz:
1136 ; CHECK:       # %bb.0:
1137 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1138 ; CHECK-NEXT:    #APP
1139 ; CHECK-NEXT:    nop
1140 ; CHECK-NEXT:    #NO_APP
1141 ; CHECK-NEXT:    kmovb (%rdi), %k1
1142 ; CHECK-NEXT:    vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} {z} # 16-byte Folded Reload
1143 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1144 ; CHECK-NEXT:    retq
1145   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1146   %2 = load i8, ptr %mask
1147   %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.128(<4 x float> %a0, <4 x float> %a1, <4 x float> zeroinitializer, i8 %2)
1148   ret <4 x float> %3
1151 define <4 x float> @stack_fold_fmaddc(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
1152 ; CHECK-LABEL: stack_fold_fmaddc:
1153 ; CHECK:       # %bb.0:
1154 ; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1155 ; CHECK-NEXT:    #APP
1156 ; CHECK-NEXT:    nop
1157 ; CHECK-NEXT:    #NO_APP
1158 ; CHECK-NEXT:    vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload
1159 ; CHECK-NEXT:    retq
1160   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1161   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.128(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 -1)
1162   ret <4 x float> %2
1164 declare <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.128(<4 x float>, <4 x float>, <4 x float>, i8)
1166 define <4 x float> @stack_fold_fmaddc_mask(ptr %p, <4 x float> %a1, <4 x float> %a2, i8 %mask) {
1167 ; CHECK-LABEL: stack_fold_fmaddc_mask:
1168 ; CHECK:       # %bb.0:
1169 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1170 ; CHECK-NEXT:    kmovd %esi, %k1
1171 ; CHECK-NEXT:    #APP
1172 ; CHECK-NEXT:    nop
1173 ; CHECK-NEXT:    #NO_APP
1174 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
1175 ; CHECK-NEXT:    vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
1176 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1177 ; CHECK-NEXT:    retq
1178   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1179   %a0 = load <4 x float>, ptr %p
1180   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.128(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 %mask)
1181   ret <4 x float> %2
1184 define <4 x float> @stack_fold_fmaddc_maskz(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, ptr %mask) {
1185 ; CHECK-LABEL: stack_fold_fmaddc_maskz:
1186 ; CHECK:       # %bb.0:
1187 ; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1188 ; CHECK-NEXT:    #APP
1189 ; CHECK-NEXT:    nop
1190 ; CHECK-NEXT:    #NO_APP
1191 ; CHECK-NEXT:    kmovb (%rdi), %k1
1192 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
1193 ; CHECK-NEXT:    vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload
1194 ; CHECK-NEXT:    retq
1195   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1196   %2 = load i8, ptr %mask
1197   %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.128(<4 x float> %a1, <4 x float> %a2, <4 x float> zeroinitializer, i8 %2)
1198   ret <4 x float> %3
1200 declare <4 x float> @llvm.x86.avx512fp16.maskz.vfmadd.cph.128(<4 x float>, <4 x float>, <4 x float>, i8)
1202 define <4 x float> @stack_fold_fcmaddc(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
1203 ; CHECK-LABEL: stack_fold_fcmaddc:
1204 ; CHECK:       # %bb.0:
1205 ; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1206 ; CHECK-NEXT:    #APP
1207 ; CHECK-NEXT:    nop
1208 ; CHECK-NEXT:    #NO_APP
1209 ; CHECK-NEXT:    vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload
1210 ; CHECK-NEXT:    retq
1211   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1212   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.128(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 -1)
1213   ret <4 x float> %2
1215 declare <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.128(<4 x float>, <4 x float>, <4 x float>, i8)
1217 define <4 x float> @stack_fold_fcmaddc_mask(ptr %p, <4 x float> %a1, <4 x float> %a2, i8 %mask) {
1218 ; CHECK-LABEL: stack_fold_fcmaddc_mask:
1219 ; CHECK:       # %bb.0:
1220 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1221 ; CHECK-NEXT:    kmovd %esi, %k1
1222 ; CHECK-NEXT:    #APP
1223 ; CHECK-NEXT:    nop
1224 ; CHECK-NEXT:    #NO_APP
1225 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
1226 ; CHECK-NEXT:    vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
1227 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1228 ; CHECK-NEXT:    retq
1229   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1230   %a0 = load <4 x float>, ptr %p
1231   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.128(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 %mask)
1232   ret <4 x float> %2
1235 define <4 x float> @stack_fold_fcmaddc_maskz(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, ptr %mask) {
1236 ; CHECK-LABEL: stack_fold_fcmaddc_maskz:
1237 ; CHECK:       # %bb.0:
1238 ; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1239 ; CHECK-NEXT:    #APP
1240 ; CHECK-NEXT:    nop
1241 ; CHECK-NEXT:    #NO_APP
1242 ; CHECK-NEXT:    kmovb (%rdi), %k1
1243 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
1244 ; CHECK-NEXT:    vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload
1245 ; CHECK-NEXT:    retq
1246   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1247   %2 = load i8, ptr %mask
1248   %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.128(<4 x float> %a1, <4 x float> %a2, <4 x float> zeroinitializer, i8 %2)
1249   ret <4 x float> %3
1251 declare <4 x float> @llvm.x86.avx512fp16.maskz.vfcmadd.cph.128(<4 x float>, <4 x float>, <4 x float>, i8)
1253 define <8 x float> @stack_fold_fmulc_ymm(<8 x float> %a0, <8 x float> %a1) {
1254 ; CHECK-LABEL: stack_fold_fmulc_ymm:
1255 ; CHECK:       # %bb.0:
1256 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1257 ; CHECK-NEXT:    #APP
1258 ; CHECK-NEXT:    nop
1259 ; CHECK-NEXT:    #NO_APP
1260 ; CHECK-NEXT:    vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 # 32-byte Folded Reload
1261 ; CHECK-NEXT:    vmovaps %ymm2, %ymm0
1262 ; CHECK-NEXT:    retq
1263   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1264   %2 = call <8 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.256(<8 x float> %a0, <8 x float> %a1, <8 x float> undef, i8 -1)
1265   ret <8 x float> %2
1267 declare <8 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.256(<8 x float>, <8 x float>, <8 x float>, i8)
1269 define <8 x float> @stack_fold_fmulc_mask_ymm(<8 x float> %a0, <8 x float> %a1, ptr %passthru, i8 %mask) {
1270 ; CHECK-LABEL: stack_fold_fmulc_mask_ymm:
1271 ; CHECK:       # %bb.0:
1272 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1273 ; CHECK-NEXT:    kmovd %esi, %k1
1274 ; CHECK-NEXT:    #APP
1275 ; CHECK-NEXT:    nop
1276 ; CHECK-NEXT:    #NO_APP
1277 ; CHECK-NEXT:    vmovaps (%rdi), %ymm2
1278 ; CHECK-NEXT:    vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 {%k1} # 32-byte Folded Reload
1279 ; CHECK-NEXT:    vmovaps %ymm2, %ymm0
1280 ; CHECK-NEXT:    retq
1281   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1282   %2 = load <8 x float>, ptr %passthru
1283   %3 = call <8 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %2, i8 %mask)
1284   ret <8 x float> %3
1287 define <8 x float> @stack_fold_fmulc_maskz_ymm(<8 x float> %a0, <8 x float> %a1, ptr %mask) {
1288 ; CHECK-LABEL: stack_fold_fmulc_maskz_ymm:
1289 ; CHECK:       # %bb.0:
1290 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1291 ; CHECK-NEXT:    #APP
1292 ; CHECK-NEXT:    nop
1293 ; CHECK-NEXT:    #NO_APP
1294 ; CHECK-NEXT:    kmovb (%rdi), %k1
1295 ; CHECK-NEXT:    vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 {%k1} {z} # 32-byte Folded Reload
1296 ; CHECK-NEXT:    vmovaps %ymm2, %ymm0
1297 ; CHECK-NEXT:    retq
1298   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1299   %2 = load i8, ptr %mask
1300   %3 = call <8 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.256(<8 x float> %a0, <8 x float> %a1, <8 x float> zeroinitializer, i8 %2)
1301   ret <8 x float> %3
1304 define <8 x float> @stack_fold_fcmulc_ymm(<8 x float> %a0, <8 x float> %a1) {
1305 ; CHECK-LABEL: stack_fold_fcmulc_ymm:
1306 ; CHECK:       # %bb.0:
1307 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1308 ; CHECK-NEXT:    #APP
1309 ; CHECK-NEXT:    nop
1310 ; CHECK-NEXT:    #NO_APP
1311 ; CHECK-NEXT:    vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 # 32-byte Folded Reload
1312 ; CHECK-NEXT:    vmovaps %ymm2, %ymm0
1313 ; CHECK-NEXT:    retq
1314   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1315   %2 = call <8 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.256(<8 x float> %a0, <8 x float> %a1, <8 x float> undef, i8 -1)
1316   ret <8 x float> %2
1318 declare <8 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.256(<8 x float>, <8 x float>, <8 x float>, i8)
1320 define <8 x float> @stack_fold_fcmulc_mask_ymm(<8 x float> %a0, <8 x float> %a1, ptr %passthru, i8 %mask) {
1321 ; CHECK-LABEL: stack_fold_fcmulc_mask_ymm:
1322 ; CHECK:       # %bb.0:
1323 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1324 ; CHECK-NEXT:    kmovd %esi, %k1
1325 ; CHECK-NEXT:    #APP
1326 ; CHECK-NEXT:    nop
1327 ; CHECK-NEXT:    #NO_APP
1328 ; CHECK-NEXT:    vmovaps (%rdi), %ymm2
1329 ; CHECK-NEXT:    vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 {%k1} # 32-byte Folded Reload
1330 ; CHECK-NEXT:    vmovaps %ymm2, %ymm0
1331 ; CHECK-NEXT:    retq
1332   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1333   %2 = load <8 x float>, ptr %passthru
1334   %3 = call <8 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.256(<8 x float> %a0, <8 x float> %a1, <8 x float> %2, i8 %mask)
1335   ret <8 x float> %3
1338 define <8 x float> @stack_fold_fcmulc_maskz_ymm(<8 x float> %a0, <8 x float> %a1, ptr %mask) {
1339 ; CHECK-LABEL: stack_fold_fcmulc_maskz_ymm:
1340 ; CHECK:       # %bb.0:
1341 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1342 ; CHECK-NEXT:    #APP
1343 ; CHECK-NEXT:    nop
1344 ; CHECK-NEXT:    #NO_APP
1345 ; CHECK-NEXT:    kmovb (%rdi), %k1
1346 ; CHECK-NEXT:    vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 {%k1} {z} # 32-byte Folded Reload
1347 ; CHECK-NEXT:    vmovaps %ymm2, %ymm0
1348 ; CHECK-NEXT:    retq
1349   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1350   %2 = load i8, ptr %mask
1351   %3 = call <8 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.256(<8 x float> %a0, <8 x float> %a1, <8 x float> zeroinitializer, i8 %2)
1352   ret <8 x float> %3
1355 define <8 x float> @stack_fold_fmaddc_ymm(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) {
1356 ; CHECK-LABEL: stack_fold_fmaddc_ymm:
1357 ; CHECK:       # %bb.0:
1358 ; CHECK-NEXT:    vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1359 ; CHECK-NEXT:    #APP
1360 ; CHECK-NEXT:    nop
1361 ; CHECK-NEXT:    #NO_APP
1362 ; CHECK-NEXT:    vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 # 32-byte Folded Reload
1363 ; CHECK-NEXT:    retq
1364   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1365   %2 = call <8 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.256(<8 x float> %a1, <8 x float> %a2, <8 x float> %a0, i8 -1)
1366   ret <8 x float> %2
1368 declare <8 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.256(<8 x float>, <8 x float>, <8 x float>, i8)
1370 define <8 x float> @stack_fold_fmaddc_mask_ymm(ptr %p, <8 x float> %a1, <8 x float> %a2, i8 %mask) {
1371 ; CHECK-LABEL: stack_fold_fmaddc_mask_ymm:
1372 ; CHECK:       # %bb.0:
1373 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1374 ; CHECK-NEXT:    kmovd %esi, %k1
1375 ; CHECK-NEXT:    #APP
1376 ; CHECK-NEXT:    nop
1377 ; CHECK-NEXT:    #NO_APP
1378 ; CHECK-NEXT:    vmovaps (%rdi), %ymm2
1379 ; CHECK-NEXT:    vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 {%k1} # 32-byte Folded Reload
1380 ; CHECK-NEXT:    vmovaps %ymm2, %ymm0
1381 ; CHECK-NEXT:    retq
1382   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1383   %a0 = load <8 x float>, ptr %p
1384   %2 = call <8 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.256(<8 x float> %a1, <8 x float> %a2, <8 x float> %a0, i8 %mask)
1385   ret <8 x float> %2
1388 define <8 x float> @stack_fold_fmaddc_maskz_ymm(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, ptr %mask) {
1389 ; CHECK-LABEL: stack_fold_fmaddc_maskz_ymm:
1390 ; CHECK:       # %bb.0:
1391 ; CHECK-NEXT:    vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1392 ; CHECK-NEXT:    #APP
1393 ; CHECK-NEXT:    nop
1394 ; CHECK-NEXT:    #NO_APP
1395 ; CHECK-NEXT:    kmovb (%rdi), %k1
1396 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
1397 ; CHECK-NEXT:    vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 {%k1} {z} # 32-byte Folded Reload
1398 ; CHECK-NEXT:    retq
1399   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1400   %2 = load i8, ptr %mask
1401   %3 = call <8 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.256(<8 x float> %a1, <8 x float> %a2, <8 x float> zeroinitializer, i8 %2)
1402   ret <8 x float> %3
1404 declare <8 x float> @llvm.x86.avx512fp16.maskz.vfmadd.cph.256(<8 x float>, <8 x float>, <8 x float>, i8)
1406 define <8 x float> @stack_fold_fcmaddc_ymm(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2) {
1407 ; CHECK-LABEL: stack_fold_fcmaddc_ymm:
1408 ; CHECK:       # %bb.0:
1409 ; CHECK-NEXT:    vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1410 ; CHECK-NEXT:    #APP
1411 ; CHECK-NEXT:    nop
1412 ; CHECK-NEXT:    #NO_APP
1413 ; CHECK-NEXT:    vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 # 32-byte Folded Reload
1414 ; CHECK-NEXT:    retq
1415   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1416   %2 = call <8 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.256(<8 x float> %a1, <8 x float> %a2, <8 x float> %a0, i8 -1)
1417   ret <8 x float> %2
1419 declare <8 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.256(<8 x float>, <8 x float>, <8 x float>, i8)
1421 define <8 x float> @stack_fold_fcmaddc_mask_ymm(ptr %p, <8 x float> %a1, <8 x float> %a2, i8 %mask) {
1422 ; CHECK-LABEL: stack_fold_fcmaddc_mask_ymm:
1423 ; CHECK:       # %bb.0:
1424 ; CHECK-NEXT:    vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1425 ; CHECK-NEXT:    kmovd %esi, %k1
1426 ; CHECK-NEXT:    #APP
1427 ; CHECK-NEXT:    nop
1428 ; CHECK-NEXT:    #NO_APP
1429 ; CHECK-NEXT:    vmovaps (%rdi), %ymm2
1430 ; CHECK-NEXT:    vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm2 {%k1} # 32-byte Folded Reload
1431 ; CHECK-NEXT:    vmovaps %ymm2, %ymm0
1432 ; CHECK-NEXT:    retq
1433   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1434   %a0 = load <8 x float>, ptr %p
1435   %2 = call <8 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.256(<8 x float> %a1, <8 x float> %a2, <8 x float> %a0, i8 %mask)
1436   ret <8 x float> %2
1439 define <8 x float> @stack_fold_fcmaddc_maskz_ymm(<8 x float> %a0, <8 x float> %a1, <8 x float> %a2, ptr %mask) {
1440 ; CHECK-LABEL: stack_fold_fcmaddc_maskz_ymm:
1441 ; CHECK:       # %bb.0:
1442 ; CHECK-NEXT:    vmovups %ymm2, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
1443 ; CHECK-NEXT:    #APP
1444 ; CHECK-NEXT:    nop
1445 ; CHECK-NEXT:    #NO_APP
1446 ; CHECK-NEXT:    kmovb (%rdi), %k1
1447 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
1448 ; CHECK-NEXT:    vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %ymm1, %ymm0 {%k1} {z} # 32-byte Folded Reload
1449 ; CHECK-NEXT:    retq
1450   %1 = tail call <2 x i64> asm sideeffect "nop", "=x,~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{xmm16},~{xmm17},~{xmm18},~{xmm19},~{xmm20},~{xmm21},~{xmm22},~{xmm23},~{xmm24},~{xmm25},~{xmm26},~{xmm27},~{xmm28},~{xmm29},~{xmm30},~{xmm31},~{flags}"()
1451   %2 = load i8, ptr %mask
1452   %3 = call <8 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.256(<8 x float> %a1, <8 x float> %a2, <8 x float> zeroinitializer, i8 %2)
1453   ret <8 x float> %3
1455 declare <8 x float> @llvm.x86.avx512fp16.maskz.vfcmadd.cph.256(<8 x float>, <8 x float>, <8 x float>, i8)
1457 attributes #0 = { "unsafe-fp-math"="false" }
1458 attributes #1 = { "unsafe-fp-math"="true" }