@@ -194,6 +194,176 @@ define float @ret_fmul_square_nnan_nzero(float nofpclass(nan zero) %arg) #0 {
194
194
ret float %fmul
195
195
}
196
196
197
+ define float @ret_fmul_ieee_inf (float %arg ) {
198
+ ; CHECK-LABEL: define float @ret_fmul_ieee_inf
199
+ ; CHECK-SAME: (float [[ARG:%.*]]) #[[ATTR4:[0-9]+]] {
200
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG]], 0x7FF0000000000000
201
+ ; CHECK-NEXT: ret float [[FMUL]]
202
+ ;
203
+ %fmul = fmul float %arg , 0x7FF0000000000000
204
+ ret float %fmul
205
+ }
206
+
207
+ define float @ret_fmul_ieee_any__noinf (float %arg0 , float nofpclass(inf) %arg1 ) {
208
+ ; CHECK-LABEL: define float @ret_fmul_ieee_any__noinf
209
+ ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(inf) [[ARG1:%.*]]) #[[ATTR4]] {
210
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
211
+ ; CHECK-NEXT: ret float [[FMUL]]
212
+ ;
213
+ %fmul = fmul float %arg0 , %arg1
214
+ ret float %fmul
215
+ }
216
+
217
+ define float @ret_fmul_ieee_noinf__any (float nofpclass(inf) %arg0 , float %arg1 ) {
218
+ ; CHECK-LABEL: define float @ret_fmul_ieee_noinf__any
219
+ ; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR4]] {
220
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
221
+ ; CHECK-NEXT: ret float [[FMUL]]
222
+ ;
223
+ %fmul = fmul float %arg0 , %arg1
224
+ ret float %fmul
225
+ }
226
+
227
+ define float @ret_fmul_ieee_noinf__noinf (float nofpclass(inf) %arg0 , float nofpclass(inf) %arg1 ) {
228
+ ; CHECK-LABEL: define float @ret_fmul_ieee_noinf__noinf
229
+ ; CHECK-SAME: (float nofpclass(inf) [[ARG0:%.*]], float nofpclass(inf) [[ARG1:%.*]]) #[[ATTR4]] {
230
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
231
+ ; CHECK-NEXT: ret float [[FMUL]]
232
+ ;
233
+ %fmul = fmul float %arg0 , %arg1
234
+ ret float %fmul
235
+ }
236
+
237
+ define float @ret_fmul_ieee_any__noinf_nonan (float %arg0 , float nofpclass(inf nan) %arg1 ) {
238
+ ; CHECK-LABEL: define float @ret_fmul_ieee_any__noinf_nonan
239
+ ; CHECK-SAME: (float [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR4]] {
240
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
241
+ ; CHECK-NEXT: ret float [[FMUL]]
242
+ ;
243
+ %fmul = fmul float %arg0 , %arg1
244
+ ret float %fmul
245
+ }
246
+
247
+ define float @ret_fmul_ieee_noinf_nonan__any (float nofpclass(inf nan) %arg0 , float %arg1 ) {
248
+ ; CHECK-LABEL: define float @ret_fmul_ieee_noinf_nonan__any
249
+ ; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float [[ARG1:%.*]]) #[[ATTR4]] {
250
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
251
+ ; CHECK-NEXT: ret float [[FMUL]]
252
+ ;
253
+ %fmul = fmul float %arg0 , %arg1
254
+ ret float %fmul
255
+ }
256
+
257
+ define float @ret_fmul_ieee_noinf_nonan__noinf_noann (float nofpclass(inf nan) %arg0 , float nofpclass(inf nan) %arg1 ) {
258
+ ; CHECK-LABEL: define nofpclass(nan) float @ret_fmul_ieee_noinf_nonan__noinf_noann
259
+ ; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR4]] {
260
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
261
+ ; CHECK-NEXT: ret float [[FMUL]]
262
+ ;
263
+ %fmul = fmul float %arg0 , %arg1
264
+ ret float %fmul
265
+ }
266
+
267
+ define float @ret_fmul_ieee_nozero__noinf_nonan (float nofpclass(zero) %arg0 , float nofpclass(inf nan) %arg1 ) {
268
+ ; CHECK-LABEL: define float @ret_fmul_ieee_nozero__noinf_nonan
269
+ ; CHECK-SAME: (float nofpclass(zero) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR4]] {
270
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
271
+ ; CHECK-NEXT: ret float [[FMUL]]
272
+ ;
273
+ %fmul = fmul float %arg0 , %arg1
274
+ ret float %fmul
275
+ }
276
+
277
+ define float @ret_fmul_ieee_noinf_nonan__nozero (float nofpclass(inf nan) %arg0 , float nofpclass(zero) %arg1 ) {
278
+ ; CHECK-LABEL: define float @ret_fmul_ieee_noinf_nonan__nozero
279
+ ; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(zero) [[ARG1:%.*]]) #[[ATTR4]] {
280
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
281
+ ; CHECK-NEXT: ret float [[FMUL]]
282
+ ;
283
+ %fmul = fmul float %arg0 , %arg1
284
+ ret float %fmul
285
+ }
286
+
287
+ define float @ret_fmul_ieee_nozero_nonan__noinf_nonan (float nofpclass(zero nan) %arg0 , float nofpclass(inf nan) %arg1 ) {
288
+ ; CHECK-LABEL: define nofpclass(nan) float @ret_fmul_ieee_nozero_nonan__noinf_nonan
289
+ ; CHECK-SAME: (float nofpclass(nan zero) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR4]] {
290
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
291
+ ; CHECK-NEXT: ret float [[FMUL]]
292
+ ;
293
+ %fmul = fmul float %arg0 , %arg1
294
+ ret float %fmul
295
+ }
296
+
297
+ define float @ret_fmul_ieee_noinf_nonan__nozero_nonan (float nofpclass(inf nan) %arg0 , float nofpclass(zero nan) %arg1 ) {
298
+ ; CHECK-LABEL: define nofpclass(nan) float @ret_fmul_ieee_noinf_nonan__nozero_nonan
299
+ ; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan zero) [[ARG1:%.*]]) #[[ATTR4]] {
300
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
301
+ ; CHECK-NEXT: ret float [[FMUL]]
302
+ ;
303
+ %fmul = fmul float %arg0 , %arg1
304
+ ret float %fmul
305
+ }
306
+
307
+ define float @ret_fmul_ieee_nozero_nonan_noinf__noinf_nonan (float nofpclass(zero nan inf) %arg0 , float nofpclass(inf nan) %arg1 ) {
308
+ ; CHECK-LABEL: define nofpclass(nan) float @ret_fmul_ieee_nozero_nonan_noinf__noinf_nonan
309
+ ; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan inf) [[ARG1:%.*]]) #[[ATTR4]] {
310
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
311
+ ; CHECK-NEXT: ret float [[FMUL]]
312
+ ;
313
+ %fmul = fmul float %arg0 , %arg1
314
+ ret float %fmul
315
+ }
316
+
317
+ define float @ret_fmul_ieee_noinf_nonan__nozero_nonan_noinf (float nofpclass(inf nan) %arg0 , float nofpclass(zero nan inf) %arg1 ) {
318
+ ; CHECK-LABEL: define nofpclass(nan) float @ret_fmul_ieee_noinf_nonan__nozero_nonan_noinf
319
+ ; CHECK-SAME: (float nofpclass(nan inf) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR4]] {
320
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
321
+ ; CHECK-NEXT: ret float [[FMUL]]
322
+ ;
323
+ %fmul = fmul float %arg0 , %arg1
324
+ ret float %fmul
325
+ }
326
+
327
+ define float @ret_fmul_ieee_nozero_nonan_noinf__nozero_nonan (float nofpclass(zero nan inf) %arg0 , float nofpclass(zero nan) %arg1 ) {
328
+ ; CHECK-LABEL: define nofpclass(nan) float @ret_fmul_ieee_nozero_nonan_noinf__nozero_nonan
329
+ ; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan zero) [[ARG1:%.*]]) #[[ATTR4]] {
330
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
331
+ ; CHECK-NEXT: ret float [[FMUL]]
332
+ ;
333
+ %fmul = fmul float %arg0 , %arg1
334
+ ret float %fmul
335
+ }
336
+
337
+ define float @ret_fmul_ieee_nozero_nonan__nozero_nonan_noinf (float nofpclass(zero nan) %arg0 , float nofpclass(zero nan inf) %arg1 ) {
338
+ ; CHECK-LABEL: define nofpclass(nan) float @ret_fmul_ieee_nozero_nonan__nozero_nonan_noinf
339
+ ; CHECK-SAME: (float nofpclass(nan zero) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR4]] {
340
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
341
+ ; CHECK-NEXT: ret float [[FMUL]]
342
+ ;
343
+ %fmul = fmul float %arg0 , %arg1
344
+ ret float %fmul
345
+ }
346
+
347
+ define float @ret_fmul_ieee_nozero_nonan_noinf__nonan (float nofpclass(zero nan inf) %arg0 , float nofpclass(nan) %arg1 ) {
348
+ ; CHECK-LABEL: define float @ret_fmul_ieee_nozero_nonan_noinf__nonan
349
+ ; CHECK-SAME: (float nofpclass(nan inf zero) [[ARG0:%.*]], float nofpclass(nan) [[ARG1:%.*]]) #[[ATTR4]] {
350
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
351
+ ; CHECK-NEXT: ret float [[FMUL]]
352
+ ;
353
+ %fmul = fmul float %arg0 , %arg1
354
+ ret float %fmul
355
+ }
356
+
357
+ define float @ret_fmul_ieee_nonan__nozero_nonan_noinf (float nofpclass(nan) %arg0 , float nofpclass(zero nan inf) %arg1 ) {
358
+ ; CHECK-LABEL: define float @ret_fmul_ieee_nonan__nozero_nonan_noinf
359
+ ; CHECK-SAME: (float nofpclass(nan) [[ARG0:%.*]], float nofpclass(nan inf zero) [[ARG1:%.*]]) #[[ATTR4]] {
360
+ ; CHECK-NEXT: [[FMUL:%.*]] = fmul float [[ARG0]], [[ARG1]]
361
+ ; CHECK-NEXT: ret float [[FMUL]]
362
+ ;
363
+ %fmul = fmul float %arg0 , %arg1
364
+ ret float %fmul
365
+ }
366
+
197
367
attributes #0 = { "denormal-fp-math" ="ieee,ieee" }
198
368
attributes #1 = { "denormal-fp-math" ="ieee,preserve-sign" }
199
369
attributes #2 = { "denormal-fp-math" ="ieee,positive-zero" }
0 commit comments