@@ -306,12 +306,12 @@ bb1:
306
306
307
307
; Should be able to infer nofpclass on both %arg uses
308
308
define float @fcmp_ord_assume_callsite_arg_return (float %arg ) {
309
- ; CHECK-LABEL: define float @fcmp_ord_assume_callsite_arg_return
310
- ; CHECK-SAME: (float returned [[ARG:%.*]]) {
309
+ ; CHECK-LABEL: define nofpclass(inf zero sub norm) float @fcmp_ord_assume_callsite_arg_return
310
+ ; CHECK-SAME: (float returned nofpclass(inf zero sub norm) [[ARG:%.*]]) {
311
311
; CHECK-NEXT: entry:
312
312
; CHECK-NEXT: [[IS_NOT_NAN:%.*]] = fcmp ord float [[ARG]], 0.000000e+00
313
313
; CHECK-NEXT: call void @llvm.assume(i1 noundef [[IS_NOT_NAN]]) #[[ATTR6:[0-9]+]]
314
- ; CHECK-NEXT: call void @extern.use(float [[ARG]])
314
+ ; CHECK-NEXT: call void @extern.use(float nofpclass(inf zero sub norm) [[ARG]])
315
315
; CHECK-NEXT: ret float [[ARG]]
316
316
;
317
317
entry:
@@ -431,12 +431,12 @@ define float @call_noinf_return_1(float %arg) {
431
431
}
432
432
433
433
define float @fcmp_olt_assume_one_0_callsite_arg_return (float %arg ) {
434
- ; CHECK-LABEL: define float @fcmp_olt_assume_one_0_callsite_arg_return
435
- ; CHECK-SAME: (float returned [[ARG:%.*]]) {
434
+ ; CHECK-LABEL: define nofpclass(inf sub norm) float @fcmp_olt_assume_one_0_callsite_arg_return
435
+ ; CHECK-SAME: (float returned nofpclass(inf sub norm) [[ARG:%.*]]) {
436
436
; CHECK-NEXT: entry:
437
437
; CHECK-NEXT: [[IS_NOT_ZERO_OR_NAN:%.*]] = fcmp one float [[ARG]], 0.000000e+00
438
438
; CHECK-NEXT: call void @llvm.assume(i1 noundef [[IS_NOT_ZERO_OR_NAN]]) #[[ATTR6]]
439
- ; CHECK-NEXT: call void @extern.use(float [[ARG]])
439
+ ; CHECK-NEXT: call void @extern.use(float nofpclass(inf sub norm) [[ARG]])
440
440
; CHECK-NEXT: ret float [[ARG]]
441
441
;
442
442
entry:
@@ -447,12 +447,12 @@ entry:
447
447
}
448
448
449
449
define float @fcmp_olt_assume_une_0_callsite_arg_return (float %arg ) {
450
- ; CHECK-LABEL: define float @fcmp_olt_assume_une_0_callsite_arg_return
451
- ; CHECK-SAME: (float returned [[ARG:%.*]]) {
450
+ ; CHECK-LABEL: define nofpclass(nan inf sub norm) float @fcmp_olt_assume_une_0_callsite_arg_return
451
+ ; CHECK-SAME: (float returned nofpclass(nan inf sub norm) [[ARG:%.*]]) {
452
452
; CHECK-NEXT: entry:
453
453
; CHECK-NEXT: [[IS_NOT_ZERO_OR_NAN:%.*]] = fcmp une float [[ARG]], 0.000000e+00
454
454
; CHECK-NEXT: call void @llvm.assume(i1 noundef [[IS_NOT_ZERO_OR_NAN]]) #[[ATTR6]]
455
- ; CHECK-NEXT: call void @extern.use(float [[ARG]])
455
+ ; CHECK-NEXT: call void @extern.use(float nofpclass(nan inf sub norm) [[ARG]])
456
456
; CHECK-NEXT: ret float [[ARG]]
457
457
;
458
458
entry:
@@ -463,13 +463,13 @@ entry:
463
463
}
464
464
465
465
define half @fcmp_assume_issubnormal_callsite_arg_return (half %arg ) {
466
- ; CHECK-LABEL: define half @fcmp_assume_issubnormal_callsite_arg_return
467
- ; CHECK-SAME: (half returned [[ARG:%.*]]) {
466
+ ; CHECK-LABEL: define nofpclass(zero sub) half @fcmp_assume_issubnormal_callsite_arg_return
467
+ ; CHECK-SAME: (half returned nofpclass(zero sub) [[ARG:%.*]]) {
468
468
; CHECK-NEXT: entry:
469
- ; CHECK-NEXT: [[FABS:%.*]] = call half @llvm.fabs.f16(half [[ARG]]) #[[ATTR6]]
469
+ ; CHECK-NEXT: [[FABS:%.*]] = call half @llvm.fabs.f16(half nofpclass(zero sub) [[ARG]]) #[[ATTR6]]
470
470
; CHECK-NEXT: [[IS_SUBNORMAL:%.*]] = fcmp olt half [[FABS]], 0xH0400
471
471
; CHECK-NEXT: call void @llvm.assume(i1 noundef [[IS_SUBNORMAL]]) #[[ATTR6]]
472
- ; CHECK-NEXT: call void @extern.use.f16(half [[ARG]])
472
+ ; CHECK-NEXT: call void @extern.use.f16(half nofpclass(zero sub) [[ARG]])
473
473
; CHECK-NEXT: ret half [[ARG]]
474
474
;
475
475
entry:
@@ -499,15 +499,15 @@ entry:
499
499
500
500
; Assume not subnormal or zero, and not infinity
501
501
define half @fcmp_assume2_callsite_arg_return (half %arg ) {
502
- ; CHECK-LABEL: define half @fcmp_assume2_callsite_arg_return
503
- ; CHECK-SAME: (half returned [[ARG:%.*]]) {
502
+ ; CHECK-LABEL: define nofpclass(inf norm) half @fcmp_assume2_callsite_arg_return
503
+ ; CHECK-SAME: (half returned nofpclass(inf norm) [[ARG:%.*]]) {
504
504
; CHECK-NEXT: entry:
505
- ; CHECK-NEXT: [[FABS:%.*]] = call half @llvm.fabs.f16(half [[ARG]]) #[[ATTR6]]
505
+ ; CHECK-NEXT: [[FABS:%.*]] = call nofpclass(inf) half @llvm.fabs.f16(half nofpclass(inf norm) [[ARG]]) #[[ATTR6]]
506
506
; CHECK-NEXT: [[NOT_SUBNORMAL_OR_ZERO:%.*]] = fcmp oge half [[FABS]], 0xH0400
507
507
; CHECK-NEXT: call void @llvm.assume(i1 noundef [[NOT_SUBNORMAL_OR_ZERO]]) #[[ATTR6]]
508
508
; CHECK-NEXT: [[NOT_INF:%.*]] = fcmp oeq half [[ARG]], 0xH7C00
509
509
; CHECK-NEXT: call void @llvm.assume(i1 noundef [[NOT_INF]]) #[[ATTR6]]
510
- ; CHECK-NEXT: call void @extern.use.f16(half [[ARG]])
510
+ ; CHECK-NEXT: call void @extern.use.f16(half nofpclass(inf norm) [[ARG]])
511
511
; CHECK-NEXT: ret half [[ARG]]
512
512
;
513
513
entry:
@@ -523,12 +523,12 @@ entry:
523
523
}
524
524
525
525
define float @is_fpclass_assume_arg_return (float %arg ) {
526
- ; CHECK-LABEL: define float @is_fpclass_assume_arg_return
527
- ; CHECK-SAME: (float returned [[ARG:%.*]]) {
526
+ ; CHECK-LABEL: define nofpclass(ninf nzero pnorm) float @is_fpclass_assume_arg_return
527
+ ; CHECK-SAME: (float returned nofpclass(ninf nzero pnorm) [[ARG:%.*]]) {
528
528
; CHECK-NEXT: entry:
529
- ; CHECK-NEXT: [[CLASS_TEST:%.*]] = call i1 @llvm.is.fpclass.f32(float [[ARG]], i32 noundef 292) #[[ATTR6]]
529
+ ; CHECK-NEXT: [[CLASS_TEST:%.*]] = call i1 @llvm.is.fpclass.f32(float nofpclass(ninf nzero pnorm) [[ARG]], i32 noundef 292) #[[ATTR6]]
530
530
; CHECK-NEXT: call void @llvm.assume(i1 noundef [[CLASS_TEST]]) #[[ATTR6]]
531
- ; CHECK-NEXT: call void @extern.use(float [[ARG]])
531
+ ; CHECK-NEXT: call void @extern.use(float nofpclass(ninf nzero pnorm) [[ARG]])
532
532
; CHECK-NEXT: ret float [[ARG]]
533
533
;
534
534
entry:
@@ -541,16 +541,16 @@ entry:
541
541
; Make sure we don't get confused by looking at an unrelated assume
542
542
; based on the fabs of the value.
543
543
define half @assume_fcmp_fabs_with_other_fabs_assume (half %arg ) {
544
- ; CHECK-LABEL: define half @assume_fcmp_fabs_with_other_fabs_assume
545
- ; CHECK-SAME: (half returned [[ARG:%.*]]) {
544
+ ; CHECK-LABEL: define nofpclass(zero sub) half @assume_fcmp_fabs_with_other_fabs_assume
545
+ ; CHECK-SAME: (half returned nofpclass(zero sub) [[ARG:%.*]]) {
546
546
; CHECK-NEXT: entry:
547
- ; CHECK-NEXT: [[FABS:%.*]] = call half @llvm.fabs.f16(half [[ARG]]) #[[ATTR6]]
547
+ ; CHECK-NEXT: [[FABS:%.*]] = call nofpclass(inf zero sub norm) half @llvm.fabs.f16(half nofpclass(zero sub) [[ARG]]) #[[ATTR6]]
548
548
; CHECK-NEXT: [[UNRELATED_FABS:%.*]] = fcmp one half [[FABS]], 0xH0000
549
549
; CHECK-NEXT: call void @llvm.assume(i1 noundef [[UNRELATED_FABS]]) #[[ATTR6]]
550
550
; CHECK-NEXT: [[IS_SUBNORMAL:%.*]] = fcmp olt half [[FABS]], 0xH0400
551
551
; CHECK-NEXT: call void @llvm.assume(i1 noundef [[IS_SUBNORMAL]]) #[[ATTR6]]
552
- ; CHECK-NEXT: call void @extern.use.f16(half [[ARG]])
553
- ; CHECK-NEXT: call void @extern.use.f16(half [[FABS]])
552
+ ; CHECK-NEXT: call void @extern.use.f16(half nofpclass(zero sub) [[ARG]])
553
+ ; CHECK-NEXT: call void @extern.use.f16(half nofpclass(inf zero sub norm) [[FABS]])
554
554
; CHECK-NEXT: ret half [[ARG]]
555
555
;
556
556
entry:
@@ -568,18 +568,18 @@ entry:
568
568
; Make sure if looking through the fabs finds a different source
569
569
; value, we still identify a test mask by ignoring the fabs
570
570
define half @assume_fcmp_fabs_with_other_fabs_assume_fallback (half %arg ) {
571
- ; CHECK-LABEL: define half @assume_fcmp_fabs_with_other_fabs_assume_fallback
572
- ; CHECK-SAME: (half returned [[ARG:%.*]]) {
571
+ ; CHECK-LABEL: define nofpclass(pinf zero sub) half @assume_fcmp_fabs_with_other_fabs_assume_fallback
572
+ ; CHECK-SAME: (half returned nofpclass(pinf zero sub) [[ARG:%.*]]) {
573
573
; CHECK-NEXT: entry:
574
- ; CHECK-NEXT: [[FABS:%.*]] = call half @llvm.fabs.f16(half [[ARG]]) #[[ATTR6]]
574
+ ; CHECK-NEXT: [[FABS:%.*]] = call nofpclass(inf zero sub nnorm) half @llvm.fabs.f16(half nofpclass(pinf zero sub) [[ARG]]) #[[ATTR6]]
575
575
; CHECK-NEXT: [[ONE_INF:%.*]] = fcmp oeq half [[ARG]], 0xH7C00
576
576
; CHECK-NEXT: call void @llvm.assume(i1 noundef [[ONE_INF]]) #[[ATTR6]]
577
577
; CHECK-NEXT: [[UNRELATED_FABS:%.*]] = fcmp oeq half [[FABS]], 0xH0000
578
578
; CHECK-NEXT: call void @llvm.assume(i1 noundef [[UNRELATED_FABS]]) #[[ATTR6]]
579
579
; CHECK-NEXT: [[IS_SUBNORMAL:%.*]] = fcmp olt half [[FABS]], 0xH0400
580
580
; CHECK-NEXT: call void @llvm.assume(i1 noundef [[IS_SUBNORMAL]]) #[[ATTR6]]
581
- ; CHECK-NEXT: call void @extern.use.f16(half [[ARG]])
582
- ; CHECK-NEXT: call void @extern.use.f16(half [[FABS]])
581
+ ; CHECK-NEXT: call void @extern.use.f16(half nofpclass(pinf zero sub) [[ARG]])
582
+ ; CHECK-NEXT: call void @extern.use.f16(half nofpclass(inf zero sub nnorm) [[FABS]])
583
583
; CHECK-NEXT: ret half [[ARG]]
584
584
;
585
585
entry:
0 commit comments