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 define float @ret_frem_ieee(float %arg0, float %arg1) #0 {
5 ; CHECK-LABEL: define float @ret_frem_ieee
6 ; CHECK-SAME: (float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0:[0-9]+]] {
7 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
8 ; CHECK-NEXT: ret float [[FREM]]
10 %frem = frem float %arg0, %arg1
14 define float @ret_frem_daz(float %arg0, float %arg1) #1 {
15 ; CHECK-LABEL: define float @ret_frem_daz
16 ; CHECK-SAME: (float [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR1:[0-9]+]] {
17 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
18 ; CHECK-NEXT: ret float [[FREM]]
20 %frem = frem float %arg0, %arg1
24 define float @ret_frem_ieee_noinf_nozero__all(float nofpclass(inf zero) %arg0, float %arg1) #0 {
25 ; CHECK-LABEL: define float @ret_frem_ieee_noinf_nozero__all
26 ; CHECK-SAME: (float nofpclass(inf zero) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {
27 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
28 ; CHECK-NEXT: ret float [[FREM]]
30 %frem = frem float %arg0, %arg1
34 define float @ret_frem_ieee_nonan_noinf_nozero__all(float nofpclass(nan inf zero) %arg0, float %arg1) #0 {
35 ; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf_nozero__all
36 ; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {
37 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
38 ; CHECK-NEXT: ret float [[FREM]]
40 %frem = frem float %arg0, %arg1
44 define float @ret_frem_ieee_all__nonan_noinf_nozero(float %arg0, float nofpclass(nan inf zero) %arg1) #0 {
45 ; CHECK-LABEL: define float @ret_frem_ieee_all__nonan_noinf_nozero
46 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR0]] {
47 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
48 ; CHECK-NEXT: ret float [[FREM]]
50 %frem = frem float %arg0, %arg1
54 define float @ret_frem_ieee_nonan_noinf_nozero__nonan(float nofpclass(nan inf zero) %arg0, float nofpclass(nan) %arg1) #0 {
55 ; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf_nozero__nonan
56 ; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR0]] {
57 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
58 ; CHECK-NEXT: ret float [[FREM]]
60 %frem = frem float %arg0, %arg1
64 define float @ret_frem_ieee_nonan__nonan_noinf_nozero(float nofpclass(nan) %arg0, float nofpclass(nan inf zero) %arg1) #0 {
65 ; CHECK-LABEL: define float @ret_frem_ieee_nonan__nonan_noinf_nozero
66 ; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR0]] {
67 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
68 ; CHECK-NEXT: ret float [[FREM]]
70 %frem = frem float %arg0, %arg1
74 define float @ret_frem_ieee_nonan_nozero__nonan_noinf(float nofpclass(nan zero) %arg0, float nofpclass(nan inf) %arg1) #0 {
75 ; CHECK-LABEL: define float @ret_frem_ieee_nonan_nozero__nonan_noinf
76 ; CHECK-SAME: (float nofpclass(nan zero) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR0]] {
77 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
78 ; CHECK-NEXT: ret float [[FREM]]
80 %frem = frem float %arg0, %arg1
84 define float @ret_frem_ieee_nonan_noinf__nonan_nozero(float nofpclass(nan inf) %arg0, float nofpclass(nan zero) %arg1) #0 {
85 ; CHECK-LABEL: define nofpclass(nan) float @ret_frem_ieee_nonan_noinf__nonan_nozero
86 ; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan zero) [[ARG1:%.*]]) #[[ATTR0]] {
87 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
88 ; CHECK-NEXT: ret float [[FREM]]
90 %frem = frem float %arg0, %arg1
94 define float @ret_frem_daz_nonan_nozero__nonan_noinf(float nofpclass(nan zero) %arg0, float nofpclass(nan inf) %arg1) #1 {
95 ; CHECK-LABEL: define float @ret_frem_daz_nonan_nozero__nonan_noinf
96 ; CHECK-SAME: (float nofpclass(nan zero) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR1]] {
97 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
98 ; CHECK-NEXT: ret float [[FREM]]
100 %frem = frem float %arg0, %arg1
104 define float @ret_frem_daz_nonan_noinf__nonan_nozero(float nofpclass(nan inf) %arg0, float nofpclass(nan zero) %arg1) #1 {
105 ; CHECK-LABEL: define float @ret_frem_daz_nonan_noinf__nonan_nozero
106 ; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan zero) [[ARG1:%.*]]) #[[ATTR1]] {
107 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
108 ; CHECK-NEXT: ret float [[FREM]]
110 %frem = frem float %arg0, %arg1
114 define float @ret_frem_daz_nonan_nozero_nosub__nonan_noinf(float nofpclass(nan zero sub) %arg0, float nofpclass(nan inf) %arg1) #1 {
115 ; CHECK-LABEL: define float @ret_frem_daz_nonan_nozero_nosub__nonan_noinf
116 ; CHECK-SAME: (float nofpclass(nan zero sub) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR1]] {
117 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
118 ; CHECK-NEXT: ret float [[FREM]]
120 %frem = frem float %arg0, %arg1
124 define float @ret_frem_daz_nonan_noinf__nonan_nozero_nosub(float nofpclass(nan inf) %arg0, float nofpclass(nan zero sub) %arg1) #1 {
125 ; CHECK-LABEL: define nofpclass(nan) float @ret_frem_daz_nonan_noinf__nonan_nozero_nosub
126 ; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan zero sub) [[ARG1:%.*]]) #[[ATTR1]] {
127 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
128 ; CHECK-NEXT: ret float [[FREM]]
130 %frem = frem float %arg0, %arg1
134 define float @ret_frem_ieee_nonan_noinf__nonan_noinf(float nofpclass(nan) %arg0, float nofpclass(nan) %arg1) #0 {
135 ; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf__nonan_noinf
136 ; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR0]] {
137 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
138 ; CHECK-NEXT: ret float [[FREM]]
140 %frem = frem float %arg0, %arg1
144 define float @ret_frem_ieee_nonan_noinf_nozero__nonan_noinf_nozero(float nofpclass(nan inf zero) %arg0, float nofpclass(nan inf zero) %arg1) #0 {
145 ; CHECK-LABEL: define nofpclass(nan) float @ret_frem_ieee_nonan_noinf_nozero__nonan_noinf_nozero
146 ; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR0]] {
147 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
148 ; CHECK-NEXT: ret float [[FREM]]
150 %frem = frem float %arg0, %arg1
154 define float @ret_frem_daz_nonan_noinf_nozero__nonan_noinf_nozero(float nofpclass(nan inf zero) %arg0, float nofpclass(nan inf zero) %arg1) #1 {
155 ; CHECK-LABEL: define float @ret_frem_daz_nonan_noinf_nozero__nonan_noinf_nozero
156 ; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR1]] {
157 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
158 ; CHECK-NEXT: ret float [[FREM]]
160 %frem = frem float %arg0, %arg1
164 define float @ret_frem_dapz_nonan_noinf_nozero__nonan_noinf_nozero(float nofpclass(nan inf zero) %arg0, float nofpclass(nan inf zero) %arg1) #2 {
165 ; CHECK-LABEL: define float @ret_frem_dapz_nonan_noinf_nozero__nonan_noinf_nozero
166 ; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR2:[0-9]+]] {
167 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
168 ; CHECK-NEXT: ret float [[FREM]]
170 %frem = frem float %arg0, %arg1
174 define float @ret_frem_dynamic_nonan_noinf_nozero__nonan_noinf_nozero(float nofpclass(nan inf zero) %arg0, float nofpclass(nan inf zero) %arg1) #3 {
175 ; CHECK-LABEL: define float @ret_frem_dynamic_nonan_noinf_nozero__nonan_noinf_nozero
176 ; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR3:[0-9]+]] {
177 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
178 ; CHECK-NEXT: ret float [[FREM]]
180 %frem = frem float %arg0, %arg1
184 define float @ret_frem_ieee_nonan_noinf_noinf__nonan_noinf_noinf(float nofpclass(nan inf) %arg0, float nofpclass(nan inf) %arg1) #0 {
185 ; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf_noinf__nonan_noinf_noinf
186 ; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR0]] {
187 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
188 ; CHECK-NEXT: ret float [[FREM]]
190 %frem = frem float %arg0, %arg1
194 define float @ret_frem_ieee_nonan_noinf_nozero__nonan_noinf_noinf(float nofpclass(nan inf zero) %arg0, float nofpclass(nan inf) %arg1) #0 {
195 ; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf_nozero__nonan_noinf_noinf
196 ; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR0]] {
197 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
198 ; CHECK-NEXT: ret float [[FREM]]
200 %frem = frem float %arg0, %arg1
204 define float @ret_frem_ieee_nonan_noinf_noinf__nonan_noinf_nozero(float nofpclass(nan inf) %arg0, float nofpclass(nan inf zero) %arg1) #0 {
205 ; CHECK-LABEL: define nofpclass(nan) float @ret_frem_ieee_nonan_noinf_noinf__nonan_noinf_nozero
206 ; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR0]] {
207 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
208 ; CHECK-NEXT: ret float [[FREM]]
210 %frem = frem float %arg0, %arg1
214 define float @ret_frem_ieee_nonan_noinf_noinf__nonan_noinf_noposzero(float nofpclass(nan inf) %arg0, float nofpclass(nan pzero) %arg1) #0 {
215 ; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf_noinf__nonan_noinf_noposzero
216 ; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan pzero) [[ARG1:%.*]]) #[[ATTR0]] {
217 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
218 ; CHECK-NEXT: ret float [[FREM]]
220 %frem = frem float %arg0, %arg1
224 define float @ret_frem_ieee_nonan_noinf_noposzero__nonan_noinf_noinf(float nofpclass(nan pzero) %arg0, float nofpclass(nan inf) %arg1) #0 {
225 ; CHECK-LABEL: define float @ret_frem_ieee_nonan_noinf_noposzero__nonan_noinf_noinf
226 ; CHECK-SAME: (float nofpclass(nan pzero) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR0]] {
227 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
228 ; CHECK-NEXT: ret float [[FREM]]
230 %frem = frem float %arg0, %arg1
234 define float @ret_frem_ieee_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub(float nofpclass(nan inf zero sub) %arg0, float nofpclass(nan inf zero sub) %arg1) #0 {
235 ; CHECK-LABEL: define nofpclass(nan) float @ret_frem_ieee_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub
236 ; CHECK-SAME: (float nofpclass(nan inf zero sub) [[ARG0:%.*]], float nofpclass(nan inf zero sub) [[ARG1:%.*]]) #[[ATTR0]] {
237 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
238 ; CHECK-NEXT: ret float [[FREM]]
240 %frem = frem float %arg0, %arg1
244 ; Denormal mode doesn't matter because sources are nofpclass(sub)
245 define float @ret_frem_daz_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub(float nofpclass(nan inf zero sub) %arg0, float nofpclass(nan inf zero sub) %arg1) #1 {
246 ; CHECK-LABEL: define nofpclass(nan) float @ret_frem_daz_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub
247 ; CHECK-SAME: (float nofpclass(nan inf zero sub) [[ARG0:%.*]], float nofpclass(nan inf zero sub) [[ARG1:%.*]]) #[[ATTR1]] {
248 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
249 ; CHECK-NEXT: ret float [[FREM]]
251 %frem = frem float %arg0, %arg1
255 define float @ret_frem_dapz_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub(float nofpclass(nan inf zero sub) %arg0, float nofpclass(nan inf zero sub) %arg1) #2 {
256 ; CHECK-LABEL: define nofpclass(nan) float @ret_frem_dapz_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub
257 ; CHECK-SAME: (float nofpclass(nan inf zero sub) [[ARG0:%.*]], float nofpclass(nan inf zero sub) [[ARG1:%.*]]) #[[ATTR2]] {
258 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
259 ; CHECK-NEXT: ret float [[FREM]]
261 %frem = frem float %arg0, %arg1
265 define float @ret_frem_dynamic_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub(float nofpclass(nan inf zero sub) %arg0, float nofpclass(nan inf zero sub) %arg1) #3 {
266 ; CHECK-LABEL: define nofpclass(nan) float @ret_frem_dynamic_nonan_noinf_nozero_nosub__nonan_noinf_nozero_nosub
267 ; CHECK-SAME: (float nofpclass(nan inf zero sub) [[ARG0:%.*]], float nofpclass(nan inf zero sub) [[ARG1:%.*]]) #[[ATTR3]] {
268 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
269 ; CHECK-NEXT: ret float [[FREM]]
271 %frem = frem float %arg0, %arg1
275 ; Missing no-subnormal on lhs
276 define float @ret_frem_daz_nonan_noinf_nozero__nonan_noinf_nozero_nosub(float nofpclass(nan inf zero) %arg0, float nofpclass(nan inf zero sub) %arg1) #1 {
277 ; CHECK-LABEL: define nofpclass(nan) float @ret_frem_daz_nonan_noinf_nozero__nonan_noinf_nozero_nosub
278 ; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan inf zero sub) [[ARG1:%.*]]) #[[ATTR1]] {
279 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
280 ; CHECK-NEXT: ret float [[FREM]]
282 %frem = frem float %arg0, %arg1
286 ; Missing no-subnormal on lhs
287 define float @ret_frem_daz_nonan_noinf_nozero_nosub__nonan_noinf_nozero(float nofpclass(nan inf zero sub) %arg0, float nofpclass(nan inf zero) %arg1) #1 {
288 ; CHECK-LABEL: define float @ret_frem_daz_nonan_noinf_nozero_nosub__nonan_noinf_nozero
289 ; CHECK-SAME: (float nofpclass(nan inf zero sub) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR1]] {
290 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
291 ; CHECK-NEXT: ret float [[FREM]]
293 %frem = frem float %arg0, %arg1
297 ; should be able to infer noinf
298 define float @ret_frem_ieee_noinf__nozero(float nofpclass(inf) %arg0, float nofpclass(zero) %arg1) #0 {
299 ; CHECK-LABEL: define float @ret_frem_ieee_noinf__nozero
300 ; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR0]] {
301 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
302 ; CHECK-NEXT: ret float [[FREM]]
304 %frem = frem float %arg0, %arg1
308 define float @ret_frem_ieee_all__nozero(float %arg0, float nofpclass(zero) %arg1) #0 {
309 ; CHECK-LABEL: define float @ret_frem_ieee_all__nozero
310 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR0]] {
311 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
312 ; CHECK-NEXT: ret float [[FREM]]
314 %frem = frem float %arg0, %arg1
318 define float @ret_frem_ieee_noinf__all(float nofpclass(inf) %arg0, float %arg1) #0 {
319 ; CHECK-LABEL: define float @ret_frem_ieee_noinf__all
320 ; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {
321 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
322 ; CHECK-NEXT: ret float [[FREM]]
324 %frem = frem float %arg0, %arg1
328 define float @ret_frem_ieee_nozero__noinf(float nofpclass(zero) %arg0, float nofpclass(inf) %arg1) #0 {
329 ; CHECK-LABEL: define float @ret_frem_ieee_nozero__noinf
330 ; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]], float nofpclass(inf) [[ARG1:%.*]]) #[[ATTR0]] {
331 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
332 ; CHECK-NEXT: ret float [[FREM]]
334 %frem = frem float %arg0, %arg1
338 define float @ret_frem_daz_noinf__nozero(float nofpclass(inf) %arg0, float nofpclass(zero) %arg1) #1 {
339 ; CHECK-LABEL: define float @ret_frem_daz_noinf__nozero
340 ; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR1]] {
341 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
342 ; CHECK-NEXT: ret float [[FREM]]
344 %frem = frem float %arg0, %arg1
348 define float @ret_frem_daz_noinf__nozero_nosub(float nofpclass(inf) %arg0, float nofpclass(zero sub) %arg1) #1 {
349 ; CHECK-LABEL: define float @ret_frem_daz_noinf__nozero_nosub
350 ; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float nofpclass(zero sub) [[ARG1:%.*]]) #[[ATTR1]] {
351 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
352 ; CHECK-NEXT: ret float [[FREM]]
354 %frem = frem float %arg0, %arg1
358 define float @ret_frem_same_operands(float %arg) #0 {
359 ; CHECK-LABEL: define nofpclass(inf sub norm) float @ret_frem_same_operands
360 ; CHECK-SAME: (float [[ARG:%.*]]) #[[ATTR0]] {
361 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG]], [[ARG]]
362 ; CHECK-NEXT: ret float [[FREM]]
364 %frem = frem float %arg, %arg
368 define float @ret_frem_same_operands_nosnan(float nofpclass(snan) %arg) #0 {
369 ; CHECK-LABEL: define nofpclass(inf sub norm) float @ret_frem_same_operands_nosnan
370 ; CHECK-SAME: (float nofpclass(snan) [[ARG:%.*]]) #[[ATTR0]] {
371 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG]], [[ARG]]
372 ; CHECK-NEXT: ret float [[FREM]]
374 %frem = frem float %arg, %arg
378 define float @ret_frem_same_operands_noqnan(float nofpclass(qnan) %arg) #0 {
379 ; CHECK-LABEL: define nofpclass(inf sub norm) float @ret_frem_same_operands_noqnan
380 ; CHECK-SAME: (float nofpclass(qnan) [[ARG:%.*]]) #[[ATTR0]] {
381 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG]], [[ARG]]
382 ; CHECK-NEXT: ret float [[FREM]]
384 %frem = frem float %arg, %arg
388 define float @ret_frem_same_operands_nonan(float nofpclass(nan) %arg) #0 {
389 ; CHECK-LABEL: define nofpclass(inf sub norm) float @ret_frem_same_operands_nonan
390 ; CHECK-SAME: (float nofpclass(nan) [[ARG:%.*]]) #[[ATTR0]] {
391 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG]], [[ARG]]
392 ; CHECK-NEXT: ret float [[FREM]]
394 %frem = frem float %arg, %arg
398 define float @ret_frem_no_neg_lhs(float nofpclass(ninf nsub nnorm) %arg0, float %arg1) #0 {
399 ; CHECK-LABEL: define nofpclass(ninf nsub nnorm) float @ret_frem_no_neg_lhs
400 ; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {
401 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
402 ; CHECK-NEXT: ret float [[FREM]]
404 %frem = frem float %arg0, %arg1
408 define float @ret_frem_no_neg_rhs(float %arg0, float nofpclass(ninf nsub nnorm) %arg1) #0 {
409 ; CHECK-LABEL: define float @ret_frem_no_neg_rhs
410 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(ninf nsub nnorm) [[ARG1:%.*]]) #[[ATTR0]] {
411 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
412 ; CHECK-NEXT: ret float [[FREM]]
414 %frem = frem float %arg0, %arg1
418 define float @ret_frem_no_neg_nzero_rhs(float %arg0, float nofpclass(ninf nsub nnorm nzero) %arg1) #0 {
419 ; CHECK-LABEL: define float @ret_frem_no_neg_nzero_rhs
420 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(ninf nzero nsub nnorm) [[ARG1:%.*]]) #[[ATTR0]] {
421 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
422 ; CHECK-NEXT: ret float [[FREM]]
424 %frem = frem float %arg0, %arg1
428 define float @ret_frem_no_neg(float nofpclass(ninf nsub nnorm) %arg0, float nofpclass(ninf nsub nnorm) %arg1) #0 {
429 ; CHECK-LABEL: define nofpclass(ninf nsub nnorm) float @ret_frem_no_neg
430 ; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]], float nofpclass(ninf nsub nnorm) [[ARG1:%.*]]) #[[ATTR0]] {
431 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
432 ; CHECK-NEXT: ret float [[FREM]]
434 %frem = frem float %arg0, %arg1
438 define float @ret_frem_no_neg_nzero(float nofpclass(ninf nsub nnorm nzero) %arg0, float nofpclass(ninf nsub nnorm nzero) %arg1) #0 {
439 ; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_frem_no_neg_nzero
440 ; CHECK-SAME: (float nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]], float nofpclass(ninf nzero nsub nnorm) [[ARG1:%.*]]) #[[ATTR0]] {
441 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
442 ; CHECK-NEXT: ret float [[FREM]]
444 %frem = frem float %arg0, %arg1
448 define float @ret_frem_no_neg_rhs_no_nzero(float nofpclass(ninf nsub nnorm) %arg0, float nofpclass(ninf nsub nnorm nzero) %arg1) #0 {
449 ; CHECK-LABEL: define nofpclass(ninf nsub nnorm) float @ret_frem_no_neg_rhs_no_nzero
450 ; CHECK-SAME: (float nofpclass(ninf nsub nnorm) [[ARG0:%.*]], float nofpclass(ninf nzero nsub nnorm) [[ARG1:%.*]]) #[[ATTR0]] {
451 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
452 ; CHECK-NEXT: ret float [[FREM]]
454 %frem = frem float %arg0, %arg1
458 define float @ret_frem_no_neg_no_zero_rhs(float nofpclass(ninf nsub nnorm nzero) %arg0, float nofpclass(ninf nsub nnorm zero) %arg1) #0 {
459 ; CHECK-LABEL: define nofpclass(ninf nzero nsub nnorm) float @ret_frem_no_neg_no_zero_rhs
460 ; CHECK-SAME: (float nofpclass(ninf nzero nsub nnorm) [[ARG0:%.*]], float nofpclass(ninf zero nsub nnorm) [[ARG1:%.*]]) #[[ATTR0]] {
461 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
462 ; CHECK-NEXT: ret float [[FREM]]
464 %frem = frem float %arg0, %arg1
468 define float @ret_frem_no_pos_lhs(float nofpclass(pinf psub pnorm pzero) %arg0, float %arg1) #0 {
469 ; CHECK-LABEL: define nofpclass(pinf pzero psub pnorm) float @ret_frem_no_pos_lhs
470 ; CHECK-SAME: (float nofpclass(pinf pzero psub pnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {
471 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
472 ; CHECK-NEXT: ret float [[FREM]]
474 %frem = frem float %arg0, %arg1
478 define float @ret_frem_no_pos_rhs(float %arg0, float nofpclass(pinf psub pnorm pzero) %arg1) #0 {
479 ; CHECK-LABEL: define float @ret_frem_no_pos_rhs
480 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(pinf pzero psub pnorm) [[ARG1:%.*]]) #[[ATTR0]] {
481 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
482 ; CHECK-NEXT: ret float [[FREM]]
484 %frem = frem float %arg0, %arg1
488 define float @ret_frem_no_pos_zero_lhs(float nofpclass(pinf psub pnorm) %arg0, float %arg1) #0 {
489 ; CHECK-LABEL: define nofpclass(pinf psub pnorm) float @ret_frem_no_pos_zero_lhs
490 ; CHECK-SAME: (float nofpclass(pinf psub pnorm) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR0]] {
491 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
492 ; CHECK-NEXT: ret float [[FREM]]
494 %frem = frem float %arg0, %arg1
498 define float @ret_frem_no_pos_zero_rhs(float %arg0, float nofpclass(pinf psub pnorm) %arg1) #0 {
499 ; CHECK-LABEL: define float @ret_frem_no_pos_zero_rhs
500 ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(pinf psub pnorm) [[ARG1:%.*]]) #[[ATTR0]] {
501 ; CHECK-NEXT: [[FREM:%.*]] = frem float [[ARG0]], [[ARG1]]
502 ; CHECK-NEXT: ret float [[FREM]]
504 %frem = frem float %arg0, %arg1
508 attributes #0 = { "denormal-fp-math"="ieee,ieee" }
509 attributes #1 = { "denormal-fp-math"="ieee,preserve-sign" }
510 attributes #2 = { "denormal-fp-math"="ieee,positive-zero" }
511 attributes #3 = { "denormal-fp-math"="ieee,dynamic" }
512 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: