[memprof] Move YAML support to MemProfYAML.h (NFC) (#119515)
[llvm-project.git] / llvm / test / Transforms / Attributor / nofpclass-minnum-maxnum.ll
blobddfddbc22a51795fdfb289ef76c2eec6dae7ac7b
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2 ; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
4 declare float @llvm.minnum.f32(float, float)
5 declare float @llvm.maxnum.f32(float, float)
6 declare <2 x float> @llvm.minnum.v2f32(<2 x float>, <2 x float>)
8 define float @ret_minnum(float %arg0, float %arg1) #0 {
9 ; CHECK-LABEL: define float @ret_minnum
10 ; CHECK-SAME: (float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1:[0-9]+]] {
11 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.minnum.f32(float [[ARG0]], float [[ARG1]]) #[[ATTR9:[0-9]+]]
12 ; CHECK-NEXT:    ret float [[CALL]]
14   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
15   ret float %call
18 define float @ret_minnum_noinf__noinf(float nofpclass(inf) %arg0, float nofpclass(inf) %arg1) #0 {
19 ; CHECK-LABEL: define nofpclass(inf) float @ret_minnum_noinf__noinf
20 ; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float nofpclass(inf) [[ARG1:%.*]]) #[[ATTR1]] {
21 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(inf) float @llvm.minnum.f32(float nofpclass(inf) [[ARG0]], float nofpclass(inf) [[ARG1]]) #[[ATTR9]]
22 ; CHECK-NEXT:    ret float [[CALL]]
24   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
25   ret float %call
28 define float @ret_minnum_noinf__nonan(float nofpclass(inf) %arg0, float nofpclass(nan) %arg1) #0 {
29 ; CHECK-LABEL: define nofpclass(nan) float @ret_minnum_noinf__nonan
30 ; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR1]] {
31 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan) float @llvm.minnum.f32(float nofpclass(inf) [[ARG0]], float nofpclass(nan) [[ARG1]]) #[[ATTR9]]
32 ; CHECK-NEXT:    ret float [[CALL]]
34   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
35   ret float %call
38 define float @ret_minnum_nonan__noinf(float nofpclass(nan) %arg0, float nofpclass(inf) %arg1) #0 {
39 ; CHECK-LABEL: define nofpclass(nan) float @ret_minnum_nonan__noinf
40 ; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float nofpclass(inf) [[ARG1:%.*]]) #[[ATTR1]] {
41 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan) float @llvm.minnum.f32(float nofpclass(nan) [[ARG0]], float nofpclass(inf) [[ARG1]]) #[[ATTR9]]
42 ; CHECK-NEXT:    ret float [[CALL]]
44   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
45   ret float %call
48 define float @ret_minnum_noinf_nonan__nonan(float nofpclass(inf nan) %arg0, float nofpclass(nan) %arg1) #0 {
49 ; CHECK-LABEL: define nofpclass(nan) float @ret_minnum_noinf_nonan__nonan
50 ; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR1]] {
51 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan) float @llvm.minnum.f32(float nofpclass(nan inf) [[ARG0]], float nofpclass(nan) [[ARG1]]) #[[ATTR9]]
52 ; CHECK-NEXT:    ret float [[CALL]]
54   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
55   ret float %call
58 define float @ret_minnum_nonan__noinf_nonan(float nofpclass(nan) %arg0, float nofpclass(inf nan) %arg1) #0 {
59 ; CHECK-LABEL: define nofpclass(nan) float @ret_minnum_nonan__noinf_nonan
60 ; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR1]] {
61 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan) float @llvm.minnum.f32(float nofpclass(nan) [[ARG0]], float nofpclass(nan inf) [[ARG1]]) #[[ATTR9]]
62 ; CHECK-NEXT:    ret float [[CALL]]
64   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
65   ret float %call
68 define float @ret_minnum_norm_zero__norm_sub(float nofpclass(norm zero) %arg0, float nofpclass(norm sub) %arg1) #0 {
69 ; CHECK-LABEL: define nofpclass(norm) float @ret_minnum_norm_zero__norm_sub
70 ; CHECK-SAME: (float nofpclass(zero norm) [[ARG0:%.*]], float nofpclass(sub norm) [[ARG1:%.*]]) #[[ATTR1]] {
71 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(norm) float @llvm.minnum.f32(float nofpclass(zero norm) [[ARG0]], float nofpclass(sub norm) [[ARG1]]) #[[ATTR9]]
72 ; CHECK-NEXT:    ret float [[CALL]]
74   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
75   ret float %call
78 define float @ret_maxnum(float %arg0, float %arg1) #0 {
79 ; CHECK-LABEL: define float @ret_maxnum
80 ; CHECK-SAME: (float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1]] {
81 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.maxnum.f32(float [[ARG0]], float [[ARG1]]) #[[ATTR9]]
82 ; CHECK-NEXT:    ret float [[CALL]]
84   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
85   ret float %call
88 define float @ret_maxnum_noinf__noinf(float nofpclass(inf) %arg0, float nofpclass(inf) %arg1) #0 {
89 ; CHECK-LABEL: define nofpclass(inf) float @ret_maxnum_noinf__noinf
90 ; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float nofpclass(inf) [[ARG1:%.*]]) #[[ATTR1]] {
91 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(inf) float @llvm.maxnum.f32(float nofpclass(inf) [[ARG0]], float nofpclass(inf) [[ARG1]]) #[[ATTR9]]
92 ; CHECK-NEXT:    ret float [[CALL]]
94   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
95   ret float %call
98 define float @ret_maxnum_noinf__nonan(float nofpclass(inf) %arg0, float nofpclass(nan) %arg1) #0 {
99 ; CHECK-LABEL: define nofpclass(nan) float @ret_maxnum_noinf__nonan
100 ; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR1]] {
101 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan) float @llvm.maxnum.f32(float nofpclass(inf) [[ARG0]], float nofpclass(nan) [[ARG1]]) #[[ATTR9]]
102 ; CHECK-NEXT:    ret float [[CALL]]
104   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
105   ret float %call
108 define float @ret_maxnum_nonan__noinf(float nofpclass(nan) %arg0, float nofpclass(inf) %arg1) #0 {
109 ; CHECK-LABEL: define nofpclass(nan) float @ret_maxnum_nonan__noinf
110 ; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float nofpclass(inf) [[ARG1:%.*]]) #[[ATTR1]] {
111 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan) float @llvm.maxnum.f32(float nofpclass(nan) [[ARG0]], float nofpclass(inf) [[ARG1]]) #[[ATTR9]]
112 ; CHECK-NEXT:    ret float [[CALL]]
114   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
115   ret float %call
118 define float @ret_maxnum_noinf_nonan__nonan(float nofpclass(inf nan) %arg0, float nofpclass(nan) %arg1) #0 {
119 ; CHECK-LABEL: define nofpclass(nan) float @ret_maxnum_noinf_nonan__nonan
120 ; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR1]] {
121 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan) float @llvm.maxnum.f32(float nofpclass(nan inf) [[ARG0]], float nofpclass(nan) [[ARG1]]) #[[ATTR9]]
122 ; CHECK-NEXT:    ret float [[CALL]]
124   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
125   ret float %call
128 define float @ret_maxnum_nonan__noinf_nonan(float nofpclass(nan) %arg0, float nofpclass(inf nan) %arg1) #0 {
129 ; CHECK-LABEL: define nofpclass(nan) float @ret_maxnum_nonan__noinf_nonan
130 ; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR1]] {
131 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan) float @llvm.maxnum.f32(float nofpclass(nan) [[ARG0]], float nofpclass(nan inf) [[ARG1]]) #[[ATTR9]]
132 ; CHECK-NEXT:    ret float [[CALL]]
134   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
135   ret float %call
138 define float @ret_maxnum_norm_zero__norm_sub(float nofpclass(norm zero) %arg0, float nofpclass(norm sub) %arg1) #0 {
139 ; CHECK-LABEL: define nofpclass(norm) float @ret_maxnum_norm_zero__norm_sub
140 ; CHECK-SAME: (float nofpclass(zero norm) [[ARG0:%.*]], float nofpclass(sub norm) [[ARG1:%.*]]) #[[ATTR1]] {
141 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(norm) float @llvm.maxnum.f32(float nofpclass(zero norm) [[ARG0]], float nofpclass(sub norm) [[ARG1]]) #[[ATTR9]]
142 ; CHECK-NEXT:    ret float [[CALL]]
144   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
145   ret float %call
148 define float @ret_minnum_daz_daz(float %arg0, float %arg1) #1 {
149 ; CHECK-LABEL: define float @ret_minnum_daz_daz
150 ; CHECK-SAME: (float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR2:[0-9]+]] {
151 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.minnum.f32(float [[ARG0]], float [[ARG1]]) #[[ATTR9]]
152 ; CHECK-NEXT:    ret float [[CALL]]
154   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
155   ret float %call
158 define float @ret_minnum_dapz_dappz(float %arg0, float %arg1) #2 {
159 ; CHECK-LABEL: define float @ret_minnum_dapz_dappz
160 ; CHECK-SAME: (float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR3:[0-9]+]] {
161 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.minnum.f32(float [[ARG0]], float [[ARG1]]) #[[ATTR9]]
162 ; CHECK-NEXT:    ret float [[CALL]]
164   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
165   ret float %call
167 define float @ret_minnum_dynamic_dynamic(float %arg0, float %arg1) #3 {
168 ; CHECK-LABEL: define float @ret_minnum_dynamic_dynamic
169 ; CHECK-SAME: (float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR4:[0-9]+]] {
170 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.minnum.f32(float [[ARG0]], float [[ARG1]]) #[[ATTR9]]
171 ; CHECK-NEXT:    ret float [[CALL]]
173   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
174   ret float %call
177 define float @ret_minnum_noinf_nozero__noinf_nozero(float nofpclass(inf zero) %arg0, float nofpclass(inf zero) %arg1) #1 {
178 ; CHECK-LABEL: define nofpclass(inf zero) float @ret_minnum_noinf_nozero__noinf_nozero
179 ; CHECK-SAME: (float nofpclass(inf zero) [[ARG0:%.*]], float nofpclass(inf zero) [[ARG1:%.*]]) #[[ATTR2]] {
180 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(inf zero) float @llvm.minnum.f32(float nofpclass(inf zero) [[ARG0]], float nofpclass(inf zero) [[ARG1]]) #[[ATTR9]]
181 ; CHECK-NEXT:    ret float [[CALL]]
183   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
184   ret float %call
187 define <2 x float> @ret_minnum_noinf_nozero__noinf_nozero_v2f32(<2 x float> nofpclass(inf zero) %arg0, <2 x float> nofpclass(inf zero) %arg1) #1 {
188 ; CHECK-LABEL: define nofpclass(inf zero) <2 x float> @ret_minnum_noinf_nozero__noinf_nozero_v2f32
189 ; CHECK-SAME: (<2 x float> nofpclass(inf zero) [[ARG0:%.*]], <2 x float> nofpclass(inf zero) [[ARG1:%.*]]) #[[ATTR2]] {
190 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(inf zero) <2 x float> @llvm.minnum.v2f32(<2 x float> nofpclass(inf zero) [[ARG0]], <2 x float> nofpclass(inf zero) [[ARG1]]) #[[ATTR9]]
191 ; CHECK-NEXT:    ret <2 x float> [[CALL]]
193   %call = call <2 x float> @llvm.minnum.v2f32(<2 x float> %arg0, <2 x float> %arg1)
194   ret <2 x float> %call
197 define float @ret_minnum_daz_daz_nozero__nozero(float nofpclass(zero) %arg0, float nofpclass(zero) %arg1) #1 {
198 ; CHECK-LABEL: define nofpclass(zero) float @ret_minnum_daz_daz_nozero__nozero
199 ; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR2]] {
200 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(zero) float @llvm.minnum.f32(float nofpclass(zero) [[ARG0]], float nofpclass(zero) [[ARG1]]) #[[ATTR9]]
201 ; CHECK-NEXT:    ret float [[CALL]]
203   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
204   ret float %call
207 define float @ret_minnum_dapz_dapz_nozero__nozero(float nofpclass(zero) %arg0, float nofpclass(zero) %arg1) #2 {
208 ; CHECK-LABEL: define nofpclass(zero) float @ret_minnum_dapz_dapz_nozero__nozero
209 ; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR3]] {
210 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(zero) float @llvm.minnum.f32(float nofpclass(zero) [[ARG0]], float nofpclass(zero) [[ARG1]]) #[[ATTR9]]
211 ; CHECK-NEXT:    ret float [[CALL]]
213   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
214   ret float %call
217 define float @ret_minnum_dynamic_dynamic_nozero__nozero(float nofpclass(zero) %arg0, float nofpclass(zero) %arg1) #3 {
218 ; CHECK-LABEL: define nofpclass(zero) float @ret_minnum_dynamic_dynamic_nozero__nozero
219 ; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR4]] {
220 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(zero) float @llvm.minnum.f32(float nofpclass(zero) [[ARG0]], float nofpclass(zero) [[ARG1]]) #[[ATTR9]]
221 ; CHECK-NEXT:    ret float [[CALL]]
223   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
224   ret float %call
227 define float @ret_minnum_daz_daz_nozero_nosub__nozero_nosub(float nofpclass(zero sub) %arg0, float nofpclass(zero sub) %arg1) #1 {
228 ; CHECK-LABEL: define nofpclass(zero sub) float @ret_minnum_daz_daz_nozero_nosub__nozero_nosub
229 ; CHECK-SAME: (float nofpclass(zero sub) [[ARG0:%.*]], float nofpclass(zero sub) [[ARG1:%.*]]) #[[ATTR2]] {
230 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(zero sub) float @llvm.minnum.f32(float nofpclass(zero sub) [[ARG0]], float nofpclass(zero sub) [[ARG1]]) #[[ATTR9]]
231 ; CHECK-NEXT:    ret float [[CALL]]
233   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
234   ret float %call
237 define float @ret_minnum_dynamic_dynamic_nozero_nosub__nozero_nosub(float nofpclass(zero sub) %arg0, float nofpclass(zero sub) %arg1) #3 {
238 ; CHECK-LABEL: define nofpclass(zero sub) float @ret_minnum_dynamic_dynamic_nozero_nosub__nozero_nosub
239 ; CHECK-SAME: (float nofpclass(zero sub) [[ARG0:%.*]], float nofpclass(zero sub) [[ARG1:%.*]]) #[[ATTR4]] {
240 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(zero sub) float @llvm.minnum.f32(float nofpclass(zero sub) [[ARG0]], float nofpclass(zero sub) [[ARG1]]) #[[ATTR9]]
241 ; CHECK-NEXT:    ret float [[CALL]]
243   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
244   ret float %call
247 define float @ret_minnum_daz_daz_nopzero__nopzero(float nofpclass(pzero) %arg0, float nofpclass(pzero) %arg1) #1 {
248 ; CHECK-LABEL: define float @ret_minnum_daz_daz_nopzero__nopzero
249 ; CHECK-SAME: (float nofpclass(pzero) [[ARG0:%.*]], float nofpclass(pzero) [[ARG1:%.*]]) #[[ATTR2]] {
250 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.minnum.f32(float nofpclass(pzero) [[ARG0]], float nofpclass(pzero) [[ARG1]]) #[[ATTR9]]
251 ; CHECK-NEXT:    ret float [[CALL]]
253   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
254   ret float %call
257 define float @ret_minnum_daz_daz_nonzero__nonzero(float nofpclass(nzero) %arg0, float nofpclass(nzero) %arg1) #1 {
258 ; CHECK-LABEL: define float @ret_minnum_daz_daz_nonzero__nonzero
259 ; CHECK-SAME: (float nofpclass(nzero) [[ARG0:%.*]], float nofpclass(nzero) [[ARG1:%.*]]) #[[ATTR2]] {
260 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.minnum.f32(float nofpclass(nzero) [[ARG0]], float nofpclass(nzero) [[ARG1]]) #[[ATTR9]]
261 ; CHECK-NEXT:    ret float [[CALL]]
263   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
264   ret float %call
267 define float @ret_minnum_daz_daz_nonzero_nonsub__nonzero_nonsub(float nofpclass(nzero nsub) %arg0, float nofpclass(nzero nsub) %arg1) #1 {
268 ; CHECK-LABEL: define nofpclass(nsub) float @ret_minnum_daz_daz_nonzero_nonsub__nonzero_nonsub
269 ; CHECK-SAME: (float nofpclass(nzero nsub) [[ARG0:%.*]], float nofpclass(nzero nsub) [[ARG1:%.*]]) #[[ATTR2]] {
270 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nsub) float @llvm.minnum.f32(float nofpclass(nzero nsub) [[ARG0]], float nofpclass(nzero nsub) [[ARG1]]) #[[ATTR9]]
271 ; CHECK-NEXT:    ret float [[CALL]]
273   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
274   ret float %call
277 define float @ret_minnum_dapz_dapz_nopzero__nopzero(float nofpclass(pzero) %arg0, float nofpclass(pzero) %arg1) #2 {
278 ; CHECK-LABEL: define float @ret_minnum_dapz_dapz_nopzero__nopzero
279 ; CHECK-SAME: (float nofpclass(pzero) [[ARG0:%.*]], float nofpclass(pzero) [[ARG1:%.*]]) #[[ATTR3]] {
280 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.minnum.f32(float nofpclass(pzero) [[ARG0]], float nofpclass(pzero) [[ARG1]]) #[[ATTR9]]
281 ; CHECK-NEXT:    ret float [[CALL]]
283   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
284   ret float %call
287 define float @ret_minnum_dapz_dapz_nopzero_nopsub__nopzero_nopsub(float nofpclass(pzero psub) %arg0, float nofpclass(pzero psub) %arg1) #2 {
288 ; CHECK-LABEL: define nofpclass(psub) float @ret_minnum_dapz_dapz_nopzero_nopsub__nopzero_nopsub
289 ; CHECK-SAME: (float nofpclass(pzero psub) [[ARG0:%.*]], float nofpclass(pzero psub) [[ARG1:%.*]]) #[[ATTR3]] {
290 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(psub) float @llvm.minnum.f32(float nofpclass(pzero psub) [[ARG0]], float nofpclass(pzero psub) [[ARG1]]) #[[ATTR9]]
291 ; CHECK-NEXT:    ret float [[CALL]]
293   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
294   ret float %call
297 define float @ret_minnum_dapz_dapz_nonzero__nonzero(float nofpclass(nzero) %arg0, float nofpclass(nzero) %arg1) #2 {
298 ; CHECK-LABEL: define float @ret_minnum_dapz_dapz_nonzero__nonzero
299 ; CHECK-SAME: (float nofpclass(nzero) [[ARG0:%.*]], float nofpclass(nzero) [[ARG1:%.*]]) #[[ATTR3]] {
300 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.minnum.f32(float nofpclass(nzero) [[ARG0]], float nofpclass(nzero) [[ARG1]]) #[[ATTR9]]
301 ; CHECK-NEXT:    ret float [[CALL]]
303   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
304   ret float %call
307 define float @ret_minnum_ieee_daz_nozero__nozero(float nofpclass(zero) %arg0, float nofpclass(zero) %arg1) #4 {
308 ; CHECK-LABEL: define nofpclass(zero) float @ret_minnum_ieee_daz_nozero__nozero
309 ; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR5:[0-9]+]] {
310 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(zero) float @llvm.minnum.f32(float nofpclass(zero) [[ARG0]], float nofpclass(zero) [[ARG1]]) #[[ATTR9]]
311 ; CHECK-NEXT:    ret float [[CALL]]
313   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
314   ret float %call
317 define float @ret_minnum_daz_ieee_nozero__nozero(float nofpclass(zero) %arg0, float nofpclass(zero) %arg1) #5 {
318 ; CHECK-LABEL: define nofpclass(zero) float @ret_minnum_daz_ieee_nozero__nozero
319 ; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR6:[0-9]+]] {
320 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(zero) float @llvm.minnum.f32(float nofpclass(zero) [[ARG0]], float nofpclass(zero) [[ARG1]]) #[[ATTR9]]
321 ; CHECK-NEXT:    ret float [[CALL]]
323   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
324   ret float %call
327 define float @ret_minnum_ieee_dapz_nozero__nozero(float nofpclass(zero) %arg0, float nofpclass(zero) %arg1) #6 {
328 ; CHECK-LABEL: define nofpclass(zero) float @ret_minnum_ieee_dapz_nozero__nozero
329 ; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR7:[0-9]+]] {
330 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(zero) float @llvm.minnum.f32(float nofpclass(zero) [[ARG0]], float nofpclass(zero) [[ARG1]]) #[[ATTR9]]
331 ; CHECK-NEXT:    ret float [[CALL]]
333   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
334   ret float %call
337 define float @ret_minnum_dapz_ieee_nozero__nozero(float nofpclass(zero) %arg0, float nofpclass(zero) %arg1) #7 {
338 ; CHECK-LABEL: define nofpclass(zero) float @ret_minnum_dapz_ieee_nozero__nozero
339 ; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR8:[0-9]+]] {
340 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(zero) float @llvm.minnum.f32(float nofpclass(zero) [[ARG0]], float nofpclass(zero) [[ARG1]]) #[[ATTR9]]
341 ; CHECK-NEXT:    ret float [[CALL]]
343   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
344   ret float %call
347 define float @ret_minnum_noneg_nan__any(float nofpclass(ninf nsub nnorm nan) %arg0, float %arg1) #3 {
348 ; CHECK-LABEL: define nofpclass(nan) float @ret_minnum_noneg_nan__any
349 ; CHECK-SAME: (float nofpclass(nan ninf nsub nnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR4]] {
350 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan) float @llvm.minnum.f32(float nofpclass(nan ninf nsub nnorm) [[ARG0]], float [[ARG1]]) #[[ATTR9]]
351 ; CHECK-NEXT:    ret float [[CALL]]
353   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
354   ret float %call
357 define float @ret_minnum_any__noneg_nan(float %arg0, float nofpclass(ninf nsub nnorm nan) %arg1) #3 {
358 ; CHECK-LABEL: define nofpclass(nan) float @ret_minnum_any__noneg_nan
359 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(nan ninf nsub nnorm) [[ARG1:%.*]]) #[[ATTR4]] {
360 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan) float @llvm.minnum.f32(float [[ARG0]], float nofpclass(nan ninf nsub nnorm) [[ARG1]]) #[[ATTR9]]
361 ; CHECK-NEXT:    ret float [[CALL]]
363   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
364   ret float %call
367 define float @ret_minnum_nopos_nan__any(float nofpclass(pinf psub pnorm nan) %arg0, float %arg1) #3 {
368 ; CHECK-LABEL: define nofpclass(nan pinf psub pnorm) float @ret_minnum_nopos_nan__any
369 ; CHECK-SAME: (float nofpclass(nan pinf psub pnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR4]] {
370 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan pinf psub pnorm) float @llvm.minnum.f32(float nofpclass(nan pinf psub pnorm) [[ARG0]], float [[ARG1]]) #[[ATTR9]]
371 ; CHECK-NEXT:    ret float [[CALL]]
373   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
374   ret float %call
377 define float @ret_minnum_any__nopos_nan(float %arg0, float nofpclass(pinf psub pnorm nan) %arg1) #3 {
378 ; CHECK-LABEL: define nofpclass(nan pinf psub pnorm) float @ret_minnum_any__nopos_nan
379 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(nan pinf psub pnorm) [[ARG1:%.*]]) #[[ATTR4]] {
380 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan pinf psub pnorm) float @llvm.minnum.f32(float [[ARG0]], float nofpclass(nan pinf psub pnorm) [[ARG1]]) #[[ATTR9]]
381 ; CHECK-NEXT:    ret float [[CALL]]
383   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
384   ret float %call
387 define float @ret_minnum_noneg__any(float nofpclass(ninf nsub nnorm) %arg0, float %arg1) #3 {
388 ; CHECK-LABEL: define float @ret_minnum_noneg__any
389 ; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR4]] {
390 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.minnum.f32(float nofpclass(ninf nsub nnorm) [[ARG0]], float [[ARG1]]) #[[ATTR9]]
391 ; CHECK-NEXT:    ret float [[CALL]]
393   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
394   ret float %call
397 define float @ret_minnum_any__noneg(float %arg0, float nofpclass(ninf nsub nnorm) %arg1) #3 {
398 ; CHECK-LABEL: define float @ret_minnum_any__noneg
399 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(ninf nsub nnorm) [[ARG1:%.*]]) #[[ATTR4]] {
400 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.minnum.f32(float [[ARG0]], float nofpclass(ninf nsub nnorm) [[ARG1]]) #[[ATTR9]]
401 ; CHECK-NEXT:    ret float [[CALL]]
403   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
404   ret float %call
407 define float @ret_minnum_nopos__any(float nofpclass(pinf psub pnorm) %arg0, float %arg1) #3 {
408 ; CHECK-LABEL: define float @ret_minnum_nopos__any
409 ; CHECK-SAME: (float nofpclass(pinf psub pnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR4]] {
410 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.minnum.f32(float nofpclass(pinf psub pnorm) [[ARG0]], float [[ARG1]]) #[[ATTR9]]
411 ; CHECK-NEXT:    ret float [[CALL]]
413   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
414   ret float %call
417 define float @ret_minnum_any__nopos(float %arg0, float nofpclass(pinf psub pnorm) %arg1) #3 {
418 ; CHECK-LABEL: define float @ret_minnum_any__nopos
419 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(pinf psub pnorm) [[ARG1:%.*]]) #[[ATTR4]] {
420 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.minnum.f32(float [[ARG0]], float nofpclass(pinf psub pnorm) [[ARG1]]) #[[ATTR9]]
421 ; CHECK-NEXT:    ret float [[CALL]]
423   %call = call float @llvm.minnum.f32(float %arg0, float %arg1)
424   ret float %call
427 define float @ret_maxnum_noneg_nan__any(float nofpclass(ninf nsub nnorm nan) %arg0, float %arg1) #3 {
428 ; CHECK-LABEL: define nofpclass(nan ninf nsub nnorm) float @ret_maxnum_noneg_nan__any
429 ; CHECK-SAME: (float nofpclass(nan ninf nsub nnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR4]] {
430 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nsub nnorm) float @llvm.maxnum.f32(float nofpclass(nan ninf nsub nnorm) [[ARG0]], float [[ARG1]]) #[[ATTR9]]
431 ; CHECK-NEXT:    ret float [[CALL]]
433   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
434   ret float %call
437 define float @ret_maxnum_any__noneg_nan(float %arg0, float nofpclass(ninf nsub nnorm nan) %arg1) #3 {
438 ; CHECK-LABEL: define nofpclass(nan ninf nsub nnorm) float @ret_maxnum_any__noneg_nan
439 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(nan ninf nsub nnorm) [[ARG1:%.*]]) #[[ATTR4]] {
440 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan ninf nsub nnorm) float @llvm.maxnum.f32(float [[ARG0]], float nofpclass(nan ninf nsub nnorm) [[ARG1]]) #[[ATTR9]]
441 ; CHECK-NEXT:    ret float [[CALL]]
443   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
444   ret float %call
447 define float @ret_maxnum_nopos_nan__any(float nofpclass(pinf psub pnorm nan) %arg0, float %arg1) #3 {
448 ; CHECK-LABEL: define nofpclass(nan) float @ret_maxnum_nopos_nan__any
449 ; CHECK-SAME: (float nofpclass(nan pinf psub pnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR4]] {
450 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan) float @llvm.maxnum.f32(float nofpclass(nan pinf psub pnorm) [[ARG0]], float [[ARG1]]) #[[ATTR9]]
451 ; CHECK-NEXT:    ret float [[CALL]]
453   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
454   ret float %call
457 define float @ret_maxnum_any__nopos_nan(float %arg0, float nofpclass(pinf psub pnorm nan) %arg1) #3 {
458 ; CHECK-LABEL: define nofpclass(nan) float @ret_maxnum_any__nopos_nan
459 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(nan pinf psub pnorm) [[ARG1:%.*]]) #[[ATTR4]] {
460 ; CHECK-NEXT:    [[CALL:%.*]] = call nofpclass(nan) float @llvm.maxnum.f32(float [[ARG0]], float nofpclass(nan pinf psub pnorm) [[ARG1]]) #[[ATTR9]]
461 ; CHECK-NEXT:    ret float [[CALL]]
463   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
464   ret float %call
467 define float @ret_maxnum_noneg__any(float nofpclass(ninf nsub nnorm) %arg0, float %arg1) #3 {
468 ; CHECK-LABEL: define float @ret_maxnum_noneg__any
469 ; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR4]] {
470 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.maxnum.f32(float nofpclass(ninf nsub nnorm) [[ARG0]], float [[ARG1]]) #[[ATTR9]]
471 ; CHECK-NEXT:    ret float [[CALL]]
473   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
474   ret float %call
477 define float @ret_maxnum_any__noneg(float %arg0, float nofpclass(ninf nsub nnorm) %arg1) #3 {
478 ; CHECK-LABEL: define float @ret_maxnum_any__noneg
479 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(ninf nsub nnorm) [[ARG1:%.*]]) #[[ATTR4]] {
480 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.maxnum.f32(float [[ARG0]], float nofpclass(ninf nsub nnorm) [[ARG1]]) #[[ATTR9]]
481 ; CHECK-NEXT:    ret float [[CALL]]
483   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
484   ret float %call
487 define float @ret_maxnum_nopos__any(float nofpclass(pinf psub pnorm) %arg0, float %arg1) #3 {
488 ; CHECK-LABEL: define float @ret_maxnum_nopos__any
489 ; CHECK-SAME: (float nofpclass(pinf psub pnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR4]] {
490 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.maxnum.f32(float nofpclass(pinf psub pnorm) [[ARG0]], float [[ARG1]]) #[[ATTR9]]
491 ; CHECK-NEXT:    ret float [[CALL]]
493   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
494   ret float %call
497 define float @ret_maxnum_any__nopos(float %arg0, float nofpclass(pinf psub pnorm) %arg1) #3 {
498 ; CHECK-LABEL: define float @ret_maxnum_any__nopos
499 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(pinf psub pnorm) [[ARG1:%.*]]) #[[ATTR4]] {
500 ; CHECK-NEXT:    [[CALL:%.*]] = call float @llvm.maxnum.f32(float [[ARG0]], float nofpclass(pinf psub pnorm) [[ARG1]]) #[[ATTR9]]
501 ; CHECK-NEXT:    ret float [[CALL]]
503   %call = call float @llvm.maxnum.f32(float %arg0, float %arg1)
504   ret float %call
507 attributes #0 = { "denormal-fp-math"="ieee,ieee" }
508 attributes #1 = { "denormal-fp-math"="preserve-sign,preserve-sign" }
509 attributes #2 = { "denormal-fp-math"="positive-zero,positive-zero" }
510 attributes #3 = { "denormal-fp-math"="dynamic,dynamic" }
511 attributes #4 = { "denormal-fp-math"="ieee,preserve-sign" }
512 attributes #5 = { "denormal-fp-math"="preserve-sign,ieee" }
513 attributes #6 = { "denormal-fp-math"="ieee,positive-zero" }
514 attributes #7 = { "denormal-fp-math"="positive-zero,ieee" }
515 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
516 ; TUNIT: {{.*}}