@@ -521,6 +521,96 @@ define float @fmed3_neg2_3_snan1_f32(float %x, float %y) #1 {
521
521
ret float %med3
522
522
}
523
523
524
+ define float @fmed3_inf_x_y_f32 (float %x , float %y ) #1 {
525
+ ; IEEE1-LABEL: define float @fmed3_inf_x_y_f32(
526
+ ; IEEE1-SAME: float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1]] {
527
+ ; IEEE1-NEXT: [[MED3:%.*]] = call float @llvm.maxnum.f32(float [[X]], float [[Y]])
528
+ ; IEEE1-NEXT: ret float [[MED3]]
529
+ ;
530
+ ; IEEE0-LABEL: define float @fmed3_inf_x_y_f32(
531
+ ; IEEE0-SAME: float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1]] {
532
+ ; IEEE0-NEXT: [[MED3:%.*]] = call float @llvm.maximumnum.f32(float [[X]], float [[Y]])
533
+ ; IEEE0-NEXT: ret float [[MED3]]
534
+ ;
535
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0x7FF0000000000000 , float %x , float %y )
536
+ ret float %med3
537
+ }
538
+
539
+ define float @fmed3_x_inf_y_f32 (float %x , float %y ) #1 {
540
+ ; IEEE1-LABEL: define float @fmed3_x_inf_y_f32(
541
+ ; IEEE1-SAME: float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1]] {
542
+ ; IEEE1-NEXT: [[MED3:%.*]] = call float @llvm.maxnum.f32(float [[X]], float [[Y]])
543
+ ; IEEE1-NEXT: ret float [[MED3]]
544
+ ;
545
+ ; IEEE0-LABEL: define float @fmed3_x_inf_y_f32(
546
+ ; IEEE0-SAME: float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1]] {
547
+ ; IEEE0-NEXT: [[MED3:%.*]] = call float @llvm.maximumnum.f32(float [[X]], float [[Y]])
548
+ ; IEEE0-NEXT: ret float [[MED3]]
549
+ ;
550
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float 0x7FF0000000000000 , float %y )
551
+ ret float %med3
552
+ }
553
+
554
+ define float @fmed3_x_y_inf_f32 (float %x , float %y ) #1 {
555
+ ; IEEE1-LABEL: define float @fmed3_x_y_inf_f32(
556
+ ; IEEE1-SAME: float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1]] {
557
+ ; IEEE1-NEXT: [[MED3:%.*]] = call float @llvm.maxnum.f32(float [[X]], float [[Y]])
558
+ ; IEEE1-NEXT: ret float [[MED3]]
559
+ ;
560
+ ; IEEE0-LABEL: define float @fmed3_x_y_inf_f32(
561
+ ; IEEE0-SAME: float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1]] {
562
+ ; IEEE0-NEXT: [[MED3:%.*]] = call float @llvm.maximumnum.f32(float [[X]], float [[Y]])
563
+ ; IEEE0-NEXT: ret float [[MED3]]
564
+ ;
565
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float %y , float 0x7FF0000000000000 )
566
+ ret float %med3
567
+ }
568
+
569
+ define float @fmed3_ninf_x_y_f32 (float %x , float %y ) #1 {
570
+ ; IEEE1-LABEL: define float @fmed3_ninf_x_y_f32(
571
+ ; IEEE1-SAME: float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1]] {
572
+ ; IEEE1-NEXT: [[MED3:%.*]] = call float @llvm.minnum.f32(float [[X]], float [[Y]])
573
+ ; IEEE1-NEXT: ret float [[MED3]]
574
+ ;
575
+ ; IEEE0-LABEL: define float @fmed3_ninf_x_y_f32(
576
+ ; IEEE0-SAME: float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1]] {
577
+ ; IEEE0-NEXT: [[MED3:%.*]] = call float @llvm.minimumnum.f32(float [[X]], float [[Y]])
578
+ ; IEEE0-NEXT: ret float [[MED3]]
579
+ ;
580
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float 0xFFF0000000000000 , float %x , float %y )
581
+ ret float %med3
582
+ }
583
+
584
+ define float @fmed3_x_ninf_y_f32 (float %x , float %y ) #1 {
585
+ ; IEEE1-LABEL: define float @fmed3_x_ninf_y_f32(
586
+ ; IEEE1-SAME: float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1]] {
587
+ ; IEEE1-NEXT: [[MED3:%.*]] = call float @llvm.minnum.f32(float [[X]], float [[Y]])
588
+ ; IEEE1-NEXT: ret float [[MED3]]
589
+ ;
590
+ ; IEEE0-LABEL: define float @fmed3_x_ninf_y_f32(
591
+ ; IEEE0-SAME: float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1]] {
592
+ ; IEEE0-NEXT: [[MED3:%.*]] = call float @llvm.minimumnum.f32(float [[X]], float [[Y]])
593
+ ; IEEE0-NEXT: ret float [[MED3]]
594
+ ;
595
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float 0xFFF0000000000000 , float %y )
596
+ ret float %med3
597
+ }
598
+
599
+ define float @fmed3_x_y_ninf_f32 (float %x , float %y ) #1 {
600
+ ; IEEE1-LABEL: define float @fmed3_x_y_ninf_f32(
601
+ ; IEEE1-SAME: float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1]] {
602
+ ; IEEE1-NEXT: [[MED3:%.*]] = call float @llvm.minnum.f32(float [[X]], float [[Y]])
603
+ ; IEEE1-NEXT: ret float [[MED3]]
604
+ ;
605
+ ; IEEE0-LABEL: define float @fmed3_x_y_ninf_f32(
606
+ ; IEEE0-SAME: float [[X:%.*]], float [[Y:%.*]]) #[[ATTR1]] {
607
+ ; IEEE0-NEXT: [[MED3:%.*]] = call float @llvm.minimumnum.f32(float [[X]], float [[Y]])
608
+ ; IEEE0-NEXT: ret float [[MED3]]
609
+ ;
610
+ %med3 = call float @llvm.amdgcn.fmed3.f32 (float %x , float %y , float 0xFFF0000000000000 )
611
+ ret float %med3
612
+ }
613
+
524
614
; --------------------------------------------------------------------
525
615
; llvm.amdgcn.fmed3 with default mode implied by shader CC
526
616
; --------------------------------------------------------------------
0 commit comments