@@ -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