@@ -1334,10 +1334,13 @@ define float @fsub_fadd_common_op_wrong_commute_commute(float %x, float %y) {
1334
1334
ret float %r
1335
1335
}
1336
1336
1337
+ ; PR46627 - https://bugs.llvm.org/show_bug.cgi?id=46627
1338
+
1337
1339
define float @maxnum_with_poszero_op (float %a ) {
1338
1340
; CHECK-LABEL: @maxnum_with_poszero_op(
1339
1341
; CHECK-NEXT: [[MAX:%.*]] = call float @llvm.maxnum.f32(float [[A:%.*]], float 0.000000e+00)
1340
- ; CHECK-NEXT: ret float [[MAX]]
1342
+ ; CHECK-NEXT: [[FABS:%.*]] = call float @llvm.fabs.f32(float [[MAX]])
1343
+ ; CHECK-NEXT: ret float [[FABS]]
1341
1344
;
1342
1345
%max = call float @llvm.maxnum.f32 (float %a , float 0 .0 )
1343
1346
%fabs = call float @llvm.fabs.f32 (float %max )
@@ -1348,7 +1351,8 @@ define float @maxnum_with_poszero_op_commute(float %a) {
1348
1351
; CHECK-LABEL: @maxnum_with_poszero_op_commute(
1349
1352
; CHECK-NEXT: [[SQRT:%.*]] = call float @llvm.sqrt.f32(float [[A:%.*]])
1350
1353
; CHECK-NEXT: [[MAX:%.*]] = call float @llvm.maxnum.f32(float 0.000000e+00, float [[SQRT]])
1351
- ; CHECK-NEXT: ret float [[MAX]]
1354
+ ; CHECK-NEXT: [[FABS:%.*]] = call float @llvm.fabs.f32(float [[MAX]])
1355
+ ; CHECK-NEXT: ret float [[FABS]]
1352
1356
;
1353
1357
%sqrt = call float @llvm.sqrt.f32 (float %a )
1354
1358
%max = call float @llvm.maxnum.f32 (float 0 .0 , float %sqrt )
@@ -1361,7 +1365,8 @@ define float @maxnum_with_negzero_op(float %a) {
1361
1365
; CHECK-NEXT: [[NNAN:%.*]] = call nnan float @llvm.sqrt.f32(float [[A:%.*]])
1362
1366
; CHECK-NEXT: [[FABSA:%.*]] = call float @llvm.fabs.f32(float [[NNAN]])
1363
1367
; CHECK-NEXT: [[MAX:%.*]] = call float @llvm.maxnum.f32(float -0.000000e+00, float [[FABSA]])
1364
- ; CHECK-NEXT: ret float [[MAX]]
1368
+ ; CHECK-NEXT: [[FABS:%.*]] = call float @llvm.fabs.f32(float [[MAX]])
1369
+ ; CHECK-NEXT: ret float [[FABS]]
1365
1370
;
1366
1371
%nnan = call nnan float @llvm.sqrt.f32 (float %a )
1367
1372
%fabsa = call float @llvm.fabs.f32 (float %nnan )
@@ -1375,7 +1380,8 @@ define float @maxnum_with_negzero_op_commute(float %a) {
1375
1380
; CHECK-NEXT: [[NNAN:%.*]] = call nnan float @llvm.sqrt.f32(float [[A:%.*]])
1376
1381
; CHECK-NEXT: [[FABSA:%.*]] = call float @llvm.fabs.f32(float [[NNAN]])
1377
1382
; CHECK-NEXT: [[MAX:%.*]] = call float @llvm.maxnum.f32(float [[FABSA]], float -0.000000e+00)
1378
- ; CHECK-NEXT: ret float [[MAX]]
1383
+ ; CHECK-NEXT: [[FABS:%.*]] = call float @llvm.fabs.f32(float [[MAX]])
1384
+ ; CHECK-NEXT: ret float [[FABS]]
1379
1385
;
1380
1386
%nnan = call nnan float @llvm.sqrt.f32 (float %a )
1381
1387
%fabsa = call float @llvm.fabs.f32 (float %nnan )
@@ -1384,6 +1390,8 @@ define float @maxnum_with_negzero_op_commute(float %a) {
1384
1390
ret float %fabs
1385
1391
}
1386
1392
1393
+ ; If an operand is strictly greater than 0.0, we know the sign of the result of maxnum.
1394
+
1387
1395
define float @maxnum_with_pos_one_op (float %a ) {
1388
1396
; CHECK-LABEL: @maxnum_with_pos_one_op(
1389
1397
; CHECK-NEXT: [[MAX:%.*]] = call float @llvm.maxnum.f32(float [[A:%.*]], float 1.000000e+00)
0 commit comments