@@ -521,6 +521,96 @@ define float @fmed3_neg2_3_snan1_f32(float %x, float %y) #1 {
521521 ret float %med3
522522}
523523
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+
524614; --------------------------------------------------------------------
525615; llvm.amdgcn.fmed3 with default mode implied by shader CC
526616; --------------------------------------------------------------------
0 commit comments