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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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: