Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / X86 / stack-folding-fp-avx512fp16.ll
blobf6863be4b919466d80175f362f42157ba9c46ca5
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=+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 <32 x half> @stack_fold_addph_zmm(<32 x half> %a0, <32 x half> %a1) {
13 ; CHECK-LABEL: stack_fold_addph_zmm:
14 ; CHECK:       # %bb.0:
15 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
16 ; CHECK-NEXT:    #APP
17 ; CHECK-NEXT:    nop
18 ; CHECK-NEXT:    #NO_APP
19 ; CHECK-NEXT:    vaddph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-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 <32 x half> %a0, %a1
23   ret <32 x half> %2
26 define <32 x half> @stack_fold_addph_zmm_k(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) {
27 ; CHECK-LABEL: stack_fold_addph_zmm_k:
28 ; CHECK:       # %bb.0:
29 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
30 ; CHECK-NEXT:    #APP
31 ; CHECK-NEXT:    nop
32 ; CHECK-NEXT:    #NO_APP
33 ; CHECK-NEXT:    kmovd %edi, %k1
34 ; CHECK-NEXT:    vmovaps (%rsi), %zmm2
35 ; CHECK-NEXT:    vaddph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
36 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
37 ; CHECK-NEXT:    retq
38   %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}"()
39   %2 = fadd <32 x half> %a0, %a1
40   %3 = bitcast i32 %mask to <32 x i1>
41   %4 = load <32 x half>, ptr %passthru
42   %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4
43   ret <32 x half> %5
46 define <32 x half> @stack_fold_addph_zmm_k_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) {
47 ; CHECK-LABEL: stack_fold_addph_zmm_k_commuted:
48 ; CHECK:       # %bb.0:
49 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
50 ; CHECK-NEXT:    #APP
51 ; CHECK-NEXT:    nop
52 ; CHECK-NEXT:    #NO_APP
53 ; CHECK-NEXT:    kmovd %edi, %k1
54 ; CHECK-NEXT:    vmovaps (%rsi), %zmm2
55 ; CHECK-NEXT:    vaddph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
56 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
57 ; CHECK-NEXT:    retq
58   %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}"()
59   %2 = fadd <32 x half> %a1, %a0
60   %3 = bitcast i32 %mask to <32 x i1>
61   %4 = load <32 x half>, ptr %passthru
62   %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4
63   ret <32 x half> %5
66 define <32 x half> @stack_fold_addph_zmm_kz(<32 x half> %a0, <32 x half> %a1, i32 %mask) {
67 ; CHECK-LABEL: stack_fold_addph_zmm_kz:
68 ; CHECK:       # %bb.0:
69 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
70 ; CHECK-NEXT:    #APP
71 ; CHECK-NEXT:    nop
72 ; CHECK-NEXT:    #NO_APP
73 ; CHECK-NEXT:    kmovd %edi, %k1
74 ; CHECK-NEXT:    vaddph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload
75 ; CHECK-NEXT:    retq
76   %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}"()
77   %2 = fadd <32 x half> %a1, %a0
78   %3 = bitcast i32 %mask to <32 x i1>
79   %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer
80   ret <32 x half> %4
83 define half @stack_fold_addsh(half %a0, half %a1) {
84 ; CHECK-LABEL: stack_fold_addsh:
85 ; CHECK:       # %bb.0:
86 ; CHECK-NEXT:    vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
87 ; CHECK-NEXT:    #APP
88 ; CHECK-NEXT:    nop
89 ; CHECK-NEXT:    #NO_APP
90 ; CHECK-NEXT:    vaddsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
91 ; CHECK-NEXT:    retq
92   %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}"()
93   %2 = fadd half %a0, %a1
94   ret half %2
97 define <8 x half> @stack_fold_addsh_int(<8 x half> %a0, <8 x half> %a1) {
98 ; CHECK-LABEL: stack_fold_addsh_int:
99 ; CHECK:       # %bb.0:
100 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
101 ; CHECK-NEXT:    #APP
102 ; CHECK-NEXT:    nop
103 ; CHECK-NEXT:    #NO_APP
104 ; CHECK-NEXT:    vaddsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
105 ; CHECK-NEXT:    retq
106   %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}"()
107   %2 = extractelement <8 x half> %a0, i32 0
108   %3 = extractelement <8 x half> %a1, i32 0
109   %4 = fadd half %2, %3
110   %5 = insertelement <8 x half> %a0, half %4, i32 0
111   ret <8 x half> %5
114 define i32 @stack_fold_cmpph(<32 x half> %a0, <32 x half> %a1) {
115 ; CHECK-LABEL: stack_fold_cmpph:
116 ; CHECK:       # %bb.0:
117 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
118 ; CHECK-NEXT:    #APP
119 ; CHECK-NEXT:    nop
120 ; CHECK-NEXT:    #NO_APP
121 ; CHECK-NEXT:    vcmpeqph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %k0 # 64-byte Folded Reload
122 ; CHECK-NEXT:    kmovd %k0, %eax
123 ; CHECK-NEXT:    vzeroupper
124 ; CHECK-NEXT:    retq
125   %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}"()
126   %res = call <32 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.512(<32 x half> %a0, <32 x half> %a1, i32 0, <32 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, 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>, i32 4)
127   %2 = bitcast <32 x i1> %res to i32
128   ret i32 %2
130 declare <32 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.512(<32 x half>, <32 x half>, i32, <32 x i1>, i32)
132 define <32 x half> @stack_fold_cmpph_mask(<32 x half> %a0, <32 x half> %a1, ptr %a2, i32 %mask, <32 x half> %b0, <32 x half> %b1) {
133 ; CHECK-LABEL: stack_fold_cmpph_mask:
134 ; CHECK:       # %bb.0:
135 ; CHECK-NEXT:    subq $136, %rsp
136 ; CHECK-NEXT:    .cfi_def_cfa_offset 144
137 ; CHECK-NEXT:    vmovups %zmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
138 ; CHECK-NEXT:    vmovups %zmm2, (%rsp) # 64-byte Spill
139 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
140 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
141 ; CHECK-NEXT:    #APP
142 ; CHECK-NEXT:    nop
143 ; CHECK-NEXT:    #NO_APP
144 ; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
145 ; CHECK-NEXT:    vaddph (%rdi), %zmm0, %zmm0
146 ; CHECK-NEXT:    vcmpeqph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %k0 # 64-byte Folded Reload
147 ; CHECK-NEXT:    kmovd %esi, %k1
148 ; CHECK-NEXT:    kandd %k0, %k1, %k1
149 ; CHECK-NEXT:    vmovdqu64 {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
150 ; CHECK-NEXT:    vmovdqu16 (%rsp), %zmm0 {%k1} # 64-byte Folded Reload
151 ; CHECK-NEXT:    addq $136, %rsp
152 ; CHECK-NEXT:    .cfi_def_cfa_offset 8
153 ; CHECK-NEXT:    retq
154   %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}"()
155   ; load and fadd are here to keep the operations below the side effecting block and to avoid folding the wrong load
156   %2 = load <32 x half>, ptr %a2
157   %3 = fadd <32 x half> %a1, %2
158   %4 = bitcast i32 %mask to <32 x i1>
159   %5 = call <32 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.512(<32 x half> %3, <32 x half> %a0, i32 0, <32 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, 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>, i32 4)
160   %6 = and <32 x i1> %4, %5
161   %7 = select <32 x i1> %6, <32 x half> %b0, <32 x half> %b1
162   ret <32 x half> %7
165 define <32 x half> @stack_fold_cmpph_mask_commuted(<32 x half> %a0, <32 x half> %a1, ptr %a2, i32 %mask, <32 x half> %b0, <32 x half> %b1) {
166 ; CHECK-LABEL: stack_fold_cmpph_mask_commuted:
167 ; CHECK:       # %bb.0:
168 ; CHECK-NEXT:    subq $136, %rsp
169 ; CHECK-NEXT:    .cfi_def_cfa_offset 144
170 ; CHECK-NEXT:    vmovups %zmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
171 ; CHECK-NEXT:    vmovups %zmm2, (%rsp) # 64-byte Spill
172 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
173 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
174 ; CHECK-NEXT:    #APP
175 ; CHECK-NEXT:    nop
176 ; CHECK-NEXT:    #NO_APP
177 ; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
178 ; CHECK-NEXT:    vaddph (%rdi), %zmm0, %zmm0
179 ; CHECK-NEXT:    vcmpeqph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %k0 # 64-byte Folded Reload
180 ; CHECK-NEXT:    kmovd %esi, %k1
181 ; CHECK-NEXT:    kandd %k0, %k1, %k1
182 ; CHECK-NEXT:    vmovdqu64 {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
183 ; CHECK-NEXT:    vmovdqu16 (%rsp), %zmm0 {%k1} # 64-byte Folded Reload
184 ; CHECK-NEXT:    addq $136, %rsp
185 ; CHECK-NEXT:    .cfi_def_cfa_offset 8
186 ; CHECK-NEXT:    retq
187   %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}"()
188   ; load and fadd are here to keep the operations below the side effecting block and to avoid folding the wrong load
189   %2 = load <32 x half>, ptr %a2
190   %3 = fadd <32 x half> %a1, %2
191   %4 = bitcast i32 %mask to <32 x i1>
192   %5 = call <32 x i1> @llvm.x86.avx512fp16.mask.cmp.ph.512(<32 x half> %a0, <32 x half> %3, i32 0, <32 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, 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>, i32 4)
193   %6 = and <32 x i1> %4, %5
194   %7 = select <32 x i1> %6, <32 x half> %b0, <32 x half> %b1
195   ret <32 x half> %7
198 define half @stack_fold_divsh(half %a0, half %a1) {
199 ; CHECK-LABEL: stack_fold_divsh:
200 ; CHECK:       # %bb.0:
201 ; CHECK-NEXT:    vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
202 ; CHECK-NEXT:    #APP
203 ; CHECK-NEXT:    nop
204 ; CHECK-NEXT:    #NO_APP
205 ; CHECK-NEXT:    vdivsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
206 ; CHECK-NEXT:    retq
207   %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}"()
208   %2 = fdiv half %a0, %a1
209   ret half %2
212 define <8 x half> @stack_fold_divsh_int(<8 x half> %a0, <8 x half> %a1) {
213 ; CHECK-LABEL: stack_fold_divsh_int:
214 ; CHECK:       # %bb.0:
215 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
216 ; CHECK-NEXT:    #APP
217 ; CHECK-NEXT:    nop
218 ; CHECK-NEXT:    #NO_APP
219 ; CHECK-NEXT:    vdivsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
220 ; CHECK-NEXT:    retq
221   %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}"()
222   %2 = extractelement <8 x half> %a0, i32 0
223   %3 = extractelement <8 x half> %a1, i32 0
224   %4 = fdiv half %2, %3
225   %5 = insertelement <8 x half> %a0, half %4, i32 0
226   ret <8 x half> %5
229 define i32 @stack_fold_fpclassph(<32 x half> %a0) {
230 ; CHECK-LABEL: stack_fold_fpclassph:
231 ; CHECK:       # %bb.0:
232 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
233 ; CHECK-NEXT:    #APP
234 ; CHECK-NEXT:    nop
235 ; CHECK-NEXT:    #NO_APP
236 ; CHECK-NEXT:    vfpclassphz $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 64-byte Folded Reload
237 ; CHECK-NEXT:    kmovd %k0, %eax
238 ; CHECK-NEXT:    vzeroupper
239 ; CHECK-NEXT:    retq
240   %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}"()
241   %2 = call <32 x i1> @llvm.x86.avx512fp16.fpclass.ph.512(<32 x half> %a0, i32 4)
242   %3 = bitcast <32 x i1> %2 to i32
243   ret i32 %3
245 declare <32 x i1> @llvm.x86.avx512fp16.fpclass.ph.512(<32 x half>, i32)
247 define i32 @stack_fold_fpclassph_mask(<32 x half> %a0, ptr %p) {
248 ; CHECK-LABEL: stack_fold_fpclassph_mask:
249 ; CHECK:       # %bb.0:
250 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
251 ; CHECK-NEXT:    #APP
252 ; CHECK-NEXT:    nop
253 ; CHECK-NEXT:    #NO_APP
254 ; CHECK-NEXT:    kmovd (%rdi), %k1
255 ; CHECK-NEXT:    vfpclassphz $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 {%k1} # 64-byte Folded Reload
256 ; CHECK-NEXT:    kmovd %k0, %eax
257 ; CHECK-NEXT:    vzeroupper
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 = call <32 x i1> @llvm.x86.avx512fp16.fpclass.ph.512(<32 x half> %a0, i32 4)
261   %mask = load <32 x i1>, ptr %p
262   %3 = and <32 x i1> %2, %mask
263   %4 = bitcast <32 x i1> %3 to i32
264   ret i32 %4
267 define i8 @stack_fold_fpclasssh(<8 x half> %a0) {
268   ;CHECK-LABEl: stack_fold_fpclasssh:
269 ; CHECK-LABEL: stack_fold_fpclasssh:
270 ; CHECK:       # %bb.0:
271 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
272 ; CHECK-NEXT:    #APP
273 ; CHECK-NEXT:    nop
274 ; CHECK-NEXT:    #NO_APP
275 ; CHECK-NEXT:    vfpclasssh $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 # 16-byte Folded Reload
276 ; CHECK-NEXT:    kmovd %k0, %eax
277 ; CHECK-NEXT:    # kill: def $al killed $al killed $eax
278 ; CHECK-NEXT:    retq
279   %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}"()
280   %2 = call i8 @llvm.x86.avx512fp16.mask.fpclass.sh(<8 x half> %a0, i32 4, i8 -1)
281   ret i8 %2
283 declare i8 @llvm.x86.avx512fp16.mask.fpclass.sh(<8 x half>, i32, i8)
285 define i8 @stack_fold_fpclasssh_mask(<8 x half> %a0, ptr %p) {
286 ; CHECK-LABEL: stack_fold_fpclasssh_mask:
287 ; CHECK:       # %bb.0:
288 ; CHECK-NEXT:    vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
289 ; CHECK-NEXT:    #APP
290 ; CHECK-NEXT:    nop
291 ; CHECK-NEXT:    #NO_APP
292 ; CHECK-NEXT:    kmovb (%rdi), %k1
293 ; CHECK-NEXT:    vfpclasssh $4, {{[-0-9]+}}(%r{{[sb]}}p), %k0 {%k1} # 16-byte Folded Reload
294 ; CHECK-NEXT:    kmovd %k0, %eax
295 ; CHECK-NEXT:    # kill: def $al killed $al killed $eax
296 ; CHECK-NEXT:    retq
297   %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}"()
298   %mask = load i8, ptr %p
299   %2 = call i8 @llvm.x86.avx512fp16.mask.fpclass.sh(<8 x half> %a0, i32 4, i8 %mask)
300   ret i8 %2
303 define <32 x half> @stack_fold_getexpph(<32 x half> %a0) {
304 ; CHECK-LABEL: stack_fold_getexpph:
305 ; CHECK:       # %bb.0:
306 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
307 ; CHECK-NEXT:    #APP
308 ; CHECK-NEXT:    nop
309 ; CHECK-NEXT:    #NO_APP
310 ; CHECK-NEXT:    vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload
311 ; CHECK-NEXT:    retq
312   %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}"()
313   %2 = call <32 x half> @llvm.x86.avx512fp16.mask.getexp.ph.512(<32 x half> %a0, <32 x half> undef, i32 -1, i32 4)
314   ret <32 x half> %2
316 declare <32 x half> @llvm.x86.avx512fp16.mask.getexp.ph.512(<32 x half>, <32 x half>, i32, i32)
318 define <32 x half> @stack_fold_getexpph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {
319 ; CHECK-LABEL: stack_fold_getexpph_mask:
320 ; CHECK:       # %bb.0:
321 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
322 ; CHECK-NEXT:    kmovd %esi, %k1
323 ; CHECK-NEXT:    #APP
324 ; CHECK-NEXT:    nop
325 ; CHECK-NEXT:    #NO_APP
326 ; CHECK-NEXT:    vmovaps (%rdi), %zmm1
327 ; CHECK-NEXT:    vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload
328 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
329 ; CHECK-NEXT:    retq
330   %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}"()
331   %2 = load <32 x half>, ptr %passthru
332   %3 = call <32 x half> @llvm.x86.avx512fp16.mask.getexp.ph.512(<32 x half> %a0, <32 x half> %2, i32 %mask, i32 4)
333   ret <32 x half> %3
336 define <32 x half> @stack_fold_getexpph_maskz(<32 x half> %a0, ptr %mask) {
337 ; CHECK-LABEL: stack_fold_getexpph_maskz:
338 ; CHECK:       # %bb.0:
339 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
340 ; CHECK-NEXT:    #APP
341 ; CHECK-NEXT:    nop
342 ; CHECK-NEXT:    #NO_APP
343 ; CHECK-NEXT:    kmovd (%rdi), %k1
344 ; CHECK-NEXT:    vgetexpph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload
345 ; CHECK-NEXT:    retq
346   %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}"()
347   %2 = load i32, ptr %mask
348   %3 = call <32 x half> @llvm.x86.avx512fp16.mask.getexp.ph.512(<32 x half> %a0, <32 x half> zeroinitializer, i32 %2, i32 4)
349   ret <32 x half> %3
352 define <8 x half> @stack_fold_getexpsh(<8 x half> %a0, <8 x half> %a1) {
353 ; CHECK-LABEL: stack_fold_getexpsh:
354 ; CHECK:       # %bb.0:
355 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
356 ; CHECK-NEXT:    #APP
357 ; CHECK-NEXT:    nop
358 ; CHECK-NEXT:    #NO_APP
359 ; CHECK-NEXT:    vgetexpsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
360 ; CHECK-NEXT:    retq
361   %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}"()
362   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1, i32 4)
363   ret <8 x half> %2
365 declare <8 x half> @llvm.x86.avx512fp16.mask.getexp.sh(<8 x half>, <8 x half>, <8 x half>, i8, i32)
367 define <8 x half> @stack_fold_getexpsh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {
368 ; CHECK-LABEL: stack_fold_getexpsh_mask:
369 ; CHECK:       # %bb.0:
370 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
371 ; CHECK-NEXT:    kmovd %esi, %k1
372 ; CHECK-NEXT:    #APP
373 ; CHECK-NEXT:    nop
374 ; CHECK-NEXT:    #NO_APP
375 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
376 ; CHECK-NEXT:    vgetexpsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
377 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
378 ; CHECK-NEXT:    retq
379   %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}"()
380   %2 = load <8 x half>, ptr %passthru
381   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask, i32 4)
382   ret <8 x half> %3
385 define <8 x half> @stack_fold_getexpsh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {
386 ; CHECK-LABEL: stack_fold_getexpsh_maskz:
387 ; CHECK:       # %bb.0:
388 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
389 ; CHECK-NEXT:    #APP
390 ; CHECK-NEXT:    nop
391 ; CHECK-NEXT:    #NO_APP
392 ; CHECK-NEXT:    kmovb (%rdi), %k1
393 ; CHECK-NEXT:    vgetexpsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload
394 ; CHECK-NEXT:    retq
395   %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}"()
396   %2 = load i8, ptr %mask
397   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getexp.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %2, i32 4)
398   ret <8 x half> %3
401 define <32 x half> @stack_fold_getmantph(<32 x half> %a0) {
402 ; CHECK-LABEL: stack_fold_getmantph:
403 ; CHECK:       # %bb.0:
404 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
405 ; CHECK-NEXT:    #APP
406 ; CHECK-NEXT:    nop
407 ; CHECK-NEXT:    #NO_APP
408 ; CHECK-NEXT:    vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload
409 ; CHECK-NEXT:    retq
410   %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}"()
411   %2 = call <32 x half> @llvm.x86.avx512fp16.mask.getmant.ph.512(<32 x half> %a0, i32 8, <32 x half> undef, i32 -1, i32 4)
412   ret <32 x half> %2
414 declare <32 x half> @llvm.x86.avx512fp16.mask.getmant.ph.512(<32 x half>, i32, <32 x half>, i32, i32)
416 define <32 x half> @stack_fold_getmantph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {
417 ; CHECK-LABEL: stack_fold_getmantph_mask:
418 ; CHECK:       # %bb.0:
419 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
420 ; CHECK-NEXT:    kmovd %esi, %k1
421 ; CHECK-NEXT:    #APP
422 ; CHECK-NEXT:    nop
423 ; CHECK-NEXT:    #NO_APP
424 ; CHECK-NEXT:    vmovaps (%rdi), %zmm1
425 ; CHECK-NEXT:    vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload
426 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
427 ; CHECK-NEXT:    retq
428   %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}"()
429   %2 = load <32 x half>, ptr %passthru
430   %3 = call <32 x half> @llvm.x86.avx512fp16.mask.getmant.ph.512(<32 x half> %a0, i32 8, <32 x half> %2, i32 %mask, i32 4)
431   ret <32 x half> %3
434 define <32 x half> @stack_fold_getmantph_maskz(<32 x half> %a0, ptr %mask) {
435 ; CHECK-LABEL: stack_fold_getmantph_maskz:
436 ; CHECK:       # %bb.0:
437 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
438 ; CHECK-NEXT:    #APP
439 ; CHECK-NEXT:    nop
440 ; CHECK-NEXT:    #NO_APP
441 ; CHECK-NEXT:    kmovd (%rdi), %k1
442 ; CHECK-NEXT:    vgetmantph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload
443 ; CHECK-NEXT:    retq
444   %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}"()
445   %2 = load i32, ptr %mask
446   %3 = call <32 x half> @llvm.x86.avx512fp16.mask.getmant.ph.512(<32 x half> %a0, i32 8, <32 x half> zeroinitializer, i32 %2, i32 4)
447   ret <32 x half> %3
450 define <8 x half> @stack_fold_getmantsh(<8 x half> %a0, <8 x half> %a1) {
451 ; CHECK-LABEL: stack_fold_getmantsh:
452 ; CHECK:       # %bb.0:
453 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
454 ; CHECK-NEXT:    #APP
455 ; CHECK-NEXT:    nop
456 ; CHECK-NEXT:    #NO_APP
457 ; CHECK-NEXT:    vgetmantsh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
458 ; CHECK-NEXT:    retq
459   %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}"()
460   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half> %a0, <8 x half> %a1, i32 8, <8 x half> undef, i8 -1, i32 4)
461   ret <8 x half> %2
463 declare <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half>, <8 x half>, i32, <8 x half>, i8, i32)
465 define <8 x half> @stack_fold_getmantsh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {
466 ; CHECK-LABEL: stack_fold_getmantsh_mask:
467 ; CHECK:       # %bb.0:
468 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
469 ; CHECK-NEXT:    kmovd %esi, %k1
470 ; CHECK-NEXT:    #APP
471 ; CHECK-NEXT:    nop
472 ; CHECK-NEXT:    #NO_APP
473 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
474 ; CHECK-NEXT:    vgetmantsh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
475 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
476 ; CHECK-NEXT:    retq
477   %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}"()
478   %2 = load <8 x half>, ptr %passthru
479   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half> %a0, <8 x half> %a1, i32 8, <8 x half> %2, i8 %mask, i32 4)
480   ret <8 x half> %3
483 define <8 x half> @stack_fold_getmantsh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {
484 ; CHECK-LABEL: stack_fold_getmantsh_maskz:
485 ; CHECK:       # %bb.0:
486 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
487 ; CHECK-NEXT:    #APP
488 ; CHECK-NEXT:    nop
489 ; CHECK-NEXT:    #NO_APP
490 ; CHECK-NEXT:    kmovb (%rdi), %k1
491 ; CHECK-NEXT:    vgetmantsh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload
492 ; CHECK-NEXT:    retq
493   %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}"()
494   %2 = load i8, ptr %mask
495   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.getmant.sh(<8 x half> %a0, <8 x half> %a1, i32 8, <8 x half> zeroinitializer, i8 %2, i32 4)
496   ret <8 x half> %3
499 define <32 x half> @stack_fold_maxph_zmm(<32 x half> %a0, <32 x half> %a1) #0 {
500 ; CHECK-LABEL: stack_fold_maxph_zmm:
501 ; CHECK:       # %bb.0:
502 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
503 ; CHECK-NEXT:    #APP
504 ; CHECK-NEXT:    nop
505 ; CHECK-NEXT:    #NO_APP
506 ; CHECK-NEXT:    vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload
507 ; CHECK-NEXT:    retq
508   %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}"()
509   %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)
510   ret <32 x half> %2
512 declare <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half>, <32 x half>, i32) nounwind readnone
514 define <32 x half> @stack_fold_maxph_zmm_commuted(<32 x half> %a0, <32 x half> %a1) #0 {
515 ; CHECK-LABEL: stack_fold_maxph_zmm_commuted:
516 ; CHECK:       # %bb.0:
517 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
518 ; CHECK-NEXT:    #APP
519 ; CHECK-NEXT:    nop
520 ; CHECK-NEXT:    #NO_APP
521 ; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload
522 ; CHECK-NEXT:    vmaxph %zmm0, %zmm1, %zmm0
523 ; CHECK-NEXT:    retq
524   %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}"()
525   %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)
526   ret <32 x half> %2
529 define <32 x half> @stack_fold_maxph_zmm_k(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) #0 {
530 ; CHECK-LABEL: stack_fold_maxph_zmm_k:
531 ; CHECK:       # %bb.0:
532 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
533 ; CHECK-NEXT:    #APP
534 ; CHECK-NEXT:    nop
535 ; CHECK-NEXT:    #NO_APP
536 ; CHECK-NEXT:    kmovd %edi, %k1
537 ; CHECK-NEXT:    vmovaps (%rsi), %zmm2
538 ; CHECK-NEXT:    vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
539 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
540 ; CHECK-NEXT:    retq
541   %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}"()
542   %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)
543   %3 = bitcast i32 %mask to <32 x i1>
544   %4 = load <32 x half>, ptr %passthru
545   %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4
546   ret <32 x half> %5
549 define <32 x half> @stack_fold_maxph_zmm_k_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) #0 {
550 ; CHECK-LABEL: stack_fold_maxph_zmm_k_commuted:
551 ; CHECK:       # %bb.0:
552 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
553 ; CHECK-NEXT:    #APP
554 ; CHECK-NEXT:    nop
555 ; CHECK-NEXT:    #NO_APP
556 ; CHECK-NEXT:    kmovd %edi, %k1
557 ; CHECK-NEXT:    vmovaps (%rsi), %zmm2
558 ; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload
559 ; CHECK-NEXT:    vmaxph %zmm0, %zmm1, %zmm2 {%k1}
560 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
561 ; CHECK-NEXT:    retq
562   %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}"()
563   %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)
564   %3 = bitcast i32 %mask to <32 x i1>
565   %4 = load <32 x half>, ptr %passthru
566   %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4
567   ret <32 x half> %5
570 define <32 x half> @stack_fold_maxph_zmm_kz(<32 x half> %a0, <32 x half> %a1, i32 %mask) #0 {
571 ; CHECK-LABEL: stack_fold_maxph_zmm_kz:
572 ; CHECK:       # %bb.0:
573 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
574 ; CHECK-NEXT:    #APP
575 ; CHECK-NEXT:    nop
576 ; CHECK-NEXT:    #NO_APP
577 ; CHECK-NEXT:    kmovd %edi, %k1
578 ; CHECK-NEXT:    vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload
579 ; CHECK-NEXT:    retq
580   %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}"()
581   %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)
582   %3 = bitcast i32 %mask to <32 x i1>
583   %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer
584   ret <32 x half> %4
587 define <32 x half> @stack_fold_maxph_zmm_kz_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask) #0 {
588 ; CHECK-LABEL: stack_fold_maxph_zmm_kz_commuted:
589 ; CHECK:       # %bb.0:
590 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
591 ; CHECK-NEXT:    #APP
592 ; CHECK-NEXT:    nop
593 ; CHECK-NEXT:    #NO_APP
594 ; CHECK-NEXT:    kmovd %edi, %k1
595 ; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload
596 ; CHECK-NEXT:    vmaxph %zmm0, %zmm1, %zmm0 {%k1} {z}
597 ; CHECK-NEXT:    retq
598   %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}"()
599   %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)
600   %3 = bitcast i32 %mask to <32 x i1>
601   %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer
602   ret <32 x half> %4
605 define <32 x half> @stack_fold_maxph_zmm_commutable(<32 x half> %a0, <32 x half> %a1) #1 {
606 ; CHECK-LABEL: stack_fold_maxph_zmm_commutable:
607 ; CHECK:       # %bb.0:
608 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
609 ; CHECK-NEXT:    #APP
610 ; CHECK-NEXT:    nop
611 ; CHECK-NEXT:    #NO_APP
612 ; CHECK-NEXT:    vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload
613 ; CHECK-NEXT:    retq
614   %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}"()
615   %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)
616   ret <32 x half> %2
619 define <32 x half> @stack_fold_maxph_zmm_commutable_commuted(<32 x half> %a0, <32 x half> %a1) #1 {
620 ; CHECK-LABEL: stack_fold_maxph_zmm_commutable_commuted:
621 ; CHECK:       # %bb.0:
622 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
623 ; CHECK-NEXT:    #APP
624 ; CHECK-NEXT:    nop
625 ; CHECK-NEXT:    #NO_APP
626 ; CHECK-NEXT:    vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload
627 ; CHECK-NEXT:    retq
628   %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}"()
629   %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)
630   ret <32 x half> %2
633 define <32 x half> @stack_fold_maxph_zmm_commutable_k(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) #1 {
634 ; CHECK-LABEL: stack_fold_maxph_zmm_commutable_k:
635 ; CHECK:       # %bb.0:
636 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
637 ; CHECK-NEXT:    #APP
638 ; CHECK-NEXT:    nop
639 ; CHECK-NEXT:    #NO_APP
640 ; CHECK-NEXT:    kmovd %edi, %k1
641 ; CHECK-NEXT:    vmovaps (%rsi), %zmm2
642 ; CHECK-NEXT:    vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
643 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
644 ; CHECK-NEXT:    retq
645   %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}"()
646   %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)
647   %3 = bitcast i32 %mask to <32 x i1>
648   %4 = load <32 x half>, ptr %passthru
649   %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4
650   ret <32 x half> %5
653 define <32 x half> @stack_fold_maxph_zmm_commutable_k_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) #1 {
654 ; CHECK-LABEL: stack_fold_maxph_zmm_commutable_k_commuted:
655 ; CHECK:       # %bb.0:
656 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
657 ; CHECK-NEXT:    #APP
658 ; CHECK-NEXT:    nop
659 ; CHECK-NEXT:    #NO_APP
660 ; CHECK-NEXT:    kmovd %edi, %k1
661 ; CHECK-NEXT:    vmovaps (%rsi), %zmm2
662 ; CHECK-NEXT:    vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
663 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
664 ; CHECK-NEXT:    retq
665   %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}"()
666   %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)
667   %3 = bitcast i32 %mask to <32 x i1>
668   %4 = load <32 x half>, ptr %passthru
669   %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4
670   ret <32 x half> %5
673 define <32 x half> @stack_fold_maxph_zmm_commutable_kz(<32 x half> %a0, <32 x half> %a1, i32 %mask) #1 {
674 ; CHECK-LABEL: stack_fold_maxph_zmm_commutable_kz:
675 ; CHECK:       # %bb.0:
676 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
677 ; CHECK-NEXT:    #APP
678 ; CHECK-NEXT:    nop
679 ; CHECK-NEXT:    #NO_APP
680 ; CHECK-NEXT:    kmovd %edi, %k1
681 ; CHECK-NEXT:    vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload
682 ; CHECK-NEXT:    retq
683   %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}"()
684   %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)
685   %3 = bitcast i32 %mask to <32 x i1>
686   %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer
687   ret <32 x half> %4
690 define <32 x half> @stack_fold_maxph_zmm_commutable_kz_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask) #1 {
691 ; CHECK-LABEL: stack_fold_maxph_zmm_commutable_kz_commuted:
692 ; CHECK:       # %bb.0:
693 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
694 ; CHECK-NEXT:    #APP
695 ; CHECK-NEXT:    nop
696 ; CHECK-NEXT:    #NO_APP
697 ; CHECK-NEXT:    kmovd %edi, %k1
698 ; CHECK-NEXT:    vmaxph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload
699 ; CHECK-NEXT:    retq
700   %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}"()
701   %2 = call <32 x half> @llvm.x86.avx512fp16.max.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)
702   %3 = bitcast i32 %mask to <32 x i1>
703   %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer
704   ret <32 x half> %4
707 define half @stack_fold_maxsh(half %a0, half %a1) #0 {
708 ; CHECK-LABEL: stack_fold_maxsh:
709 ; CHECK:       # %bb.0:
710 ; CHECK-NEXT:    vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
711 ; CHECK-NEXT:    #APP
712 ; CHECK-NEXT:    nop
713 ; CHECK-NEXT:    #NO_APP
714 ; CHECK-NEXT:    vmaxsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
715 ; CHECK-NEXT:    retq
716   %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}"()
717   %2 = fcmp ogt half %a0, %a1
718   %3 = select i1 %2, half %a0, half %a1
719   ret half %3
722 define half @stack_fold_maxsh_commuted(half %a0, half %a1) #0 {
723 ; CHECK-LABEL: stack_fold_maxsh_commuted:
724 ; CHECK:       # %bb.0:
725 ; CHECK-NEXT:    vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
726 ; CHECK-NEXT:    #APP
727 ; CHECK-NEXT:    nop
728 ; CHECK-NEXT:    #NO_APP
729 ; CHECK-NEXT:    vmovsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload
730 ; CHECK-NEXT:    vmaxsh %xmm0, %xmm1, %xmm0
731 ; CHECK-NEXT:    retq
732   %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}"()
733   %2 = fcmp ogt half %a1, %a0
734   %3 = select i1 %2, half %a1, half %a0
735   ret half %3
738 define half @stack_fold_maxsh_commutable(half %a0, half %a1) #1 {
739 ; CHECK-LABEL: stack_fold_maxsh_commutable:
740 ; CHECK:       # %bb.0:
741 ; CHECK-NEXT:    vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
742 ; CHECK-NEXT:    #APP
743 ; CHECK-NEXT:    nop
744 ; CHECK-NEXT:    #NO_APP
745 ; CHECK-NEXT:    vmaxsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
746 ; CHECK-NEXT:    retq
747   %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}"()
748   %2 = fcmp ogt half %a0, %a1
749   %3 = select i1 %2, half %a0, half %a1
750   ret half %3
753 define half @stack_fold_maxsh_commutable_commuted(half %a0, half %a1) #1 {
754 ; CHECK-LABEL: stack_fold_maxsh_commutable_commuted:
755 ; CHECK:       # %bb.0:
756 ; CHECK-NEXT:    vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
757 ; CHECK-NEXT:    #APP
758 ; CHECK-NEXT:    nop
759 ; CHECK-NEXT:    #NO_APP
760 ; CHECK-NEXT:    vmaxsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
761 ; CHECK-NEXT:    retq
762   %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}"()
763   %2 = fcmp ogt half %a1, %a0
764   %3 = select i1 %2, half %a1, half %a0
765   ret half %3
768 define <8 x half> @stack_fold_maxsh_int(<8 x half> %a0, <8 x half> %a1) #0 {
769 ; CHECK-LABEL: stack_fold_maxsh_int:
770 ; CHECK:       # %bb.0:
771 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
772 ; CHECK-NEXT:    #APP
773 ; CHECK-NEXT:    nop
774 ; CHECK-NEXT:    #NO_APP
775 ; CHECK-NEXT:    vmaxsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
776 ; CHECK-NEXT:    retq
777   %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}"()
778   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.max.sh.round(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1, i32 4)
779   ret <8 x half> %2
781 declare <8 x half> @llvm.x86.avx512fp16.mask.max.sh.round(<8 x half>, <8 x half>, <8 x half>, i8, i32)
783 define <8 x half> @stack_fold_maxsh_mask(<8 x half> %a0, <8 x half> %a1, i8 %mask, ptr %passthru) {
784 ; CHECK-LABEL: stack_fold_maxsh_mask:
785 ; CHECK:       # %bb.0:
786 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
787 ; CHECK-NEXT:    kmovd %edi, %k1
788 ; CHECK-NEXT:    #APP
789 ; CHECK-NEXT:    nop
790 ; CHECK-NEXT:    #NO_APP
791 ; CHECK-NEXT:    vmovaps (%rsi), %xmm2
792 ; CHECK-NEXT:    vmaxsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
793 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
794 ; CHECK-NEXT:    retq
795   %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}"()
796   %2 = load <8 x half>, ptr %passthru
797   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.max.sh.round(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask, i32 4)
798   ret <8 x half> %3
801 define <8 x half> @stack_fold_maxsh_maskz(<8 x half> %a0, <8 x half> %a1, i8 %mask) {
802 ; CHECK-LABEL: stack_fold_maxsh_maskz:
803 ; CHECK:       # %bb.0:
804 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
805 ; CHECK-NEXT:    kmovd %edi, %k1
806 ; CHECK-NEXT:    #APP
807 ; CHECK-NEXT:    nop
808 ; CHECK-NEXT:    #NO_APP
809 ; CHECK-NEXT:    vmaxsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload
810 ; CHECK-NEXT:    retq
811   %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}"()
812   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.max.sh.round(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %mask, i32 4)
813   ret <8 x half> %2
816 define <32 x half> @stack_fold_minph_zmm(<32 x half> %a0, <32 x half> %a1) #0 {
817 ; CHECK-LABEL: stack_fold_minph_zmm:
818 ; CHECK:       # %bb.0:
819 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
820 ; CHECK-NEXT:    #APP
821 ; CHECK-NEXT:    nop
822 ; CHECK-NEXT:    #NO_APP
823 ; CHECK-NEXT:    vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload
824 ; CHECK-NEXT:    retq
825   %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}"()
826   %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)
827   ret <32 x half> %2
829 declare <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half>, <32 x half>, i32) nounwind readnone
831 define <32 x half> @stack_fold_minph_zmm_commuted(<32 x half> %a0, <32 x half> %a1) #0 {
832 ; CHECK-LABEL: stack_fold_minph_zmm_commuted:
833 ; CHECK:       # %bb.0:
834 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
835 ; CHECK-NEXT:    #APP
836 ; CHECK-NEXT:    nop
837 ; CHECK-NEXT:    #NO_APP
838 ; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload
839 ; CHECK-NEXT:    vminph %zmm0, %zmm1, %zmm0
840 ; CHECK-NEXT:    retq
841   %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}"()
842   %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)
843   ret <32 x half> %2
846 define <32 x half> @stack_fold_minph_zmm_k(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) #0 {
847 ; CHECK-LABEL: stack_fold_minph_zmm_k:
848 ; CHECK:       # %bb.0:
849 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
850 ; CHECK-NEXT:    #APP
851 ; CHECK-NEXT:    nop
852 ; CHECK-NEXT:    #NO_APP
853 ; CHECK-NEXT:    kmovd %edi, %k1
854 ; CHECK-NEXT:    vmovaps (%rsi), %zmm2
855 ; CHECK-NEXT:    vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
856 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
857 ; CHECK-NEXT:    retq
858   %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}"()
859   %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)
860   %3 = bitcast i32 %mask to <32 x i1>
861   %4 = load <32 x half>, ptr %passthru
862   %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4
863   ret <32 x half> %5
866 define <32 x half> @stack_fold_minph_zmm_k_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) #0 {
867 ; CHECK-LABEL: stack_fold_minph_zmm_k_commuted:
868 ; CHECK:       # %bb.0:
869 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
870 ; CHECK-NEXT:    #APP
871 ; CHECK-NEXT:    nop
872 ; CHECK-NEXT:    #NO_APP
873 ; CHECK-NEXT:    kmovd %edi, %k1
874 ; CHECK-NEXT:    vmovaps (%rsi), %zmm2
875 ; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload
876 ; CHECK-NEXT:    vminph %zmm0, %zmm1, %zmm2 {%k1}
877 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
878 ; CHECK-NEXT:    retq
879   %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}"()
880   %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)
881   %3 = bitcast i32 %mask to <32 x i1>
882   %4 = load <32 x half>, ptr %passthru
883   %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4
884   ret <32 x half> %5
887 define <32 x half> @stack_fold_minph_zmm_kz(<32 x half> %a0, <32 x half> %a1, i32 %mask) #0 {
888 ; CHECK-LABEL: stack_fold_minph_zmm_kz:
889 ; CHECK:       # %bb.0:
890 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
891 ; CHECK-NEXT:    #APP
892 ; CHECK-NEXT:    nop
893 ; CHECK-NEXT:    #NO_APP
894 ; CHECK-NEXT:    kmovd %edi, %k1
895 ; CHECK-NEXT:    vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload
896 ; CHECK-NEXT:    retq
897   %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}"()
898   %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)
899   %3 = bitcast i32 %mask to <32 x i1>
900   %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer
901   ret <32 x half> %4
904 define <32 x half> @stack_fold_minph_zmm_kz_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask) #0 {
905 ; CHECK-LABEL: stack_fold_minph_zmm_kz_commuted:
906 ; CHECK:       # %bb.0:
907 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
908 ; CHECK-NEXT:    #APP
909 ; CHECK-NEXT:    nop
910 ; CHECK-NEXT:    #NO_APP
911 ; CHECK-NEXT:    kmovd %edi, %k1
912 ; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload
913 ; CHECK-NEXT:    vminph %zmm0, %zmm1, %zmm0 {%k1} {z}
914 ; CHECK-NEXT:    retq
915   %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}"()
916   %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)
917   %3 = bitcast i32 %mask to <32 x i1>
918   %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer
919   ret <32 x half> %4
922 define <32 x half> @stack_fold_minph_zmm_commutable(<32 x half> %a0, <32 x half> %a1) #1 {
923 ; CHECK-LABEL: stack_fold_minph_zmm_commutable:
924 ; CHECK:       # %bb.0:
925 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
926 ; CHECK-NEXT:    #APP
927 ; CHECK-NEXT:    nop
928 ; CHECK-NEXT:    #NO_APP
929 ; CHECK-NEXT:    vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload
930 ; CHECK-NEXT:    retq
931   %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}"()
932   %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)
933   ret <32 x half> %2
936 define <32 x half> @stack_fold_minph_zmm_commutable_commuted(<32 x half> %a0, <32 x half> %a1) #1 {
937 ; CHECK-LABEL: stack_fold_minph_zmm_commutable_commuted:
938 ; CHECK:       # %bb.0:
939 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
940 ; CHECK-NEXT:    #APP
941 ; CHECK-NEXT:    nop
942 ; CHECK-NEXT:    #NO_APP
943 ; CHECK-NEXT:    vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload
944 ; CHECK-NEXT:    retq
945   %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}"()
946   %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)
947   ret <32 x half> %2
950 define <32 x half> @stack_fold_minph_zmm_commutable_k(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) #1 {
951 ; CHECK-LABEL: stack_fold_minph_zmm_commutable_k:
952 ; CHECK:       # %bb.0:
953 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
954 ; CHECK-NEXT:    #APP
955 ; CHECK-NEXT:    nop
956 ; CHECK-NEXT:    #NO_APP
957 ; CHECK-NEXT:    kmovd %edi, %k1
958 ; CHECK-NEXT:    vmovaps (%rsi), %zmm2
959 ; CHECK-NEXT:    vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
960 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
961 ; CHECK-NEXT:    retq
962   %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}"()
963   %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)
964   %3 = bitcast i32 %mask to <32 x i1>
965   %4 = load <32 x half>, ptr %passthru
966   %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4
967   ret <32 x half> %5
970 define <32 x half> @stack_fold_minph_zmm_commutable_k_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) #1 {
971 ; CHECK-LABEL: stack_fold_minph_zmm_commutable_k_commuted:
972 ; CHECK:       # %bb.0:
973 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
974 ; CHECK-NEXT:    #APP
975 ; CHECK-NEXT:    nop
976 ; CHECK-NEXT:    #NO_APP
977 ; CHECK-NEXT:    kmovd %edi, %k1
978 ; CHECK-NEXT:    vmovaps (%rsi), %zmm2
979 ; CHECK-NEXT:    vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
980 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
981 ; CHECK-NEXT:    retq
982   %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}"()
983   %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)
984   %3 = bitcast i32 %mask to <32 x i1>
985   %4 = load <32 x half>, ptr %passthru
986   %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4
987   ret <32 x half> %5
990 define <32 x half> @stack_fold_minph_zmm_commutable_kz(<32 x half> %a0, <32 x half> %a1, i32 %mask) #1 {
991 ; CHECK-LABEL: stack_fold_minph_zmm_commutable_kz:
992 ; CHECK:       # %bb.0:
993 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
994 ; CHECK-NEXT:    #APP
995 ; CHECK-NEXT:    nop
996 ; CHECK-NEXT:    #NO_APP
997 ; CHECK-NEXT:    kmovd %edi, %k1
998 ; CHECK-NEXT:    vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload
999 ; CHECK-NEXT:    retq
1000   %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}"()
1001   %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a0, <32 x half> %a1, i32 4)
1002   %3 = bitcast i32 %mask to <32 x i1>
1003   %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer
1004   ret <32 x half> %4
1007 define <32 x half> @stack_fold_minph_zmm_commutable_kz_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask) #1 {
1008 ; CHECK-LABEL: stack_fold_minph_zmm_commutable_kz_commuted:
1009 ; CHECK:       # %bb.0:
1010 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1011 ; CHECK-NEXT:    #APP
1012 ; CHECK-NEXT:    nop
1013 ; CHECK-NEXT:    #NO_APP
1014 ; CHECK-NEXT:    kmovd %edi, %k1
1015 ; CHECK-NEXT:    vminph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload
1016 ; CHECK-NEXT:    retq
1017   %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}"()
1018   %2 = call <32 x half> @llvm.x86.avx512fp16.min.ph.512(<32 x half> %a1, <32 x half> %a0, i32 4)
1019   %3 = bitcast i32 %mask to <32 x i1>
1020   %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer
1021   ret <32 x half> %4
1024 define half @stack_fold_minsh(half %a0, half %a1) #0 {
1025 ; CHECK-LABEL: stack_fold_minsh:
1026 ; CHECK:       # %bb.0:
1027 ; CHECK-NEXT:    vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1028 ; CHECK-NEXT:    #APP
1029 ; CHECK-NEXT:    nop
1030 ; CHECK-NEXT:    #NO_APP
1031 ; CHECK-NEXT:    vminsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
1032 ; CHECK-NEXT:    retq
1033   %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}"()
1034   %2 = fcmp olt half %a0, %a1
1035   %3 = select i1 %2, half %a0, half %a1
1036   ret half %3
1039 define half @stack_fold_minsh_commuted(half %a0, half %a1) #0 {
1040 ; CHECK-LABEL: stack_fold_minsh_commuted:
1041 ; CHECK:       # %bb.0:
1042 ; CHECK-NEXT:    vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1043 ; CHECK-NEXT:    #APP
1044 ; CHECK-NEXT:    nop
1045 ; CHECK-NEXT:    #NO_APP
1046 ; CHECK-NEXT:    vmovsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 4-byte Reload
1047 ; CHECK-NEXT:    vminsh %xmm0, %xmm1, %xmm0
1048 ; CHECK-NEXT:    retq
1049   %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}"()
1050   %2 = fcmp olt half %a1, %a0
1051   %3 = select i1 %2, half %a1, half %a0
1052   ret half %3
1055 define half @stack_fold_minsh_commutable(half %a0, half %a1) #1 {
1056 ; CHECK-LABEL: stack_fold_minsh_commutable:
1057 ; CHECK:       # %bb.0:
1058 ; CHECK-NEXT:    vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1059 ; CHECK-NEXT:    #APP
1060 ; CHECK-NEXT:    nop
1061 ; CHECK-NEXT:    #NO_APP
1062 ; CHECK-NEXT:    vminsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
1063 ; CHECK-NEXT:    retq
1064   %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}"()
1065   %2 = fcmp olt half %a0, %a1
1066   %3 = select i1 %2, half %a0, half %a1
1067   ret half %3
1070 define half @stack_fold_minsh_commutable_commuted(half %a0, half %a1) #1 {
1071 ; CHECK-LABEL: stack_fold_minsh_commutable_commuted:
1072 ; CHECK:       # %bb.0:
1073 ; CHECK-NEXT:    vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1074 ; CHECK-NEXT:    #APP
1075 ; CHECK-NEXT:    nop
1076 ; CHECK-NEXT:    #NO_APP
1077 ; CHECK-NEXT:    vminsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
1078 ; CHECK-NEXT:    retq
1079   %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}"()
1080   %2 = fcmp olt half %a1, %a0
1081   %3 = select i1 %2, half %a1, half %a0
1082   ret half %3
1085 define <8 x half> @stack_fold_minsh_int(<8 x half> %a0, <8 x half> %a1) #0 {
1086 ; CHECK-LABEL: stack_fold_minsh_int:
1087 ; CHECK:       # %bb.0:
1088 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1089 ; CHECK-NEXT:    #APP
1090 ; CHECK-NEXT:    nop
1091 ; CHECK-NEXT:    #NO_APP
1092 ; CHECK-NEXT:    vminsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
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 = call <8 x half> @llvm.x86.avx512fp16.mask.min.sh.round(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1, i32 4)
1096   ret <8 x half> %2
1098 declare <8 x half> @llvm.x86.avx512fp16.mask.min.sh.round(<8 x half>, <8 x half>, <8 x half>, i8, i32)
1100 define <8 x half> @stack_fold_minsh_mask(<8 x half> %a0, <8 x half> %a1, i8 %mask, ptr %passthru) {
1101 ; CHECK-LABEL: stack_fold_minsh_mask:
1102 ; CHECK:       # %bb.0:
1103 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1104 ; CHECK-NEXT:    kmovd %edi, %k1
1105 ; CHECK-NEXT:    #APP
1106 ; CHECK-NEXT:    nop
1107 ; CHECK-NEXT:    #NO_APP
1108 ; CHECK-NEXT:    vmovaps (%rsi), %xmm2
1109 ; CHECK-NEXT:    vminsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
1110 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1111 ; CHECK-NEXT:    retq
1112   %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}"()
1113   %2 = load <8 x half>, ptr %passthru
1114   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.min.sh.round(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask, i32 4)
1115   ret <8 x half> %3
1118 define <8 x half> @stack_fold_minsh_maskz(<8 x half> %a0, <8 x half> %a1, i8 %mask) {
1119 ; CHECK-LABEL: stack_fold_minsh_maskz:
1120 ; CHECK:       # %bb.0:
1121 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1122 ; CHECK-NEXT:    kmovd %edi, %k1
1123 ; CHECK-NEXT:    #APP
1124 ; CHECK-NEXT:    nop
1125 ; CHECK-NEXT:    #NO_APP
1126 ; CHECK-NEXT:    vminsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload
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 = call <8 x half> @llvm.x86.avx512fp16.mask.min.sh.round(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %mask, i32 4)
1130   ret <8 x half> %2
1133 define <32 x half> @stack_fold_mulph_zmm(<32 x half> %a0, <32 x half> %a1) {
1134 ; CHECK-LABEL: stack_fold_mulph_zmm:
1135 ; CHECK:       # %bb.0:
1136 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1137 ; CHECK-NEXT:    #APP
1138 ; CHECK-NEXT:    nop
1139 ; CHECK-NEXT:    #NO_APP
1140 ; CHECK-NEXT:    vmulph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload
1141 ; CHECK-NEXT:    retq
1142   %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}"()
1143   %2 = fmul <32 x half> %a0, %a1
1144   ret <32 x half> %2
1147 define <32 x half> @stack_fold_mulph_zmm_k(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) {
1148 ; CHECK-LABEL: stack_fold_mulph_zmm_k:
1149 ; CHECK:       # %bb.0:
1150 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1151 ; CHECK-NEXT:    #APP
1152 ; CHECK-NEXT:    nop
1153 ; CHECK-NEXT:    #NO_APP
1154 ; CHECK-NEXT:    kmovd %edi, %k1
1155 ; CHECK-NEXT:    vmovaps (%rsi), %zmm2
1156 ; CHECK-NEXT:    vmulph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
1157 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1158 ; CHECK-NEXT:    retq
1159   %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}"()
1160   %2 = fmul <32 x half> %a0, %a1
1161   %3 = bitcast i32 %mask to <32 x i1>
1162   %4 = load <32 x half>, ptr %passthru
1163   %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4
1164   ret <32 x half> %5
1167 define <32 x half> @stack_fold_mulph_zmm_k_commuted(<32 x half> %a0, <32 x half> %a1, i32 %mask, ptr %passthru) {
1168 ; CHECK-LABEL: stack_fold_mulph_zmm_k_commuted:
1169 ; CHECK:       # %bb.0:
1170 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1171 ; CHECK-NEXT:    #APP
1172 ; CHECK-NEXT:    nop
1173 ; CHECK-NEXT:    #NO_APP
1174 ; CHECK-NEXT:    kmovd %edi, %k1
1175 ; CHECK-NEXT:    vmovaps (%rsi), %zmm2
1176 ; CHECK-NEXT:    vmulph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
1177 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1178 ; CHECK-NEXT:    retq
1179   %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}"()
1180   %2 = fmul <32 x half> %a1, %a0
1181   %3 = bitcast i32 %mask to <32 x i1>
1182   %4 = load <32 x half>, ptr %passthru
1183   %5 = select <32 x i1> %3, <32 x half> %2, <32 x half> %4
1184   ret <32 x half> %5
1187 define <32 x half> @stack_fold_mulph_zmm_kz(<32 x half> %a0, <32 x half> %a1, i32 %mask) {
1188 ; CHECK-LABEL: stack_fold_mulph_zmm_kz:
1189 ; CHECK:       # %bb.0:
1190 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1191 ; CHECK-NEXT:    #APP
1192 ; CHECK-NEXT:    nop
1193 ; CHECK-NEXT:    #NO_APP
1194 ; CHECK-NEXT:    kmovd %edi, %k1
1195 ; CHECK-NEXT:    vmulph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 {%k1} {z} # 64-byte Folded Reload
1196 ; CHECK-NEXT:    retq
1197   %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}"()
1198   %2 = fmul <32 x half> %a1, %a0
1199   %3 = bitcast i32 %mask to <32 x i1>
1200   %4 = select <32 x i1> %3, <32 x half> %2, <32 x half> zeroinitializer
1201   ret <32 x half> %4
1204 define half @stack_fold_mulsh(half %a0, half %a1) {
1205 ; CHECK-LABEL: stack_fold_mulsh:
1206 ; CHECK:       # %bb.0:
1207 ; CHECK-NEXT:    vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1208 ; CHECK-NEXT:    #APP
1209 ; CHECK-NEXT:    nop
1210 ; CHECK-NEXT:    #NO_APP
1211 ; CHECK-NEXT:    vmulsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
1212 ; CHECK-NEXT:    retq
1213   %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}"()
1214   %2 = fmul half %a0, %a1
1215   ret half %2
1218 define <8 x half> @stack_fold_mulsh_int(<8 x half> %a0, <8 x half> %a1) {
1219 ; CHECK-LABEL: stack_fold_mulsh_int:
1220 ; CHECK:       # %bb.0:
1221 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1222 ; CHECK-NEXT:    #APP
1223 ; CHECK-NEXT:    nop
1224 ; CHECK-NEXT:    #NO_APP
1225 ; CHECK-NEXT:    vmulsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
1226 ; CHECK-NEXT:    retq
1227   %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}"()
1228   %2 = extractelement <8 x half> %a0, i32 0
1229   %3 = extractelement <8 x half> %a1, i32 0
1230   %4 = fmul half %2, %3
1231   %5 = insertelement <8 x half> %a0, half %4, i32 0
1232   ret <8 x half> %5
1235 define <32 x half> @stack_fold_rcpph(<32 x half> %a0) {
1236 ; CHECK-LABEL: stack_fold_rcpph:
1237 ; CHECK:       # %bb.0:
1238 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1239 ; CHECK-NEXT:    #APP
1240 ; CHECK-NEXT:    nop
1241 ; CHECK-NEXT:    #NO_APP
1242 ; CHECK-NEXT:    vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload
1243 ; CHECK-NEXT:    retq
1244   %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}"()
1245   %2 = call <32 x half> @llvm.x86.avx512fp16.mask.rcp.ph.512(<32 x half> %a0, <32 x half> undef, i32 -1)
1246   ret <32 x half> %2
1248 declare <32 x half> @llvm.x86.avx512fp16.mask.rcp.ph.512(<32 x half>, <32 x half>, i32)
1250 define <32 x half> @stack_fold_rcpph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {
1251 ; CHECK-LABEL: stack_fold_rcpph_mask:
1252 ; CHECK:       # %bb.0:
1253 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1254 ; CHECK-NEXT:    kmovd %esi, %k1
1255 ; CHECK-NEXT:    #APP
1256 ; CHECK-NEXT:    nop
1257 ; CHECK-NEXT:    #NO_APP
1258 ; CHECK-NEXT:    vmovaps (%rdi), %zmm1
1259 ; CHECK-NEXT:    vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload
1260 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
1261 ; CHECK-NEXT:    retq
1262   %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}"()
1263   %2 = load <32 x half>, ptr %passthru
1264   %3 = call <32 x half> @llvm.x86.avx512fp16.mask.rcp.ph.512(<32 x half> %a0, <32 x half> %2, i32 %mask)
1265   ret <32 x half> %3
1268 define <32 x half> @stack_fold_rcpph_maskz(<32 x half> %a0, ptr %mask) {
1269 ; CHECK-LABEL: stack_fold_rcpph_maskz:
1270 ; CHECK:       # %bb.0:
1271 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1272 ; CHECK-NEXT:    #APP
1273 ; CHECK-NEXT:    nop
1274 ; CHECK-NEXT:    #NO_APP
1275 ; CHECK-NEXT:    kmovd (%rdi), %k1
1276 ; CHECK-NEXT:    vrcpph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload
1277 ; CHECK-NEXT:    retq
1278   %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}"()
1279   %2 = load i32, ptr %mask
1280   %3 = call <32 x half> @llvm.x86.avx512fp16.mask.rcp.ph.512(<32 x half> %a0, <32 x half> zeroinitializer, i32 %2)
1281   ret <32 x half> %3
1284 define <8 x half> @stack_fold_rcpsh(<8 x half> %a0, <8 x half> %a1) {
1285 ; CHECK-LABEL: stack_fold_rcpsh:
1286 ; CHECK:       # %bb.0:
1287 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1288 ; CHECK-NEXT:    #APP
1289 ; CHECK-NEXT:    nop
1290 ; CHECK-NEXT:    #NO_APP
1291 ; CHECK-NEXT:    vrcpsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
1292 ; CHECK-NEXT:    retq
1293   %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}"()
1294   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.rcp.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1)
1295   ret <8 x half> %2
1297 declare <8 x half> @llvm.x86.avx512fp16.mask.rcp.sh(<8 x half>, <8 x half>, <8 x half>, i8)
1299 define <8 x half> @stack_fold_rcpsh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {
1300 ; CHECK-LABEL: stack_fold_rcpsh_mask:
1301 ; CHECK:       # %bb.0:
1302 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1303 ; CHECK-NEXT:    kmovd %esi, %k1
1304 ; CHECK-NEXT:    #APP
1305 ; CHECK-NEXT:    nop
1306 ; CHECK-NEXT:    #NO_APP
1307 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
1308 ; CHECK-NEXT:    vrcpsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
1309 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1310 ; CHECK-NEXT:    retq
1311   %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}"()
1312   %2 = load <8 x half>, ptr %passthru
1313   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rcp.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask)
1314   ret <8 x half> %3
1317 define <8 x half> @stack_fold_rcpsh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {
1318 ; CHECK-LABEL: stack_fold_rcpsh_maskz:
1319 ; CHECK:       # %bb.0:
1320 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1321 ; CHECK-NEXT:    #APP
1322 ; CHECK-NEXT:    nop
1323 ; CHECK-NEXT:    #NO_APP
1324 ; CHECK-NEXT:    kmovb (%rdi), %k1
1325 ; CHECK-NEXT:    vrcpsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload
1326 ; CHECK-NEXT:    retq
1327   %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}"()
1328   %2 = load i8, ptr %mask
1329   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rcp.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %2)
1330   ret <8 x half> %3
1333 define <32 x half> @stack_fold_reduceph(<32 x half> %a0) {
1334 ; CHECK-LABEL: stack_fold_reduceph:
1335 ; CHECK:       # %bb.0:
1336 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1337 ; CHECK-NEXT:    #APP
1338 ; CHECK-NEXT:    nop
1339 ; CHECK-NEXT:    #NO_APP
1340 ; CHECK-NEXT:    vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload
1341 ; CHECK-NEXT:    retq
1342   %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}"()
1343   %2 = call <32 x half> @llvm.x86.avx512fp16.mask.reduce.ph.512(<32 x half> %a0, i32 8, <32 x half> undef, i32 -1, i32 4)
1344   ret <32 x half> %2
1346 declare <32 x half> @llvm.x86.avx512fp16.mask.reduce.ph.512(<32 x half>, i32, <32 x half>, i32, i32)
1348 define <32 x half> @stack_fold_reduceph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {
1349 ; CHECK-LABEL: stack_fold_reduceph_mask:
1350 ; CHECK:       # %bb.0:
1351 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1352 ; CHECK-NEXT:    kmovd %esi, %k1
1353 ; CHECK-NEXT:    #APP
1354 ; CHECK-NEXT:    nop
1355 ; CHECK-NEXT:    #NO_APP
1356 ; CHECK-NEXT:    vmovaps (%rdi), %zmm1
1357 ; CHECK-NEXT:    vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload
1358 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
1359 ; CHECK-NEXT:    retq
1360   %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}"()
1361   %2 = load <32 x half>, ptr %passthru
1362   %3 = call <32 x half> @llvm.x86.avx512fp16.mask.reduce.ph.512(<32 x half> %a0, i32 8, <32 x half> %2, i32 %mask, i32 4)
1363   ret <32 x half> %3
1366 define <32 x half> @stack_fold_reduceph_maskz(<32 x half> %a0, ptr %mask) {
1367 ; CHECK-LABEL: stack_fold_reduceph_maskz:
1368 ; CHECK:       # %bb.0:
1369 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1370 ; CHECK-NEXT:    #APP
1371 ; CHECK-NEXT:    nop
1372 ; CHECK-NEXT:    #NO_APP
1373 ; CHECK-NEXT:    kmovd (%rdi), %k1
1374 ; CHECK-NEXT:    vreduceph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload
1375 ; CHECK-NEXT:    retq
1376   %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}"()
1377   %2 = load i32, ptr %mask
1378   %3 = call <32 x half> @llvm.x86.avx512fp16.mask.reduce.ph.512(<32 x half> %a0, i32 8, <32 x half> zeroinitializer, i32 %2, i32 4)
1379   ret <32 x half> %3
1382 define <8 x half> @stack_fold_reducesh(<8 x half> %a0, <8 x half> %a1) {
1383 ; CHECK-LABEL: stack_fold_reducesh:
1384 ; CHECK:       # %bb.0:
1385 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1386 ; CHECK-NEXT:    #APP
1387 ; CHECK-NEXT:    nop
1388 ; CHECK-NEXT:    #NO_APP
1389 ; CHECK-NEXT:    vreducesh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
1390 ; CHECK-NEXT:    retq
1391   %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}"()
1392   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1, i32 8, i32 4)
1393   ret <8 x half> %2
1395 declare <8 x half> @llvm.x86.avx512fp16.mask.reduce.sh(<8 x half>, <8 x half>, <8 x half>, i8, i32, i32)
1397 define <8 x half> @stack_fold_reducesh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {
1398 ; CHECK-LABEL: stack_fold_reducesh_mask:
1399 ; CHECK:       # %bb.0:
1400 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1401 ; CHECK-NEXT:    kmovd %esi, %k1
1402 ; CHECK-NEXT:    #APP
1403 ; CHECK-NEXT:    nop
1404 ; CHECK-NEXT:    #NO_APP
1405 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
1406 ; CHECK-NEXT:    vreducesh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
1407 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1408 ; CHECK-NEXT:    retq
1409   %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}"()
1410   %2 = load <8 x half>, ptr %passthru
1411   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask, i32 8, i32 4)
1412   ret <8 x half> %3
1415 define <8 x half> @stack_fold_reducesh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {
1416 ; CHECK-LABEL: stack_fold_reducesh_maskz:
1417 ; CHECK:       # %bb.0:
1418 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1419 ; CHECK-NEXT:    #APP
1420 ; CHECK-NEXT:    nop
1421 ; CHECK-NEXT:    #NO_APP
1422 ; CHECK-NEXT:    kmovb (%rdi), %k1
1423 ; CHECK-NEXT:    vreducesh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload
1424 ; CHECK-NEXT:    retq
1425   %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}"()
1426   %2 = load i8, ptr %mask
1427   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.reduce.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %2, i32 8, i32 4)
1428   ret <8 x half> %3
1431 define <32 x half> @stack_fold_rndscaleph(<32 x half> %a0) {
1432 ; CHECK-LABEL: stack_fold_rndscaleph:
1433 ; CHECK:       # %bb.0:
1434 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1435 ; CHECK-NEXT:    #APP
1436 ; CHECK-NEXT:    nop
1437 ; CHECK-NEXT:    #NO_APP
1438 ; CHECK-NEXT:    vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload
1439 ; CHECK-NEXT:    retq
1440   %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}"()
1441   %2 = call <32 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.512(<32 x half> %a0, i32 8, <32 x half> undef, i32 -1, i32 4)
1442   ret <32 x half> %2
1444 declare <32 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.512(<32 x half>, i32, <32 x half>, i32, i32)
1446 define <32 x half> @stack_fold_rndscaleph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {
1447 ; CHECK-LABEL: stack_fold_rndscaleph_mask:
1448 ; CHECK:       # %bb.0:
1449 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1450 ; CHECK-NEXT:    kmovd %esi, %k1
1451 ; CHECK-NEXT:    #APP
1452 ; CHECK-NEXT:    nop
1453 ; CHECK-NEXT:    #NO_APP
1454 ; CHECK-NEXT:    vmovaps (%rdi), %zmm1
1455 ; CHECK-NEXT:    vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload
1456 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
1457 ; CHECK-NEXT:    retq
1458   %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}"()
1459   %2 = load <32 x half>, ptr %passthru
1460   %3 = call <32 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.512(<32 x half> %a0, i32 8, <32 x half> %2, i32 %mask, i32 4)
1461   ret <32 x half> %3
1464 define <32 x half> @stack_fold_rndscaleph_maskz(<32 x half> %a0, ptr %mask) {
1465 ; CHECK-LABEL: stack_fold_rndscaleph_maskz:
1466 ; CHECK:       # %bb.0:
1467 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1468 ; CHECK-NEXT:    #APP
1469 ; CHECK-NEXT:    nop
1470 ; CHECK-NEXT:    #NO_APP
1471 ; CHECK-NEXT:    kmovd (%rdi), %k1
1472 ; CHECK-NEXT:    vrndscaleph $8, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload
1473 ; CHECK-NEXT:    retq
1474   %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}"()
1475   %2 = load i32, ptr %mask
1476   %3 = call <32 x half> @llvm.x86.avx512fp16.mask.rndscale.ph.512(<32 x half> %a0, i32 8, <32 x half> zeroinitializer, i32 %2, i32 4)
1477   ret <32 x half> %3
1480 define <8 x half> @stack_fold_rndscalesh(<8 x half> %a0, <8 x half> %a1) {
1481 ; CHECK-LABEL: stack_fold_rndscalesh:
1482 ; CHECK:       # %bb.0:
1483 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1484 ; CHECK-NEXT:    #APP
1485 ; CHECK-NEXT:    nop
1486 ; CHECK-NEXT:    #NO_APP
1487 ; CHECK-NEXT:    vrndscalesh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
1488 ; CHECK-NEXT:    retq
1489   %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}"()
1490   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1, i32 8, i32 4)
1491   ret <8 x half> %2
1493 declare <8 x half> @llvm.x86.avx512fp16.mask.rndscale.sh(<8 x half>, <8 x half>, <8 x half>, i8, i32, i32)
1495 define <8 x half> @stack_fold_rndscalesh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {
1496 ; CHECK-LABEL: stack_fold_rndscalesh_mask:
1497 ; CHECK:       # %bb.0:
1498 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1499 ; CHECK-NEXT:    kmovd %esi, %k1
1500 ; CHECK-NEXT:    #APP
1501 ; CHECK-NEXT:    nop
1502 ; CHECK-NEXT:    #NO_APP
1503 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
1504 ; CHECK-NEXT:    vrndscalesh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
1505 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1506 ; CHECK-NEXT:    retq
1507   %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}"()
1508   %2 = load <8 x half>, ptr %passthru
1509   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask, i32 8, i32 4)
1510   ret <8 x half> %3
1513 define <8 x half> @stack_fold_rndscalesh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {
1514 ; CHECK-LABEL: stack_fold_rndscalesh_maskz:
1515 ; CHECK:       # %bb.0:
1516 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1517 ; CHECK-NEXT:    #APP
1518 ; CHECK-NEXT:    nop
1519 ; CHECK-NEXT:    #NO_APP
1520 ; CHECK-NEXT:    kmovb (%rdi), %k1
1521 ; CHECK-NEXT:    vrndscalesh $8, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload
1522 ; CHECK-NEXT:    retq
1523   %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}"()
1524   %2 = load i8, ptr %mask
1525   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rndscale.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %2, i32 8, i32 4)
1526   ret <8 x half> %3
1529 define <32 x half> @stack_fold_rsqrtph(<32 x half> %a0) {
1530 ; CHECK-LABEL: stack_fold_rsqrtph:
1531 ; CHECK:       # %bb.0:
1532 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1533 ; CHECK-NEXT:    #APP
1534 ; CHECK-NEXT:    nop
1535 ; CHECK-NEXT:    #NO_APP
1536 ; CHECK-NEXT:    vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload
1537 ; CHECK-NEXT:    retq
1538   %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}"()
1539   %2 = call <32 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.512(<32 x half> %a0, <32 x half> undef, i32 -1)
1540   ret <32 x half> %2
1542 declare <32 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.512(<32 x half>, <32 x half>, i32)
1544 define <32 x half> @stack_fold_rsqrtph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {
1545 ; CHECK-LABEL: stack_fold_rsqrtph_mask:
1546 ; CHECK:       # %bb.0:
1547 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1548 ; CHECK-NEXT:    kmovd %esi, %k1
1549 ; CHECK-NEXT:    #APP
1550 ; CHECK-NEXT:    nop
1551 ; CHECK-NEXT:    #NO_APP
1552 ; CHECK-NEXT:    vmovaps (%rdi), %zmm1
1553 ; CHECK-NEXT:    vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload
1554 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
1555 ; CHECK-NEXT:    retq
1556   %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}"()
1557   %2 = load <32 x half>, ptr %passthru
1558   %3 = call <32 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.512(<32 x half> %a0, <32 x half> %2, i32 %mask)
1559   ret <32 x half> %3
1562 define <32 x half> @stack_fold_rsqrtph_maskz(<32 x half> %a0, ptr %mask) {
1563 ; CHECK-LABEL: stack_fold_rsqrtph_maskz:
1564 ; CHECK:       # %bb.0:
1565 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1566 ; CHECK-NEXT:    #APP
1567 ; CHECK-NEXT:    nop
1568 ; CHECK-NEXT:    #NO_APP
1569 ; CHECK-NEXT:    kmovd (%rdi), %k1
1570 ; CHECK-NEXT:    vrsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload
1571 ; CHECK-NEXT:    retq
1572   %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}"()
1573   %2 = load i32, ptr %mask
1574   %3 = call <32 x half> @llvm.x86.avx512fp16.mask.rsqrt.ph.512(<32 x half> %a0, <32 x half> zeroinitializer, i32 %2)
1575   ret <32 x half> %3
1578 define <8 x half> @stack_fold_rsqrtsh(<8 x half> %a0, <8 x half> %a1) {
1579 ; CHECK-LABEL: stack_fold_rsqrtsh:
1580 ; CHECK:       # %bb.0:
1581 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1582 ; CHECK-NEXT:    #APP
1583 ; CHECK-NEXT:    nop
1584 ; CHECK-NEXT:    #NO_APP
1585 ; CHECK-NEXT:    vrsqrtsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
1586 ; CHECK-NEXT:    retq
1587   %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}"()
1588   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1)
1589   ret <8 x half> %2
1591 declare <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.sh(<8 x half>, <8 x half>, <8 x half>, i8)
1593 define <8 x half> @stack_fold_rsqrtsh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {
1594 ; CHECK-LABEL: stack_fold_rsqrtsh_mask:
1595 ; CHECK:       # %bb.0:
1596 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1597 ; CHECK-NEXT:    kmovd %esi, %k1
1598 ; CHECK-NEXT:    #APP
1599 ; CHECK-NEXT:    nop
1600 ; CHECK-NEXT:    #NO_APP
1601 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
1602 ; CHECK-NEXT:    vrsqrtsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
1603 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1604 ; CHECK-NEXT:    retq
1605   %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}"()
1606   %2 = load <8 x half>, ptr %passthru
1607   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask)
1608   ret <8 x half> %3
1611 define <8 x half> @stack_fold_rsqrtsh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {
1612 ; CHECK-LABEL: stack_fold_rsqrtsh_maskz:
1613 ; CHECK:       # %bb.0:
1614 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1615 ; CHECK-NEXT:    #APP
1616 ; CHECK-NEXT:    nop
1617 ; CHECK-NEXT:    #NO_APP
1618 ; CHECK-NEXT:    kmovb (%rdi), %k1
1619 ; CHECK-NEXT:    vrsqrtsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload
1620 ; CHECK-NEXT:    retq
1621   %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}"()
1622   %2 = load i8, ptr %mask
1623   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.rsqrt.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %2)
1624   ret <8 x half> %3
1627 define <32 x half> @stack_fold_sqrtph(<32 x half> %a0) {
1628 ; CHECK-LABEL: stack_fold_sqrtph:
1629 ; CHECK:       # %bb.0:
1630 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1631 ; CHECK-NEXT:    #APP
1632 ; CHECK-NEXT:    nop
1633 ; CHECK-NEXT:    #NO_APP
1634 ; CHECK-NEXT:    vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Folded Reload
1635 ; CHECK-NEXT:    retq
1636   %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}"()
1637   %2 = call <32 x half> @llvm.sqrt.v32f16(<32 x half> %a0)
1638   ret <32 x half> %2
1640 declare <32 x half> @llvm.sqrt.v32f16(<32 x half>)
1642 define <32 x half> @stack_fold_sqrtph_mask(<32 x half> %a0, ptr %passthru, i32 %mask) {
1643 ; CHECK-LABEL: stack_fold_sqrtph_mask:
1644 ; CHECK:       # %bb.0:
1645 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1646 ; CHECK-NEXT:    #APP
1647 ; CHECK-NEXT:    nop
1648 ; CHECK-NEXT:    #NO_APP
1649 ; CHECK-NEXT:    vmovaps (%rdi), %zmm1
1650 ; CHECK-NEXT:    kmovd %esi, %k1
1651 ; CHECK-NEXT:    vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 {%k1} # 64-byte Folded Reload
1652 ; CHECK-NEXT:    vmovaps %zmm1, %zmm0
1653 ; CHECK-NEXT:    retq
1654   %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}"()
1655   %2 = load <32 x half>, ptr %passthru
1656   %3 = call <32 x half> @llvm.sqrt.v32f16(<32 x half> %a0)
1657   %4 = bitcast i32 %mask to <32 x i1>
1658   %5 = select <32 x i1> %4, <32 x half> %3, <32 x half> %2
1659   ret <32 x half> %5
1662 define <32 x half> @stack_fold_sqrtph_maskz(<32 x half> %a0, ptr %mask) {
1663 ; CHECK-LABEL: stack_fold_sqrtph_maskz:
1664 ; CHECK:       # %bb.0:
1665 ; CHECK-NEXT:    vmovups %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1666 ; CHECK-NEXT:    #APP
1667 ; CHECK-NEXT:    nop
1668 ; CHECK-NEXT:    #NO_APP
1669 ; CHECK-NEXT:    kmovd (%rdi), %k1
1670 ; CHECK-NEXT:    vsqrtph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 {%k1} {z} # 64-byte Folded Reload
1671 ; CHECK-NEXT:    retq
1672   %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}"()
1673   %2 = load i32, ptr %mask
1674   %3 = call <32 x half> @llvm.sqrt.v32f16(<32 x half> %a0)
1675   %4 = bitcast i32 %2 to <32 x i1>
1676   %5 = select <32 x i1> %4, <32 x half> %3, <32 x half> zeroinitializer
1677   ret <32 x half> %5
1680 define <8 x half> @stack_fold_sqrtsh(<8 x half> %a0, <8 x half> %a1) {
1681 ; CHECK-LABEL: stack_fold_sqrtsh:
1682 ; CHECK:       # %bb.0:
1683 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1684 ; CHECK-NEXT:    #APP
1685 ; CHECK-NEXT:    nop
1686 ; CHECK-NEXT:    #NO_APP
1687 ; CHECK-NEXT:    vsqrtsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
1688 ; CHECK-NEXT:    retq
1689   %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}"()
1690   %2 = call <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> undef, i8 -1, i32 4)
1691   ret <8 x half> %2
1693 declare <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half>, <8 x half>, <8 x half>, i8, i32)
1695 define <8 x half> @stack_fold_sqrtsh_mask(<8 x half> %a0, <8 x half> %a1, ptr %passthru, i8 %mask) {
1696 ; CHECK-LABEL: stack_fold_sqrtsh_mask:
1697 ; CHECK:       # %bb.0:
1698 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1699 ; CHECK-NEXT:    kmovd %esi, %k1
1700 ; CHECK-NEXT:    #APP
1701 ; CHECK-NEXT:    nop
1702 ; CHECK-NEXT:    #NO_APP
1703 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
1704 ; CHECK-NEXT:    vsqrtsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
1705 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
1706 ; CHECK-NEXT:    retq
1707   %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}"()
1708   %2 = load <8 x half>, ptr %passthru
1709   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> %2, i8 %mask, i32 4)
1710   ret <8 x half> %3
1713 define <8 x half> @stack_fold_sqrtsh_maskz(<8 x half> %a0, <8 x half> %a1, ptr %mask) {
1714 ; CHECK-LABEL: stack_fold_sqrtsh_maskz:
1715 ; CHECK:       # %bb.0:
1716 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1717 ; CHECK-NEXT:    #APP
1718 ; CHECK-NEXT:    nop
1719 ; CHECK-NEXT:    #NO_APP
1720 ; CHECK-NEXT:    kmovb (%rdi), %k1
1721 ; CHECK-NEXT:    vsqrtsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 {%k1} {z} # 16-byte Folded Reload
1722 ; CHECK-NEXT:    retq
1723   %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}"()
1724   %2 = load i8, ptr %mask
1725   %3 = call <8 x half> @llvm.x86.avx512fp16.mask.sqrt.sh(<8 x half> %a0, <8 x half> %a1, <8 x half> zeroinitializer, i8 %2, i32 4)
1726   ret <8 x half> %3
1729 define <32 x half> @stack_fold_subph_zmm(<32 x half> %a0, <32 x half> %a1) {
1730 ; CHECK-LABEL: stack_fold_subph_zmm:
1731 ; CHECK:       # %bb.0:
1732 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1733 ; CHECK-NEXT:    #APP
1734 ; CHECK-NEXT:    nop
1735 ; CHECK-NEXT:    #NO_APP
1736 ; CHECK-NEXT:    vsubph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 64-byte Folded Reload
1737 ; CHECK-NEXT:    retq
1738   %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}"()
1739   %2 = fsub <32 x half> %a0, %a1
1740   ret <32 x half> %2
1743 define half @stack_fold_subsh(half %a0, half %a1) {
1744 ; CHECK-LABEL: stack_fold_subsh:
1745 ; CHECK:       # %bb.0:
1746 ; CHECK-NEXT:    vmovsh %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1747 ; CHECK-NEXT:    #APP
1748 ; CHECK-NEXT:    nop
1749 ; CHECK-NEXT:    #NO_APP
1750 ; CHECK-NEXT:    vsubsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
1751 ; CHECK-NEXT:    retq
1752   %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}"()
1753   %2 = fsub half %a0, %a1
1754   ret half %2
1757 define <8 x half> @stack_fold_subsh_int(<8 x half> %a0, <8 x half> %a1) {
1758 ; CHECK-LABEL: stack_fold_subsh_int:
1759 ; CHECK:       # %bb.0:
1760 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1761 ; CHECK-NEXT:    #APP
1762 ; CHECK-NEXT:    nop
1763 ; CHECK-NEXT:    #NO_APP
1764 ; CHECK-NEXT:    vsubsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload
1765 ; CHECK-NEXT:    retq
1766   %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}"()
1767   %2 = extractelement <8 x half> %a0, i32 0
1768   %3 = extractelement <8 x half> %a1, i32 0
1769   %4 = fsub half %2, %3
1770   %5 = insertelement <8 x half> %a0, half %4, i32 0
1771   ret <8 x half> %5
1774 define <16 x float> @stack_fold_fmulcph(<16 x float> %a0, <16 x float> %a1) {
1775 ; CHECK-LABEL: stack_fold_fmulcph:
1776 ; CHECK:       # %bb.0:
1777 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1778 ; CHECK-NEXT:    #APP
1779 ; CHECK-NEXT:    nop
1780 ; CHECK-NEXT:    #NO_APP
1781 ; CHECK-NEXT:    vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 # 64-byte Folded Reload
1782 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1783 ; CHECK-NEXT:    retq
1784   %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}"()
1785   %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.512(<16 x float> %a0, <16 x float> %a1, <16 x float> undef, i16 -1, i32 4)
1786   ret <16 x float> %2
1789 define <16 x float> @stack_fold_fmulcph_commute(<16 x float> %a0, <16 x float> %a1) {
1790 ; CHECK-LABEL: stack_fold_fmulcph_commute:
1791 ; CHECK:       # %bb.0:
1792 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1793 ; CHECK-NEXT:    #APP
1794 ; CHECK-NEXT:    nop
1795 ; CHECK-NEXT:    #NO_APP
1796 ; CHECK-NEXT:    vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 # 64-byte Folded Reload
1797 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1798 ; CHECK-NEXT:    retq
1799   %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}"()
1800   %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.512(<16 x float> %a1, <16 x float> %a0, <16 x float> undef, i16 -1, i32 4)
1801   ret <16 x float> %2
1803 declare <16 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.512(<16 x float>, <16 x float>, <16 x float>, i16, i32)
1805 define <16 x float> @stack_fold_fmulcph_mask(<16 x float> %a0, <16 x float> %a1, ptr %passthru, i16 %mask) {
1806 ; CHECK-LABEL: stack_fold_fmulcph_mask:
1807 ; CHECK:       # %bb.0:
1808 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1809 ; CHECK-NEXT:    kmovd %esi, %k1
1810 ; CHECK-NEXT:    #APP
1811 ; CHECK-NEXT:    nop
1812 ; CHECK-NEXT:    #NO_APP
1813 ; CHECK-NEXT:    vmovaps (%rdi), %zmm2
1814 ; CHECK-NEXT:    vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
1815 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1816 ; CHECK-NEXT:    retq
1817   %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}"()
1818   %2 = load <16 x float>, ptr %passthru
1819   %3 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %2, i16 %mask, i32 4)
1820   ret <16 x float> %3
1823 define <16 x float> @stack_fold_fmulcph_maskz(<16 x float> %a0, <16 x float> %a1, ptr %mask) {
1824 ; CHECK-LABEL: stack_fold_fmulcph_maskz:
1825 ; CHECK:       # %bb.0:
1826 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1827 ; CHECK-NEXT:    #APP
1828 ; CHECK-NEXT:    nop
1829 ; CHECK-NEXT:    #NO_APP
1830 ; CHECK-NEXT:    kmovw (%rdi), %k1
1831 ; CHECK-NEXT:    vfmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} {z} # 64-byte Folded Reload
1832 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1833 ; CHECK-NEXT:    retq
1834   %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}"()
1835   %2 = load i16, ptr %mask
1836   %3 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmul.cph.512(<16 x float> %a0, <16 x float> %a1, <16 x float> zeroinitializer, i16 %2, i32 4)
1837   ret <16 x float> %3
1840 define <16 x float> @stack_fold_fcmulcph(<16 x float> %a0, <16 x float> %a1) {
1841 ; CHECK-LABEL: stack_fold_fcmulcph:
1842 ; CHECK:       # %bb.0:
1843 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1844 ; CHECK-NEXT:    #APP
1845 ; CHECK-NEXT:    nop
1846 ; CHECK-NEXT:    #NO_APP
1847 ; CHECK-NEXT:    vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 # 64-byte Folded Reload
1848 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1849 ; CHECK-NEXT:    retq
1850   %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}"()
1851   %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.512(<16 x float> %a0, <16 x float> %a1, <16 x float> undef, i16 -1, i32 4)
1852   ret <16 x float> %2
1855 define <16 x float> @stack_fold_fcmulcph_commute(<16 x float> %a0, <16 x float> %a1) {
1856 ; CHECK-LABEL: stack_fold_fcmulcph_commute:
1857 ; CHECK:       # %bb.0:
1858 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1859 ; CHECK-NEXT:    #APP
1860 ; CHECK-NEXT:    nop
1861 ; CHECK-NEXT:    #NO_APP
1862 ; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm1 # 64-byte Reload
1863 ; CHECK-NEXT:    vfcmulcph %zmm0, %zmm1, %zmm2
1864 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1865 ; CHECK-NEXT:    retq
1866   %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}"()
1867   %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.512(<16 x float> %a1, <16 x float> %a0, <16 x float> undef, i16 -1, i32 4)
1868   ret <16 x float> %2
1870 declare <16 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.512(<16 x float>, <16 x float>, <16 x float>, i16, i32)
1872 define <16 x float> @stack_fold_fcmulcph_mask(<16 x float> %a0, <16 x float> %a1, ptr %passthru, i16 %mask) {
1873 ; CHECK-LABEL: stack_fold_fcmulcph_mask:
1874 ; CHECK:       # %bb.0:
1875 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1876 ; CHECK-NEXT:    kmovd %esi, %k1
1877 ; CHECK-NEXT:    #APP
1878 ; CHECK-NEXT:    nop
1879 ; CHECK-NEXT:    #NO_APP
1880 ; CHECK-NEXT:    vmovaps (%rdi), %zmm2
1881 ; CHECK-NEXT:    vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
1882 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1883 ; CHECK-NEXT:    retq
1884   %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}"()
1885   %2 = load <16 x float>, ptr %passthru
1886   %3 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.512(<16 x float> %a0, <16 x float> %a1, <16 x float> %2, i16 %mask, i32 4)
1887   ret <16 x float> %3
1890 define <16 x float> @stack_fold_fcmulcph_maskz(<16 x float> %a0, <16 x float> %a1, ptr %mask) {
1891 ; CHECK-LABEL: stack_fold_fcmulcph_maskz:
1892 ; CHECK:       # %bb.0:
1893 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1894 ; CHECK-NEXT:    #APP
1895 ; CHECK-NEXT:    nop
1896 ; CHECK-NEXT:    #NO_APP
1897 ; CHECK-NEXT:    kmovw (%rdi), %k1
1898 ; CHECK-NEXT:    vfcmulcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} {z} # 64-byte Folded Reload
1899 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1900 ; CHECK-NEXT:    retq
1901   %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}"()
1902   %2 = load i16, ptr %mask
1903   %3 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmul.cph.512(<16 x float> %a0, <16 x float> %a1, <16 x float> zeroinitializer, i16 %2, i32 4)
1904   ret <16 x float> %3
1907 define <16 x float> @stack_fold_fmaddcph(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {
1908 ; CHECK-LABEL: stack_fold_fmaddcph:
1909 ; CHECK:       # %bb.0:
1910 ; CHECK-NEXT:    vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1911 ; CHECK-NEXT:    #APP
1912 ; CHECK-NEXT:    nop
1913 ; CHECK-NEXT:    #NO_APP
1914 ; CHECK-NEXT:    vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload
1915 ; CHECK-NEXT:    retq
1916   %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}"()
1917   %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.512(<16 x float> %a1, <16 x float> %a2, <16 x float> %a0, i16 -1, i32 4)
1918   ret <16 x float> %2
1921 define <16 x float> @stack_fold_fmaddcph_commute(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {
1922 ; CHECK-LABEL: stack_fold_fmaddcph_commute:
1923 ; CHECK:       # %bb.0:
1924 ; CHECK-NEXT:    vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1925 ; CHECK-NEXT:    #APP
1926 ; CHECK-NEXT:    nop
1927 ; CHECK-NEXT:    #NO_APP
1928 ; CHECK-NEXT:    vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload
1929 ; CHECK-NEXT:    retq
1930   %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}"()
1931   %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.512(<16 x float> %a2, <16 x float> %a1, <16 x float> %a0, i16 -1, i32 4)
1932   ret <16 x float> %2
1934 declare <16 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.512(<16 x float>, <16 x float>, <16 x float>, i16, i32)
1936 define <16 x float> @stack_fold_fmaddcph_mask(ptr %p, <16 x float> %a1, <16 x float> %a2, i16 %mask) {
1937 ; CHECK-LABEL: stack_fold_fmaddcph_mask:
1938 ; CHECK:       # %bb.0:
1939 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1940 ; CHECK-NEXT:    kmovd %esi, %k1
1941 ; CHECK-NEXT:    #APP
1942 ; CHECK-NEXT:    nop
1943 ; CHECK-NEXT:    #NO_APP
1944 ; CHECK-NEXT:    vmovaps (%rdi), %zmm2
1945 ; CHECK-NEXT:    vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
1946 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
1947 ; CHECK-NEXT:    retq
1948   %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}"()
1949   %a0 = load <16 x float>, ptr %p
1950   %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.512(<16 x float> %a1, <16 x float> %a2, <16 x float> %a0, i16 %mask, i32 4)
1951   ret <16 x float> %2
1954 define <16 x float> @stack_fold_fmaddcph_maskz(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, ptr %mask) {
1955 ; CHECK-LABEL: stack_fold_fmaddcph_maskz:
1956 ; CHECK:       # %bb.0:
1957 ; CHECK-NEXT:    vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1958 ; CHECK-NEXT:    #APP
1959 ; CHECK-NEXT:    nop
1960 ; CHECK-NEXT:    #NO_APP
1961 ; CHECK-NEXT:    kmovw (%rdi), %k1
1962 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
1963 ; CHECK-NEXT:    vfmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload
1964 ; CHECK-NEXT:    retq
1965   %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}"()
1966   %2 = load i16, ptr %mask
1967   %3 = call <16 x float> @llvm.x86.avx512fp16.mask.vfmadd.cph.512(<16 x float> %a1, <16 x float> %a2, <16 x float> zeroinitializer, i16 %2, i32 4)
1968   ret <16 x float> %3
1970 declare <16 x float> @llvm.x86.avx512fp16.maskz.vfmadd.cph.512(<16 x float>, <16 x float>, <16 x float>, i16, i32)
1972 define <16 x float> @stack_fold_fcmaddcph(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {
1973 ; CHECK-LABEL: stack_fold_fcmaddcph:
1974 ; CHECK:       # %bb.0:
1975 ; CHECK-NEXT:    vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1976 ; CHECK-NEXT:    #APP
1977 ; CHECK-NEXT:    nop
1978 ; CHECK-NEXT:    #NO_APP
1979 ; CHECK-NEXT:    vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 # 64-byte Folded Reload
1980 ; CHECK-NEXT:    retq
1981   %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}"()
1982   %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.512(<16 x float> %a1, <16 x float> %a2, <16 x float> %a0, i16 -1, i32 4)
1983   ret <16 x float> %2
1986 define <16 x float> @stack_fold_fcmaddcph_commute(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2) {
1987 ; CHECK-LABEL: stack_fold_fcmaddcph_commute:
1988 ; CHECK:       # %bb.0:
1989 ; CHECK-NEXT:    vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
1990 ; CHECK-NEXT:    #APP
1991 ; CHECK-NEXT:    nop
1992 ; CHECK-NEXT:    #NO_APP
1993 ; CHECK-NEXT:    vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm2 # 64-byte Reload
1994 ; CHECK-NEXT:    vfcmaddcph %zmm1, %zmm2, %zmm0
1995 ; CHECK-NEXT:    retq
1996   %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}"()
1997   %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.512(<16 x float> %a2, <16 x float> %a1, <16 x float> %a0, i16 -1, i32 4)
1998   ret <16 x float> %2
2000 declare <16 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.512(<16 x float>, <16 x float>, <16 x float>, i16, i32)
2002 define <16 x float> @stack_fold_fcmaddcph_mask(ptr %p, <16 x float> %a1, <16 x float> %a2, i16 %mask) {
2003 ; CHECK-LABEL: stack_fold_fcmaddcph_mask:
2004 ; CHECK:       # %bb.0:
2005 ; CHECK-NEXT:    vmovups %zmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
2006 ; CHECK-NEXT:    kmovd %esi, %k1
2007 ; CHECK-NEXT:    #APP
2008 ; CHECK-NEXT:    nop
2009 ; CHECK-NEXT:    #NO_APP
2010 ; CHECK-NEXT:    vmovaps (%rdi), %zmm2
2011 ; CHECK-NEXT:    vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm2 {%k1} # 64-byte Folded Reload
2012 ; CHECK-NEXT:    vmovaps %zmm2, %zmm0
2013 ; CHECK-NEXT:    retq
2014   %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}"()
2015   %a0 = load <16 x float>, ptr %p
2016   %2 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.512(<16 x float> %a1, <16 x float> %a2, <16 x float> %a0, i16 %mask, i32 4)
2017   ret <16 x float> %2
2020 define <16 x float> @stack_fold_fcmaddcph_maskz(<16 x float> %a0, <16 x float> %a1, <16 x float> %a2, ptr %mask) {
2021 ; CHECK-LABEL: stack_fold_fcmaddcph_maskz:
2022 ; CHECK:       # %bb.0:
2023 ; CHECK-NEXT:    vmovups %zmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
2024 ; CHECK-NEXT:    #APP
2025 ; CHECK-NEXT:    nop
2026 ; CHECK-NEXT:    #NO_APP
2027 ; CHECK-NEXT:    kmovw (%rdi), %k1
2028 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
2029 ; CHECK-NEXT:    vfcmaddcph {{[-0-9]+}}(%r{{[sb]}}p), %zmm1, %zmm0 {%k1} {z} # 64-byte Folded Reload
2030 ; CHECK-NEXT:    retq
2031   %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}"()
2032   %2 = load i16, ptr %mask
2033   %3 = call <16 x float> @llvm.x86.avx512fp16.mask.vfcmadd.cph.512(<16 x float> %a1, <16 x float> %a2, <16 x float> zeroinitializer, i16 %2, i32 4)
2034   ret <16 x float> %3
2036 declare <16 x float> @llvm.x86.avx512fp16.maskz.vfcmadd.cph.512(<16 x float>, <16 x float>, <16 x float>, i16, i32)
2038 define <4 x float> @stack_fold_fmulcsh(<4 x float> %a0, <4 x float> %a1) {
2039 ; CHECK-LABEL: stack_fold_fmulcsh:
2040 ; CHECK:       # %bb.0:
2041 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2042 ; CHECK-NEXT:    #APP
2043 ; CHECK-NEXT:    nop
2044 ; CHECK-NEXT:    #NO_APP
2045 ; CHECK-NEXT:    vfmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 # 16-byte Folded Reload
2046 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
2047 ; CHECK-NEXT:    retq
2048   %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}"()
2049   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %a0, <4 x float> %a1, <4 x float> undef, i8 -1, i32 4)
2050   ret <4 x float> %2
2053 define <4 x float> @stack_fold_fmulcsh_commute(<4 x float> %a0, <4 x float> %a1) {
2054 ; CHECK-LABEL: stack_fold_fmulcsh_commute:
2055 ; CHECK:       # %bb.0:
2056 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2057 ; CHECK-NEXT:    #APP
2058 ; CHECK-NEXT:    nop
2059 ; CHECK-NEXT:    #NO_APP
2060 ; CHECK-NEXT:    vfmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 # 16-byte Folded Reload
2061 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
2062 ; CHECK-NEXT:    retq
2063   %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}"()
2064   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %a1, <4 x float> %a0, <4 x float> undef, i8 -1, i32 4)
2065   ret <4 x float> %2
2067 declare <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
2069 define <4 x float> @stack_fold_fmulcsh_mask(<4 x float> %a0, <4 x float> %a1, ptr %passthru, i8 %mask) {
2070 ; CHECK-LABEL: stack_fold_fmulcsh_mask:
2071 ; CHECK:       # %bb.0:
2072 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2073 ; CHECK-NEXT:    kmovd %esi, %k1
2074 ; CHECK-NEXT:    #APP
2075 ; CHECK-NEXT:    nop
2076 ; CHECK-NEXT:    #NO_APP
2077 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
2078 ; CHECK-NEXT:    vfmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
2079 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
2080 ; CHECK-NEXT:    retq
2081   %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}"()
2082   %2 = load <4 x float>, ptr %passthru
2083   %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %a0, <4 x float> %a1, <4 x float> %2, i8 %mask, i32 4)
2084   ret <4 x float> %3
2087 define <4 x float> @stack_fold_fmulcsh_maskz(<4 x float> %a0, <4 x float> %a1, ptr %mask) {
2088 ; CHECK-LABEL: stack_fold_fmulcsh_maskz:
2089 ; CHECK:       # %bb.0:
2090 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2091 ; CHECK-NEXT:    #APP
2092 ; CHECK-NEXT:    nop
2093 ; CHECK-NEXT:    #NO_APP
2094 ; CHECK-NEXT:    kmovb (%rdi), %k1
2095 ; CHECK-NEXT:    vfmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} {z} # 16-byte Folded Reload
2096 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
2097 ; CHECK-NEXT:    retq
2098   %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}"()
2099   %2 = load i8, ptr %mask
2100   %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmul.csh(<4 x float> %a0, <4 x float> %a1, <4 x float> zeroinitializer, i8 %2, i32 4)
2101   ret <4 x float> %3
2104 define <4 x float> @stack_fold_fcmulcsh(<4 x float> %a0, <4 x float> %a1) {
2105 ; CHECK-LABEL: stack_fold_fcmulcsh:
2106 ; CHECK:       # %bb.0:
2107 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2108 ; CHECK-NEXT:    #APP
2109 ; CHECK-NEXT:    nop
2110 ; CHECK-NEXT:    #NO_APP
2111 ; CHECK-NEXT:    vfcmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 # 16-byte Folded Reload
2112 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
2113 ; CHECK-NEXT:    retq
2114   %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}"()
2115   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %a0, <4 x float> %a1, <4 x float> undef, i8 -1, i32 4)
2116   ret <4 x float> %2
2119 define <4 x float> @stack_fold_fcmulcsh_commute(<4 x float> %a0, <4 x float> %a1) {
2120 ; CHECK-LABEL: stack_fold_fcmulcsh_commute:
2121 ; CHECK:       # %bb.0:
2122 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2123 ; CHECK-NEXT:    #APP
2124 ; CHECK-NEXT:    nop
2125 ; CHECK-NEXT:    #NO_APP
2126 ; CHECK-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
2127 ; CHECK-NEXT:    vfcmulcsh %xmm0, %xmm1, %xmm2
2128 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
2129 ; CHECK-NEXT:    retq
2130   %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}"()
2131   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %a1, <4 x float> %a0, <4 x float> undef, i8 -1, i32 4)
2132   ret <4 x float> %2
2134 declare <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
2136 define <4 x float> @stack_fold_fcmulcsh_mask(<4 x float> %a0, <4 x float> %a1, ptr %passthru, i8 %mask) {
2137 ; CHECK-LABEL: stack_fold_fcmulcsh_mask:
2138 ; CHECK:       # %bb.0:
2139 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2140 ; CHECK-NEXT:    kmovd %esi, %k1
2141 ; CHECK-NEXT:    #APP
2142 ; CHECK-NEXT:    nop
2143 ; CHECK-NEXT:    #NO_APP
2144 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
2145 ; CHECK-NEXT:    vfcmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
2146 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
2147 ; CHECK-NEXT:    retq
2148   %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}"()
2149   %2 = load <4 x float>, ptr %passthru
2150   %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %a0, <4 x float> %a1, <4 x float> %2, i8 %mask, i32 4)
2151   ret <4 x float> %3
2154 define <4 x float> @stack_fold_fcmulcsh_maskz(<4 x float> %a0, <4 x float> %a1, ptr %mask) {
2155 ; CHECK-LABEL: stack_fold_fcmulcsh_maskz:
2156 ; CHECK:       # %bb.0:
2157 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2158 ; CHECK-NEXT:    #APP
2159 ; CHECK-NEXT:    nop
2160 ; CHECK-NEXT:    #NO_APP
2161 ; CHECK-NEXT:    kmovb (%rdi), %k1
2162 ; CHECK-NEXT:    vfcmulcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} {z} # 16-byte Folded Reload
2163 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
2164 ; CHECK-NEXT:    retq
2165   %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}"()
2166   %2 = load i8, ptr %mask
2167   %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmul.csh(<4 x float> %a0, <4 x float> %a1, <4 x float> zeroinitializer, i8 %2, i32 4)
2168   ret <4 x float> %3
2171 define <4 x float> @stack_fold_fmaddcsh(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
2172 ; CHECK-LABEL: stack_fold_fmaddcsh:
2173 ; CHECK:       # %bb.0:
2174 ; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2175 ; CHECK-NEXT:    #APP
2176 ; CHECK-NEXT:    nop
2177 ; CHECK-NEXT:    #NO_APP
2178 ; CHECK-NEXT:    vfmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload
2179 ; CHECK-NEXT:    retq
2180   %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}"()
2181   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 -1, i32 4)
2182   ret <4 x float> %2
2185 define <4 x float> @stack_fold_fmaddcsh_commute(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
2186 ; CHECK-LABEL: stack_fold_fmaddcsh_commute:
2187 ; CHECK:       # %bb.0:
2188 ; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2189 ; CHECK-NEXT:    #APP
2190 ; CHECK-NEXT:    nop
2191 ; CHECK-NEXT:    #NO_APP
2192 ; CHECK-NEXT:    vfmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload
2193 ; CHECK-NEXT:    retq
2194   %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}"()
2195   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %a2, <4 x float> %a1, <4 x float> %a0, i8 -1, i32 4)
2196   ret <4 x float> %2
2198 declare <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
2200 define <4 x float> @stack_fold_fmaddcsh_mask(ptr %p, <4 x float> %a1, <4 x float> %a2, i8 %mask) {
2201 ; CHECK-LABEL: stack_fold_fmaddcsh_mask:
2202 ; CHECK:       # %bb.0:
2203 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2204 ; CHECK-NEXT:    kmovd %esi, %k1
2205 ; CHECK-NEXT:    #APP
2206 ; CHECK-NEXT:    nop
2207 ; CHECK-NEXT:    #NO_APP
2208 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
2209 ; CHECK-NEXT:    vfmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
2210 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
2211 ; CHECK-NEXT:    retq
2212   %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}"()
2213   %a0 = load <4 x float>, ptr %p
2214   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 %mask, i32 4)
2215   ret <4 x float> %2
2218 define <4 x float> @stack_fold_fmaddcsh_maskz(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, ptr %mask) {
2219 ; CHECK-LABEL: stack_fold_fmaddcsh_maskz:
2220 ; CHECK:       # %bb.0:
2221 ; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2222 ; CHECK-NEXT:    #APP
2223 ; CHECK-NEXT:    nop
2224 ; CHECK-NEXT:    #NO_APP
2225 ; CHECK-NEXT:    kmovb (%rdi), %k1
2226 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
2227 ; CHECK-NEXT:    vfmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload
2228 ; CHECK-NEXT:    retq
2229   %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}"()
2230   %2 = load i8, ptr %mask
2231   %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfmadd.csh(<4 x float> %a1, <4 x float> %a2, <4 x float> zeroinitializer, i8 %2, i32 4)
2232   ret <4 x float> %3
2234 declare <4 x float> @llvm.x86.avx512fp16.maskz.vfmadd.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
2236 define <4 x float> @stack_fold_fcmaddcsh(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
2237 ; CHECK-LABEL: stack_fold_fcmaddcsh:
2238 ; CHECK:       # %bb.0:
2239 ; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2240 ; CHECK-NEXT:    #APP
2241 ; CHECK-NEXT:    nop
2242 ; CHECK-NEXT:    #NO_APP
2243 ; CHECK-NEXT:    vfcmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 # 16-byte Folded Reload
2244 ; CHECK-NEXT:    retq
2245   %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}"()
2246   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 -1, i32 4)
2247   ret <4 x float> %2
2250 define <4 x float> @stack_fold_fcmaddcsh_commute(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2) {
2251 ; CHECK-LABEL: stack_fold_fcmaddcsh_commute:
2252 ; CHECK:       # %bb.0:
2253 ; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2254 ; CHECK-NEXT:    #APP
2255 ; CHECK-NEXT:    nop
2256 ; CHECK-NEXT:    #NO_APP
2257 ; CHECK-NEXT:    vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
2258 ; CHECK-NEXT:    vfcmaddcsh %xmm1, %xmm2, %xmm0
2259 ; CHECK-NEXT:    retq
2260   %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}"()
2261   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %a2, <4 x float> %a1, <4 x float> %a0, i8 -1, i32 4)
2262   ret <4 x float> %2
2264 declare <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
2266 define <4 x float> @stack_fold_fcmaddcsh_mask(ptr %p, <4 x float> %a1, <4 x float> %a2, i8 %mask) {
2267 ; CHECK-LABEL: stack_fold_fcmaddcsh_mask:
2268 ; CHECK:       # %bb.0:
2269 ; CHECK-NEXT:    vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2270 ; CHECK-NEXT:    kmovd %esi, %k1
2271 ; CHECK-NEXT:    #APP
2272 ; CHECK-NEXT:    nop
2273 ; CHECK-NEXT:    #NO_APP
2274 ; CHECK-NEXT:    vmovaps (%rdi), %xmm2
2275 ; CHECK-NEXT:    vfcmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm2 {%k1} # 16-byte Folded Reload
2276 ; CHECK-NEXT:    vmovaps %xmm2, %xmm0
2277 ; CHECK-NEXT:    retq
2278   %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}"()
2279   %a0 = load <4 x float>, ptr %p
2280   %2 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %a1, <4 x float> %a2, <4 x float> %a0, i8 %mask, i32 4)
2281   ret <4 x float> %2
2284 define <4 x float> @stack_fold_fcmaddcsh_maskz(<4 x float> %a0, <4 x float> %a1, <4 x float> %a2, ptr %mask) {
2285 ; CHECK-LABEL: stack_fold_fcmaddcsh_maskz:
2286 ; CHECK:       # %bb.0:
2287 ; CHECK-NEXT:    vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2288 ; CHECK-NEXT:    #APP
2289 ; CHECK-NEXT:    nop
2290 ; CHECK-NEXT:    #NO_APP
2291 ; CHECK-NEXT:    kmovb (%rdi), %k1
2292 ; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0
2293 ; CHECK-NEXT:    vfcmaddcsh {{[-0-9]+}}(%r{{[sb]}}p), %xmm1, %xmm0 {%k1} {z} # 16-byte Folded Reload
2294 ; CHECK-NEXT:    retq
2295   %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}"()
2296   %2 = load i8, ptr %mask
2297   %3 = call <4 x float> @llvm.x86.avx512fp16.mask.vfcmadd.csh(<4 x float> %a1, <4 x float> %a2, <4 x float> zeroinitializer, i8 %2, i32 4)
2298   ret <4 x float> %3
2300 declare <4 x float> @llvm.x86.avx512fp16.maskz.vfcmadd.csh(<4 x float>, <4 x float>, <4 x float>, i8, i32)
2302 attributes #0 = { "unsafe-fp-math"="false" }
2303 attributes #1 = { "unsafe-fp-math"="true" "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" }