@@ -1278,3 +1278,93 @@ define half @mul_negzero_nnan(half %x) {
1278
1278
%r = fmul nnan half %x , -0 .0
1279
1279
ret half %r
1280
1280
}
1281
+
1282
+ define float @mul_pos_zero_nnan_ninf (float nofpclass(inf nan) %a ) {
1283
+ ; CHECK-LABEL: @mul_pos_zero_nnan_ninf(
1284
+ ; CHECK-NEXT: entry:
1285
+ ; CHECK-NEXT: [[RET:%.*]] = fmul float [[A:%.*]], 0.000000e+00
1286
+ ; CHECK-NEXT: ret float [[RET]]
1287
+ ;
1288
+ entry:
1289
+ %ret = fmul float %a , 0 .000000e+00
1290
+ ret float %ret
1291
+ }
1292
+
1293
+ define float @mul_pos_zero_nnan (float nofpclass(nan) %a ) {
1294
+ ; CHECK-LABEL: @mul_pos_zero_nnan(
1295
+ ; CHECK-NEXT: entry:
1296
+ ; CHECK-NEXT: [[RET:%.*]] = fmul float [[A:%.*]], 0.000000e+00
1297
+ ; CHECK-NEXT: ret float [[RET]]
1298
+ ;
1299
+ entry:
1300
+ %ret = fmul float %a , 0 .000000e+00
1301
+ ret float %ret
1302
+ }
1303
+
1304
+ define float @mul_pos_zero_nnan_ninf_fmf (float nofpclass(nan) %a ) {
1305
+ ; CHECK-LABEL: @mul_pos_zero_nnan_ninf_fmf(
1306
+ ; CHECK-NEXT: entry:
1307
+ ; CHECK-NEXT: [[RET:%.*]] = fmul ninf float [[A:%.*]], 0.000000e+00
1308
+ ; CHECK-NEXT: ret float [[RET]]
1309
+ ;
1310
+ entry:
1311
+ %ret = fmul ninf float %a , 0 .000000e+00
1312
+ ret float %ret
1313
+ }
1314
+
1315
+ define float @mul_neg_zero_nnan_ninf (float nofpclass(inf nan) %a ) {
1316
+ ; CHECK-LABEL: @mul_neg_zero_nnan_ninf(
1317
+ ; CHECK-NEXT: entry:
1318
+ ; CHECK-NEXT: [[RET:%.*]] = fmul float [[A:%.*]], -0.000000e+00
1319
+ ; CHECK-NEXT: ret float [[RET]]
1320
+ ;
1321
+ entry:
1322
+ %ret = fmul float %a , -0 .000000e+00
1323
+ ret float %ret
1324
+ }
1325
+
1326
+ define float @mul_neg_zero_nnan_fmf (float %a ) {
1327
+ ; CHECK-LABEL: @mul_neg_zero_nnan_fmf(
1328
+ ; CHECK-NEXT: entry:
1329
+ ; CHECK-NEXT: [[RET:%.*]] = fmul nnan float [[A:%.*]], -0.000000e+00
1330
+ ; CHECK-NEXT: ret float [[RET]]
1331
+ ;
1332
+ entry:
1333
+ %ret = fmul nnan float %a , -0 .000000e+00
1334
+ ret float %ret
1335
+ }
1336
+
1337
+ define float @mul_neg_zero_nnan_ninf_fmf (float nofpclass(inf nan) %a ) {
1338
+ ; CHECK-LABEL: @mul_neg_zero_nnan_ninf_fmf(
1339
+ ; CHECK-NEXT: entry:
1340
+ ; CHECK-NEXT: [[RET:%.*]] = fmul nnan ninf float [[A:%.*]], -0.000000e+00
1341
+ ; CHECK-NEXT: ret float [[RET]]
1342
+ ;
1343
+ entry:
1344
+ %ret = fmul nnan ninf float %a , -0 .000000e+00
1345
+ ret float %ret
1346
+ }
1347
+
1348
+ ; poison propagates through vector elements
1349
+
1350
+ define <3 x float > @mul_neg_zero_nnan_ninf_vec (<3 x float > nofpclass(inf nan) %a ) {
1351
+ ; CHECK-LABEL: @mul_neg_zero_nnan_ninf_vec(
1352
+ ; CHECK-NEXT: entry:
1353
+ ; CHECK-NEXT: [[RET:%.*]] = fmul <3 x float> [[A:%.*]], <float -0.000000e+00, float undef, float poison>
1354
+ ; CHECK-NEXT: ret <3 x float> [[RET]]
1355
+ ;
1356
+ entry:
1357
+ %ret = fmul <3 x float > %a , <float -0 .0 , float undef , float poison>
1358
+ ret <3 x float > %ret
1359
+ }
1360
+
1361
+ define <3 x float > @mul_mixed_zero_nnan_ninf_vec (<3 x float > nofpclass(inf nan) %a ) {
1362
+ ; CHECK-LABEL: @mul_mixed_zero_nnan_ninf_vec(
1363
+ ; CHECK-NEXT: entry:
1364
+ ; CHECK-NEXT: [[RET:%.*]] = fmul <3 x float> [[A:%.*]], <float -0.000000e+00, float 0.000000e+00, float poison>
1365
+ ; CHECK-NEXT: ret <3 x float> [[RET]]
1366
+ ;
1367
+ entry:
1368
+ %ret = fmul <3 x float > %a , <float -0 .0 , float 0 .0 , float poison>
1369
+ ret <3 x float > %ret
1370
+ }
0 commit comments