[llvm] f13ff77 - AMDGPU: Form min3/max3 from minimumnum/maximumnum (#139137)
via llvm-commits
llvm-commits at lists.llvm.org
Thu May 8 23:12:57 PDT 2025
Author: Matt Arsenault
Date: 2025-05-09T08:12:54+02:00
New Revision: f13ff778424bb4e3c87d876a759d0a8a4bc61167
URL: https://github.com/llvm/llvm-project/commit/f13ff778424bb4e3c87d876a759d0a8a4bc61167
DIFF: https://github.com/llvm/llvm-project/commit/f13ff778424bb4e3c87d876a759d0a8a4bc61167.diff
LOG: AMDGPU: Form min3/max3 from minimumnum/maximumnum (#139137)
Added:
Modified:
llvm/lib/Target/AMDGPU/SIISelLowering.cpp
llvm/test/CodeGen/AMDGPU/fmax3-maximumnum.ll
llvm/test/CodeGen/AMDGPU/fmin3-minimumnum.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
index 95a8558c3f5a4..53bf708e5aa93 100644
--- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -934,6 +934,8 @@ SITargetLowering::SITargetLowering(const TargetMachine &TM,
ISD::FMAXNUM_IEEE,
ISD::FMINIMUM,
ISD::FMAXIMUM,
+ ISD::FMINIMUMNUM,
+ ISD::FMAXIMUMNUM,
ISD::FMA,
ISD::SMIN,
ISD::SMAX,
@@ -13483,6 +13485,7 @@ static unsigned minMaxOpcToMin3Max3Opc(unsigned Opc) {
switch (Opc) {
case ISD::FMAXNUM:
case ISD::FMAXNUM_IEEE:
+ case ISD::FMAXIMUMNUM:
return AMDGPUISD::FMAX3;
case ISD::FMAXIMUM:
return AMDGPUISD::FMAXIMUM3;
@@ -13492,6 +13495,7 @@ static unsigned minMaxOpcToMin3Max3Opc(unsigned Opc) {
return AMDGPUISD::UMAX3;
case ISD::FMINNUM:
case ISD::FMINNUM_IEEE:
+ case ISD::FMINIMUMNUM:
return AMDGPUISD::FMIN3;
case ISD::FMINIMUM:
return AMDGPUISD::FMINIMUM3;
@@ -13613,6 +13617,8 @@ static bool supportsMin3Max3(const GCNSubtarget &Subtarget, unsigned Opc,
case ISD::FMAXNUM:
case ISD::FMINNUM_IEEE:
case ISD::FMAXNUM_IEEE:
+ case ISD::FMINIMUMNUM:
+ case ISD::FMAXIMUMNUM:
case AMDGPUISD::FMIN_LEGACY:
case AMDGPUISD::FMAX_LEGACY:
return (VT == MVT::f32) || (VT == MVT::f16 && Subtarget.hasMin3Max3_16());
@@ -15318,6 +15324,8 @@ SDValue SITargetLowering::PerformDAGCombine(SDNode *N,
case ISD::FMINNUM_IEEE:
case ISD::FMAXIMUM:
case ISD::FMINIMUM:
+ case ISD::FMAXIMUMNUM:
+ case ISD::FMINIMUMNUM:
case ISD::SMAX:
case ISD::SMIN:
case ISD::UMAX:
diff --git a/llvm/test/CodeGen/AMDGPU/fmax3-maximumnum.ll b/llvm/test/CodeGen/AMDGPU/fmax3-maximumnum.ll
index 396fdf93eaaa3..d458bb2492f23 100644
--- a/llvm/test/CodeGen/AMDGPU/fmax3-maximumnum.ll
+++ b/llvm/test/CodeGen/AMDGPU/fmax3-maximumnum.ll
@@ -21,60 +21,37 @@ define float @v_max3_f32_maximumnum_maximumnum__v_v_v_0(float %a, float %b, floa
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX9-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v1 :: v_dual_max_f32 v1, v2, v2
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0:
@@ -84,10 +61,7 @@ define float @v_max3_f32_maximumnum_maximumnum__v_v_v_0(float %a, float %b, floa
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v1 :: v_dual_max_num_f32 v1, v2, v2
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_max3_num_f32 v0, v0, v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float %a, float %b)
%max3 = call float @llvm.maximumnum.f32(float %tmp0, float %c)
@@ -98,60 +72,37 @@ define float @v_max3_f32_maximumnum_maximumnum__v_v_v_1(float %a, float %b, floa
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_1:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX6-NEXT: v_max_f32_e32 v0, v1, v0
+; GFX6-NEXT: v_max3_f32 v0, v2, v0, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_1:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX7-NEXT: v_max_f32_e32 v0, v1, v0
+; GFX7-NEXT: v_max3_f32 v0, v2, v0, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_1:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX8-NEXT: v_max_f32_e32 v0, v1, v0
+; GFX8-NEXT: v_max3_f32 v0, v2, v0, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_1:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX9-NEXT: v_max_f32_e32 v0, v1, v0
+; GFX9-NEXT: v_max3_f32 v0, v2, v0, v1
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_1:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX10-NEXT: v_max_f32_e32 v0, v1, v0
+; GFX10-NEXT: v_max3_f32 v0, v2, v0, v1
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_1:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v1 :: v_dual_max_f32 v1, v2, v2
-; GFX11-NEXT: v_max_f32_e32 v0, v1, v0
+; GFX11-NEXT: v_max3_f32 v0, v2, v0, v1
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_1:
@@ -161,10 +112,7 @@ define float @v_max3_f32_maximumnum_maximumnum__v_v_v_1(float %a, float %b, floa
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v1 :: v_dual_max_num_f32 v1, v2, v2
-; GFX12-NEXT: v_max_num_f32_e32 v0, v1, v0
+; GFX12-NEXT: v_max3_num_f32 v0, v2, v0, v1
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float %a, float %b)
%max3 = call float @llvm.maximumnum.f32(float %c, float %tmp0)
@@ -175,48 +123,36 @@ define float @v_max3_f32_maximumnum_maximumnum__i_v_v_0(float %b, float %c) {
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__i_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX6-NEXT: v_max3_f32 v0, v0, 1.0, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__i_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX7-NEXT: v_max3_f32 v0, v0, 1.0, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__i_v_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX8-NEXT: v_max3_f32 v0, v0, 1.0, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_max3_f32_maximumnum_maximumnum__i_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
; GFX9-NEXT: v_max3_f32 v0, v0, 1.0, v1
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__i_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
; GFX10-NEXT: v_max3_f32 v0, v0, 1.0, v1
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__i_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_max3_f32 v0, v0, 1.0, v1
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -227,8 +163,6 @@ define float @v_max3_f32_maximumnum_maximumnum__i_v_v_0(float %b, float %c) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_max3_num_f32 v0, v0, 1.0, v1
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float 1.0, float %b)
@@ -240,48 +174,36 @@ define float @v_max3_f32_maximumnum_maximumnum__i_v_v_1(float %b, float %c) {
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__i_v_v_1:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX6-NEXT: v_max3_f32 v0, v1, v0, 1.0
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__i_v_v_1:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX7-NEXT: v_max3_f32 v0, v1, v0, 1.0
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__i_v_v_1:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX8-NEXT: v_max3_f32 v0, v1, v0, 1.0
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_max3_f32_maximumnum_maximumnum__i_v_v_1:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
; GFX9-NEXT: v_max3_f32 v0, v1, v0, 1.0
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__i_v_v_1:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
; GFX10-NEXT: v_max3_f32 v0, v1, v0, 1.0
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__i_v_v_1:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_max3_f32 v0, v1, v0, 1.0
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -292,8 +214,6 @@ define float @v_max3_f32_maximumnum_maximumnum__i_v_v_1(float %b, float %c) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_max3_num_f32 v0, v1, v0, 1.0
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float 1.0, float %b)
@@ -305,48 +225,36 @@ define float @v_max3_f32_maximumnum_maximumnum__v_i_v_0(float %a, float %c) {
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__v_i_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX6-NEXT: v_max3_f32 v0, v0, 1.0, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__v_i_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX7-NEXT: v_max3_f32 v0, v0, 1.0, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__v_i_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX8-NEXT: v_max3_f32 v0, v0, 1.0, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_max3_f32_maximumnum_maximumnum__v_i_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
; GFX9-NEXT: v_max3_f32 v0, v0, 1.0, v1
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__v_i_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
; GFX10-NEXT: v_max3_f32 v0, v0, 1.0, v1
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__v_i_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_max3_f32 v0, v0, 1.0, v1
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -357,8 +265,6 @@ define float @v_max3_f32_maximumnum_maximumnum__v_i_v_0(float %a, float %c) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_max3_num_f32 v0, v0, 1.0, v1
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float %a, float 1.0)
@@ -370,48 +276,36 @@ define float @v_max3_f32_maximumnum_maximumnum__v_i_v_1(float %a, float %c) {
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__v_i_v_1:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX6-NEXT: v_max3_f32 v0, v1, v0, 1.0
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__v_i_v_1:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX7-NEXT: v_max3_f32 v0, v1, v0, 1.0
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__v_i_v_1:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX8-NEXT: v_max3_f32 v0, v1, v0, 1.0
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_max3_f32_maximumnum_maximumnum__v_i_v_1:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
; GFX9-NEXT: v_max3_f32 v0, v1, v0, 1.0
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__v_i_v_1:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
; GFX10-NEXT: v_max3_f32 v0, v1, v0, 1.0
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__v_i_v_1:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_max3_f32 v0, v1, v0, 1.0
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -422,8 +316,6 @@ define float @v_max3_f32_maximumnum_maximumnum__v_i_v_1(float %a, float %c) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_max3_num_f32 v0, v1, v0, 1.0
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float %a, float 1.0)
@@ -435,55 +327,37 @@ define float @v_max3_f32_maximumnum_maximumnum__v_v_i(float %a, float %b) {
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_i:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_max_f32_e32 v0, 1.0, v0
+; GFX6-NEXT: v_max3_f32 v0, v0, v1, 1.0
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_i:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_max_f32_e32 v0, 1.0, v0
+; GFX7-NEXT: v_max3_f32 v0, v0, v1, 1.0
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_i:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_max_f32_e32 v0, 1.0, v0
+; GFX8-NEXT: v_max3_f32 v0, v0, v1, 1.0
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_i:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e32 v0, 1.0, v0
+; GFX9-NEXT: v_max3_f32 v0, v0, v1, 1.0
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_i:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e32 v0, 1.0, v0
+; GFX10-NEXT: v_max3_f32 v0, v0, v1, 1.0
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_i:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX11-NEXT: v_max_f32_e32 v0, 1.0, v0
+; GFX11-NEXT: v_max3_f32 v0, v0, v1, 1.0
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_i:
@@ -493,10 +367,7 @@ define float @v_max3_f32_maximumnum_maximumnum__v_v_i(float %a, float %b) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
-; GFX12-NEXT: v_max_num_f32_e32 v0, 1.0, v0
+; GFX12-NEXT: v_max3_num_f32 v0, v0, v1, 1.0
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float %a, float %b)
%max3 = call float @llvm.maximumnum.f32(float %tmp0, float 1.0)
@@ -507,8 +378,6 @@ define float @v_max3_f32_maximumnum_maximumnum__v_k_v(float %a, float %c) {
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__v_k_v:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX6-NEXT: s_mov_b32 s4, 0x41000000
; GFX6-NEXT: v_max3_f32 v0, v0, s4, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
@@ -516,8 +385,6 @@ define float @v_max3_f32_maximumnum_maximumnum__v_k_v(float %a, float %c) {
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__v_k_v:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX7-NEXT: s_mov_b32 s4, 0x41000000
; GFX7-NEXT: v_max3_f32 v0, v0, s4, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
@@ -525,8 +392,6 @@ define float @v_max3_f32_maximumnum_maximumnum__v_k_v(float %a, float %c) {
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__v_k_v:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX8-NEXT: s_mov_b32 s4, 0x41000000
; GFX8-NEXT: v_max3_f32 v0, v0, s4, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
@@ -534,8 +399,6 @@ define float @v_max3_f32_maximumnum_maximumnum__v_k_v(float %a, float %c) {
; GFX900-SDAG-LABEL: v_max3_f32_maximumnum_maximumnum__v_k_v:
; GFX900-SDAG: ; %bb.0:
; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX900-SDAG-NEXT: v_max_f32_e32 v1, v1, v1
; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x41000000
; GFX900-SDAG-NEXT: v_max3_f32 v0, v0, s4, v1
; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]
@@ -543,8 +406,6 @@ define float @v_max3_f32_maximumnum_maximumnum__v_k_v(float %a, float %c) {
; GFX950-SDAG-LABEL: v_max3_f32_maximumnum_maximumnum__v_k_v:
; GFX950-SDAG: ; %bb.0:
; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX950-SDAG-NEXT: v_max_f32_e32 v1, v1, v1
; GFX950-SDAG-NEXT: s_mov_b32 s0, 0x41000000
; GFX950-SDAG-NEXT: v_max3_f32 v0, v0, s0, v1
; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31]
@@ -552,16 +413,12 @@ define float @v_max3_f32_maximumnum_maximumnum__v_k_v(float %a, float %c) {
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__v_k_v:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
; GFX10-NEXT: v_max3_f32 v0, v0, 0x41000000, v1
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__v_k_v:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_max3_f32 v0, v0, 0x41000000, v1
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -572,8 +429,6 @@ define float @v_max3_f32_maximumnum_maximumnum__v_k_v(float %a, float %c) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_max3_num_f32 v0, v0, 0x41000000, v1
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float %a, float 8.0)
@@ -585,55 +440,48 @@ define float @v_max3_f32_maximumnum_maximumnum__v_v_k(float %a, float %b) {
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_k:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_max_f32_e32 v0, 0x41000000, v0
+; GFX6-NEXT: s_mov_b32 s4, 0x41000000
+; GFX6-NEXT: v_max3_f32 v0, v0, v1, s4
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_k:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_max_f32_e32 v0, 0x41000000, v0
+; GFX7-NEXT: s_mov_b32 s4, 0x41000000
+; GFX7-NEXT: v_max3_f32 v0, v0, v1, s4
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_k:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_max_f32_e32 v0, 0x41000000, v0
+; GFX8-NEXT: s_mov_b32 s4, 0x41000000
+; GFX8-NEXT: v_max3_f32 v0, v0, v1, s4
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_k:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e32 v0, 0x41000000, v0
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-SDAG-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_k:
+; GFX900-SDAG: ; %bb.0:
+; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x41000000
+; GFX900-SDAG-NEXT: v_max3_f32 v0, v0, v1, s4
+; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-SDAG-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_k:
+; GFX950-SDAG: ; %bb.0:
+; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-SDAG-NEXT: s_mov_b32 s0, 0x41000000
+; GFX950-SDAG-NEXT: v_max3_f32 v0, v0, v1, s0
+; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_k:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e32 v0, 0x41000000, v0
+; GFX10-NEXT: v_max3_f32 v0, v0, v1, 0x41000000
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_k:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX11-NEXT: v_max_f32_e32 v0, 0x41000000, v0
+; GFX11-NEXT: v_max3_f32 v0, v0, v1, 0x41000000
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_k:
@@ -643,10 +491,7 @@ define float @v_max3_f32_maximumnum_maximumnum__v_v_k(float %a, float %b) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
-; GFX12-NEXT: v_max_num_f32_e32 v0, 0x41000000, v0
+; GFX12-NEXT: v_max3_num_f32 v0, v0, v1, 0x41000000
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float %a, float %b)
%max3 = call float @llvm.maximumnum.f32(float %tmp0, float 8.0)
@@ -657,71 +502,43 @@ define float @v_max3_f32_maximumnum_maximumnum__s_v_v(float inreg %a, float %b,
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_v:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e64 v2, 1.0, s16
-; GFX6-NEXT: v_max_f32_e32 v0, v2, v0
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_max3_f32 v0, s16, v0, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_v:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e64 v2, 1.0, s16
-; GFX7-NEXT: v_max_f32_e32 v0, v2, v0
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_max3_f32 v0, s16, v0, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_v:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e64 v2, 1.0, s16
-; GFX8-NEXT: v_max_f32_e32 v0, v2, v0
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_max3_f32 v0, s16, v0, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX900-SDAG-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_v:
; GFX900-SDAG: ; %bb.0:
; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX900-SDAG-NEXT: v_max_f32_e64 v2, s16, s16
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v2, v0
-; GFX900-SDAG-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX900-SDAG-NEXT: v_max3_f32 v0, s16, v0, v1
; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX950-SDAG-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_v:
; GFX950-SDAG: ; %bb.0:
; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX950-SDAG-NEXT: v_max_f32_e64 v2, s0, s0
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v2, v0
-; GFX950-SDAG-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX950-SDAG-NEXT: v_max3_f32 v0, s0, v0, v1
; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_v:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v2, s16, s16
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v2, v0
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_max3_f32 v0, s16, v0, v1
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_v:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v2, s0, s0
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_max_f32_e32 v0, v2, v0
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_max3_f32 v0, s0, v0, v1
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_v:
@@ -731,11 +548,7 @@ define float @v_max3_f32_maximumnum_maximumnum__s_v_v(float inreg %a, float %b,
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v2, s0, s0
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_max_num_f32_e32 v0, v2, v0
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_max3_num_f32 v0, s0, v0, v1
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float %a, float %b)
%max3 = call float @llvm.maximumnum.f32(float %tmp0, float %c)
@@ -746,71 +559,48 @@ define float @v_max3_f32_maximumnum_maximumnum__s_s_v(float inreg %a, float inre
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_v:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s17
-; GFX6-NEXT: v_mul_f32_e64 v2, 1.0, s16
-; GFX6-NEXT: v_max_f32_e32 v1, v2, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_max_f32_e32 v0, v1, v0
+; GFX6-NEXT: v_mov_b32_e32 v1, s17
+; GFX6-NEXT: v_max3_f32 v0, s16, v1, v0
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_v:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s17
-; GFX7-NEXT: v_mul_f32_e64 v2, 1.0, s16
-; GFX7-NEXT: v_max_f32_e32 v1, v2, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_max_f32_e32 v0, v1, v0
+; GFX7-NEXT: v_mov_b32_e32 v1, s17
+; GFX7-NEXT: v_max3_f32 v0, s16, v1, v0
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_v:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s17
-; GFX8-NEXT: v_mul_f32_e64 v2, 1.0, s16
-; GFX8-NEXT: v_max_f32_e32 v1, v2, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_max_f32_e32 v0, v1, v0
+; GFX8-NEXT: v_mov_b32_e32 v1, s17
+; GFX8-NEXT: v_max3_f32 v0, s16, v1, v0
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX900-SDAG-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_v:
; GFX900-SDAG: ; %bb.0:
; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s17, s17
-; GFX900-SDAG-NEXT: v_max_f32_e64 v2, s16, s16
-; GFX900-SDAG-NEXT: v_max_f32_e32 v1, v2, v1
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v1, v0
+; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, s17
+; GFX900-SDAG-NEXT: v_max3_f32 v0, s16, v1, v0
; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX950-SDAG-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_v:
; GFX950-SDAG: ; %bb.0:
; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s1, s1
-; GFX950-SDAG-NEXT: v_max_f32_e64 v2, s0, s0
-; GFX950-SDAG-NEXT: v_max_f32_e32 v1, v2, v1
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v1, v0
+; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, s1
+; GFX950-SDAG-NEXT: v_max3_f32 v0, s0, v1, v0
; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_v:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v1, s17, s17
-; GFX10-NEXT: v_max_f32_e64 v2, s16, s16
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v1, v2, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v1, v0
+; GFX10-NEXT: v_max3_f32 v0, s16, s17, v0
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_v:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v1, s1, s1
-; GFX11-NEXT: v_max_f32_e64 v2, s0, s0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v2, v1
-; GFX11-NEXT: v_max_f32_e32 v0, v1, v0
+; GFX11-NEXT: v_max3_f32 v0, s0, s1, v0
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_v:
@@ -820,11 +610,7 @@ define float @v_max3_f32_maximumnum_maximumnum__s_s_v(float inreg %a, float inre
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v1, s1, s1
-; GFX12-NEXT: v_max_num_f32_e64 v2, s0, s0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v2, v1
-; GFX12-NEXT: v_max_num_f32_e32 v0, v1, v0
+; GFX12-NEXT: v_max3_num_f32 v0, s0, s1, v0
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float %a, float %b)
%max3 = call float @llvm.maximumnum.f32(float %tmp0, float %c)
@@ -835,72 +621,48 @@ define float @v_max3_f32_maximumnum_maximumnum__s_v_s(float inreg %a, float %b,
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_s:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s16
-; GFX6-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s17
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_mov_b32_e32 v1, s17
+; GFX6-NEXT: v_max3_f32 v0, s16, v0, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_s:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s16
-; GFX7-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s17
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_mov_b32_e32 v1, s17
+; GFX7-NEXT: v_max3_f32 v0, s16, v0, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_s:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s16
-; GFX8-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s17
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_mov_b32_e32 v1, s17
+; GFX8-NEXT: v_max3_f32 v0, s16, v0, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX900-SDAG-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_s:
; GFX900-SDAG: ; %bb.0:
; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s16, s16
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s17, s17
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, s17
+; GFX900-SDAG-NEXT: v_max3_f32 v0, s16, v0, v1
; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX950-SDAG-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_s:
; GFX950-SDAG: ; %bb.0:
; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s1, s1
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, s1
+; GFX950-SDAG-NEXT: v_max3_f32 v0, s0, v0, v1
; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_s:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v1, s16, s16
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX10-NEXT: v_max_f32_e64 v1, s17, s17
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_max3_f32 v0, s16, v0, s17
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_s:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX11-NEXT: v_max_f32_e64 v1, s1, s1
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_max3_f32 v0, s0, v0, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_max3_f32_maximumnum_maximumnum__s_v_s:
@@ -910,12 +672,7 @@ define float @v_max3_f32_maximumnum_maximumnum__s_v_s(float inreg %a, float %b,
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v1, s0, s0
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_max_num_f32_e32 v0, v1, v0
-; GFX12-NEXT: v_max_num_f32_e64 v1, s1, s1
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_max3_num_f32 v0, s0, v0, s1
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float %a, float %b)
%max3 = call float @llvm.maximumnum.f32(float %tmp0, float %c)
@@ -926,72 +683,56 @@ define float @v_max3_f32_maximumnum_maximumnum__s_s_s(float inreg %a, float inre
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e64 v0, 1.0, s17
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s16
-; GFX6-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s18
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_mov_b32_e32 v0, s17
+; GFX6-NEXT: v_mov_b32_e32 v1, s18
+; GFX6-NEXT: v_max3_f32 v0, s16, v0, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e64 v0, 1.0, s17
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s16
-; GFX7-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s18
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_mov_b32_e32 v0, s17
+; GFX7-NEXT: v_mov_b32_e32 v1, s18
+; GFX7-NEXT: v_max3_f32 v0, s16, v0, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e64 v0, 1.0, s17
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s16
-; GFX8-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s18
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_mov_b32_e32 v0, s17
+; GFX8-NEXT: v_mov_b32_e32 v1, s18
+; GFX8-NEXT: v_max3_f32 v0, s16, v0, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX900-SDAG-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX900-SDAG: ; %bb.0:
; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX900-SDAG-NEXT: v_max_f32_e64 v0, s17, s17
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s16, s16
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s18, s18
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX900-SDAG-NEXT: v_mov_b32_e32 v0, s17
+; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, s18
+; GFX900-SDAG-NEXT: v_max3_f32 v0, s16, v0, v1
; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX950-SDAG-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX950-SDAG: ; %bb.0:
; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-SDAG-NEXT: v_max_f32_e64 v0, s1, s1
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s2, s2
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, s1
+; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, s2
+; GFX950-SDAG-NEXT: v_max3_f32 v0, s0, v0, v1
; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v0, s17, s17
-; GFX10-NEXT: v_max_f32_e64 v1, s16, s16
-; GFX10-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX10-NEXT: v_max_f32_e64 v1, s18, s18
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_mov_b32_e32 v0, s18
+; GFX10-NEXT: v_max3_f32 v0, s16, s17, v0
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v0, s1, s1
-; GFX11-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX11-NEXT: v_max_f32_e64 v1, s2, s2
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_mov_b32_e32 v0, s2
+; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX11-NEXT: v_max3_f32 v0, s0, s1, v0
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_max3_f32_maximumnum_maximumnum__s_s_s:
@@ -1001,12 +742,9 @@ define float @v_max3_f32_maximumnum_maximumnum__s_s_s(float inreg %a, float inre
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v0, s1, s1
-; GFX12-NEXT: v_max_num_f32_e64 v1, s0, s0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_max_num_f32_e32 v0, v1, v0
-; GFX12-NEXT: v_max_num_f32_e64 v1, s2, s2
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_mov_b32_e32 v0, s2
+; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX12-NEXT: v_max3_num_f32 v0, s0, s1, v0
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float %a, float %b)
%max3 = call float @llvm.maximumnum.f32(float %tmp0, float %c)
@@ -1016,86 +754,65 @@ define float @v_max3_f32_maximumnum_maximumnum__s_s_s(float inreg %a, float inre
define amdgpu_ps i32 @s_max3_f32_maximumnum_maximumnum__s_s_s(float inreg %a, float inreg %b, float inreg %c) {
; GFX6-LABEL: s_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX6: ; %bb.0:
-; GFX6-NEXT: v_mul_f32_e64 v0, 1.0, s1
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s0
-; GFX6-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s2
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_mov_b32_e32 v0, s1
+; GFX6-NEXT: v_mov_b32_e32 v1, s2
+; GFX6-NEXT: v_max3_f32 v0, s0, v0, v1
; GFX6-NEXT: v_readfirstlane_b32 s0, v0
; GFX6-NEXT: ; return to shader part epilog
;
; GFX7-LABEL: s_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX7: ; %bb.0:
-; GFX7-NEXT: v_mul_f32_e64 v0, 1.0, s1
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s0
-; GFX7-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s2
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_mov_b32_e32 v0, s1
+; GFX7-NEXT: v_mov_b32_e32 v1, s2
+; GFX7-NEXT: v_max3_f32 v0, s0, v0, v1
; GFX7-NEXT: v_readfirstlane_b32 s0, v0
; GFX7-NEXT: ; return to shader part epilog
;
; GFX8-LABEL: s_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX8: ; %bb.0:
-; GFX8-NEXT: v_mul_f32_e64 v0, 1.0, s1
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s0
-; GFX8-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s2
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_mov_b32_e32 v0, s1
+; GFX8-NEXT: v_mov_b32_e32 v1, s2
+; GFX8-NEXT: v_max3_f32 v0, s0, v0, v1
; GFX8-NEXT: v_readfirstlane_b32 s0, v0
; GFX8-NEXT: ; return to shader part epilog
;
; GFX900-SDAG-LABEL: s_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX900-SDAG: ; %bb.0:
-; GFX900-SDAG-NEXT: v_max_f32_e64 v0, s1, s1
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s2, s2
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX900-SDAG-NEXT: v_mov_b32_e32 v0, s1
+; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, s2
+; GFX900-SDAG-NEXT: v_max3_f32 v0, s0, v0, v1
; GFX900-SDAG-NEXT: v_readfirstlane_b32 s0, v0
; GFX900-SDAG-NEXT: ; return to shader part epilog
;
; GFX950-SDAG-LABEL: s_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX950-SDAG: ; %bb.0:
-; GFX950-SDAG-NEXT: v_max_f32_e64 v0, s1, s1
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s2, s2
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, s1
+; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, s2
+; GFX950-SDAG-NEXT: v_max3_f32 v0, s0, v0, v1
; GFX950-SDAG-NEXT: s_nop 0
; GFX950-SDAG-NEXT: v_readfirstlane_b32 s0, v0
; GFX950-SDAG-NEXT: ; return to shader part epilog
;
; GFX10-LABEL: s_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX10: ; %bb.0:
-; GFX10-NEXT: v_max_f32_e64 v0, s1, s1
-; GFX10-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX10-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX10-NEXT: v_max_f32_e64 v1, s2, s2
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_mov_b32_e32 v0, s2
+; GFX10-NEXT: v_max3_f32 v0, s0, s1, v0
; GFX10-NEXT: v_readfirstlane_b32 s0, v0
; GFX10-NEXT: ; return to shader part epilog
;
; GFX11-LABEL: s_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX11: ; %bb.0:
-; GFX11-NEXT: v_max_f32_e64 v0, s1, s1
-; GFX11-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_max_f32_e32 v0, v1, v0
-; GFX11-NEXT: v_max_f32_e64 v1, s2, s2
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX11-NEXT: v_mov_b32_e32 v0, s2
+; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX11-NEXT: v_max3_f32 v0, s0, s1, v0
; GFX11-NEXT: v_readfirstlane_b32 s0, v0
; GFX11-NEXT: ; return to shader part epilog
;
; GFX12-LABEL: s_max3_f32_maximumnum_maximumnum__s_s_s:
; GFX12: ; %bb.0:
-; GFX12-NEXT: v_max_num_f32_e64 v0, s1, s1
-; GFX12-NEXT: v_max_num_f32_e64 v1, s0, s0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_max_num_f32_e32 v0, v1, v0
-; GFX12-NEXT: v_max_num_f32_e64 v1, s2, s2
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX12-NEXT: v_mov_b32_e32 v0, s2
+; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX12-NEXT: v_max3_num_f32 v0, s0, s1, v0
; GFX12-NEXT: v_readfirstlane_b32 s0, v0
; GFX12-NEXT: s_wait_alu 0xf1ff
; GFX12-NEXT: ; return to shader part epilog
@@ -1160,43 +877,36 @@ define float @v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan0(float %a, float %
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v2, 1.0, v2
; GFX6-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v2, 1.0, v2
; GFX7-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v2
; GFX8-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v2, v2, v2
; GFX9-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v2, v2, v2
; GFX10-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e32 v2, v2, v2
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -1207,8 +917,6 @@ define float @v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan0(float %a, float %
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e32 v2, v2, v2
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_max3_num_f32 v0, v0, v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call nnan float @llvm.maximumnum.f32(float %a, float %b)
@@ -1220,48 +928,36 @@ define float @v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan1(float %a, float %
; GFX6-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan1:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
; GFX6-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan1:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
; GFX7-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan1:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
; GFX8-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan1:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
; GFX9-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan1:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
; GFX10-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan1:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -1272,8 +968,6 @@ define float @v_max3_f32_maximumnum_maximumnum__v_v_v_0__nnan1(float %a, float %
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_max3_num_f32 v0, v0, v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.maximumnum.f32(float %a, float %b)
@@ -1285,88 +979,43 @@ define <2 x float> @v_max3_v2f32_maximumnum_maximumnum__v_v_v_0(<2 x float> %a,
; GFX6-LABEL: v_max3_v2f32_maximumnum_maximumnum__v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v2, 1.0, v2
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v3, 1.0, v3
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX6-NEXT: v_mul_f32_e32 v2, 1.0, v4
-; GFX6-NEXT: v_max_f32_e32 v1, v1, v3
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX6-NEXT: v_mul_f32_e32 v2, 1.0, v5
-; GFX6-NEXT: v_max_f32_e32 v1, v1, v2
+; GFX6-NEXT: v_max3_f32 v0, v0, v2, v4
+; GFX6-NEXT: v_max3_f32 v1, v1, v3, v5
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_v2f32_maximumnum_maximumnum__v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v2, 1.0, v2
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v3, 1.0, v3
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX7-NEXT: v_mul_f32_e32 v2, 1.0, v4
-; GFX7-NEXT: v_max_f32_e32 v1, v1, v3
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX7-NEXT: v_mul_f32_e32 v2, 1.0, v5
-; GFX7-NEXT: v_max_f32_e32 v1, v1, v2
+; GFX7-NEXT: v_max3_f32 v0, v0, v2, v4
+; GFX7-NEXT: v_max3_f32 v1, v1, v3, v5
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_v2f32_maximumnum_maximumnum__v_v_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v2
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v3, 1.0, v3
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v4
-; GFX8-NEXT: v_max_f32_e32 v1, v1, v3
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v5
-; GFX8-NEXT: v_max_f32_e32 v1, v1, v2
+; GFX8-NEXT: v_max3_f32 v0, v0, v2, v4
+; GFX8-NEXT: v_max3_f32 v1, v1, v3, v5
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_max3_v2f32_maximumnum_maximumnum__v_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v2, v2, v2
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v3, v3, v3
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX9-NEXT: v_max_f32_e32 v2, v4, v4
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v3
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX9-NEXT: v_max_f32_e32 v2, v5, v5
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v2
+; GFX9-NEXT: v_max3_f32 v0, v0, v2, v4
+; GFX9-NEXT: v_max3_f32 v1, v1, v3, v5
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_v2f32_maximumnum_maximumnum__v_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v2, v2, v2
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v3, v3, v3
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX10-NEXT: v_max_f32_e32 v2, v4, v4
-; GFX10-NEXT: v_max_f32_e32 v4, v5, v5
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v3
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v4
+; GFX10-NEXT: v_max3_f32 v0, v0, v2, v4
+; GFX10-NEXT: v_max3_f32 v1, v1, v3, v5
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_v2f32_maximumnum_maximumnum__v_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v2, v2, v2 :: v_dual_max_f32 v3, v3, v3
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v2 :: v_dual_max_f32 v1, v1, v3
-; GFX11-NEXT: v_max_f32_e32 v2, v4, v4
-; GFX11-NEXT: v_max_f32_e32 v4, v5, v5
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v2 :: v_dual_max_f32 v1, v1, v4
+; GFX11-NEXT: v_max3_f32 v0, v0, v2, v4
+; GFX11-NEXT: v_max3_f32 v1, v1, v3, v5
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_max3_v2f32_maximumnum_maximumnum__v_v_v_0:
@@ -1376,13 +1025,8 @@ define <2 x float> @v_max3_v2f32_maximumnum_maximumnum__v_v_v_0(<2 x float> %a,
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v2, v2, v2 :: v_dual_max_num_f32 v3, v3, v3
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v2 :: v_dual_max_num_f32 v1, v1, v3
-; GFX12-NEXT: v_max_num_f32_e32 v2, v4, v4
-; GFX12-NEXT: v_max_num_f32_e32 v4, v5, v5
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v2 :: v_dual_max_num_f32 v1, v1, v4
+; GFX12-NEXT: v_max3_num_f32 v0, v0, v2, v4
+; GFX12-NEXT: v_max3_num_f32 v1, v1, v3, v5
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call <2 x float> @llvm.maximumnum.v2f32(<2 x float> %a, <2 x float> %b)
%max3 = call <2 x float> @llvm.maximumnum.v2f32(<2 x float> %tmp0, <2 x float> %c)
@@ -1393,27 +1037,25 @@ define half @v_max3_f16_maximumnum_maximumnum__v_v_v_0(half %a, half %b, half %c
; GFX6-LABEL: v_max3_f16_maximumnum_maximumnum__v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
-; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
+; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v2
+; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX6-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_f16_maximumnum_maximumnum__v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
-; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
+; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v2
+; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX7-NEXT: v_max3_f32 v0, v0, v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_f16_maximumnum_maximumnum__v_v_v_0:
@@ -1429,32 +1071,19 @@ define half @v_max3_f16_maximumnum_maximumnum__v_v_v_0(half %a, half %b, half %c
; GFX9-LABEL: v_max3_f16_maximumnum_maximumnum__v_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f16_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f16_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f16_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f16_e32 v1, v2, v2
-; GFX9-NEXT: v_max_f16_e32 v0, v0, v1
+; GFX9-NEXT: v_max3_f16 v0, v0, v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_max3_f16_maximumnum_maximumnum__v_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f16_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f16_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f16_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f16_e32 v1, v2, v2
-; GFX10-NEXT: v_max_f16_e32 v0, v0, v1
+; GFX10-NEXT: v_max3_f16 v0, v0, v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_max3_f16_maximumnum_maximumnum__v_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f16_e32 v1, v1, v1
-; GFX11-NEXT: v_max_f16_e32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_max_f16_e32 v0, v0, v1
-; GFX11-NEXT: v_max_f16_e32 v1, v2, v2
-; GFX11-NEXT: v_max_f16_e32 v0, v0, v1
+; GFX11-NEXT: v_max3_f16 v0, v0, v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_max3_f16_maximumnum_maximumnum__v_v_v_0:
@@ -1464,12 +1093,7 @@ define half @v_max3_f16_maximumnum_maximumnum__v_v_v_0(half %a, half %b, half %c
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f16_e32 v1, v1, v1
-; GFX12-NEXT: v_max_num_f16_e32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_max_num_f16_e32 v0, v0, v1
-; GFX12-NEXT: v_max_num_f16_e32 v1, v2, v2
-; GFX12-NEXT: v_max_num_f16_e32 v0, v0, v1
+; GFX12-NEXT: v_max3_num_f16 v0, v0, v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call half @llvm.maximumnum.f16(half %a, half %b)
%max3 = call half @llvm.maximumnum.f16(half %tmp0, half %c)
@@ -1480,43 +1104,39 @@ define <2 x half> @v_max3_v2f16_maximumnum_maximumnum__v_v_v_0(<2 x half> %a, <2
; GFX6-LABEL: v_max3_v2f16_maximumnum_maximumnum__v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
-; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3
-; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
; GFX6-NEXT: v_cvt_f16_f32_e32 v5, v5
+; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3
; GFX6-NEXT: v_cvt_f16_f32_e32 v4, v4
-; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
+; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
+; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
+; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5
; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3
-; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
; GFX6-NEXT: v_cvt_f32_f16_e32 v4, v4
-; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5
-; GFX6-NEXT: v_max_f32_e32 v1, v1, v3
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v4
-; GFX6-NEXT: v_max_f32_e32 v1, v1, v5
+; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
+; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX6-NEXT: v_max3_f32 v0, v0, v2, v4
+; GFX6-NEXT: v_max3_f32 v1, v1, v3, v5
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_v2f16_maximumnum_maximumnum__v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
-; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3
-; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
; GFX7-NEXT: v_cvt_f16_f32_e32 v5, v5
+; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3
; GFX7-NEXT: v_cvt_f16_f32_e32 v4, v4
-; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
+; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
+; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
+; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5
; GFX7-NEXT: v_cvt_f32_f16_e32 v3, v3
-; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
; GFX7-NEXT: v_cvt_f32_f16_e32 v4, v4
-; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5
-; GFX7-NEXT: v_max_f32_e32 v1, v1, v3
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v4
-; GFX7-NEXT: v_max_f32_e32 v1, v1, v5
+; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
+; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX7-NEXT: v_max3_f32 v0, v0, v2, v4
+; GFX7-NEXT: v_max3_f32 v1, v1, v3, v5
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_v2f16_maximumnum_maximumnum__v_v_v_0:
@@ -1601,59 +1221,53 @@ define <3 x half> @v_max3_v3f16_maximumnum_maximumnum__v_v_v_0(<3 x half> %a, <3
; GFX6-LABEL: v_max3_v3f16_maximumnum_maximumnum__v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3
-; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
-; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
-; GFX6-NEXT: v_cvt_f16_f32_e32 v5, v5
-; GFX6-NEXT: v_cvt_f16_f32_e32 v4, v4
; GFX6-NEXT: v_cvt_f16_f32_e32 v8, v8
+; GFX6-NEXT: v_cvt_f16_f32_e32 v5, v5
; GFX6-NEXT: v_cvt_f16_f32_e32 v7, v7
+; GFX6-NEXT: v_cvt_f16_f32_e32 v4, v4
+; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
; GFX6-NEXT: v_cvt_f16_f32_e32 v6, v6
-; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
-; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
-; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5
-; GFX6-NEXT: v_cvt_f32_f16_e32 v4, v4
-; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3
+; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3
+; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
+; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
; GFX6-NEXT: v_cvt_f32_f16_e32 v8, v8
+; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5
; GFX6-NEXT: v_cvt_f32_f16_e32 v7, v7
+; GFX6-NEXT: v_cvt_f32_f16_e32 v4, v4
; GFX6-NEXT: v_cvt_f32_f16_e32 v6, v6
-; GFX6-NEXT: v_max_f32_e32 v2, v2, v5
-; GFX6-NEXT: v_max_f32_e32 v1, v1, v4
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v3
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v6
-; GFX6-NEXT: v_max_f32_e32 v1, v1, v7
-; GFX6-NEXT: v_max_f32_e32 v2, v2, v8
+; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3
+; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
+; GFX6-NEXT: v_max3_f32 v0, v0, v3, v6
+; GFX6-NEXT: v_max3_f32 v1, v1, v4, v7
+; GFX6-NEXT: v_max3_f32 v2, v2, v5, v8
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_v3f16_maximumnum_maximumnum__v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3
-; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
-; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
-; GFX7-NEXT: v_cvt_f16_f32_e32 v5, v5
-; GFX7-NEXT: v_cvt_f16_f32_e32 v4, v4
; GFX7-NEXT: v_cvt_f16_f32_e32 v8, v8
+; GFX7-NEXT: v_cvt_f16_f32_e32 v5, v5
; GFX7-NEXT: v_cvt_f16_f32_e32 v7, v7
+; GFX7-NEXT: v_cvt_f16_f32_e32 v4, v4
+; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
; GFX7-NEXT: v_cvt_f16_f32_e32 v6, v6
-; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
-; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
-; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5
-; GFX7-NEXT: v_cvt_f32_f16_e32 v4, v4
-; GFX7-NEXT: v_cvt_f32_f16_e32 v3, v3
+; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3
+; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
+; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
; GFX7-NEXT: v_cvt_f32_f16_e32 v8, v8
+; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5
; GFX7-NEXT: v_cvt_f32_f16_e32 v7, v7
+; GFX7-NEXT: v_cvt_f32_f16_e32 v4, v4
; GFX7-NEXT: v_cvt_f32_f16_e32 v6, v6
-; GFX7-NEXT: v_max_f32_e32 v2, v2, v5
-; GFX7-NEXT: v_max_f32_e32 v1, v1, v4
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v3
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v6
-; GFX7-NEXT: v_max_f32_e32 v1, v1, v7
-; GFX7-NEXT: v_max_f32_e32 v2, v2, v8
+; GFX7-NEXT: v_cvt_f32_f16_e32 v3, v3
+; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
+; GFX7-NEXT: v_max3_f32 v0, v0, v3, v6
+; GFX7-NEXT: v_max3_f32 v1, v1, v4, v7
+; GFX7-NEXT: v_max3_f32 v2, v2, v5, v8
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_v3f16_maximumnum_maximumnum__v_v_v_0:
@@ -1769,75 +1383,67 @@ define <4 x half> @v_max3_v4f16_maximumnum_maximumnum__v_v_v_0(<4 x half> %a, <4
; GFX6-LABEL: v_max3_v4f16_maximumnum_maximumnum__v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
-; GFX6-NEXT: v_cvt_f16_f32_e32 v4, v4
-; GFX6-NEXT: v_cvt_f16_f32_e32 v5, v5
-; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
-; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3
-; GFX6-NEXT: v_cvt_f16_f32_e32 v7, v7
-; GFX6-NEXT: v_cvt_f16_f32_e32 v6, v6
; GFX6-NEXT: v_cvt_f16_f32_e32 v11, v11
+; GFX6-NEXT: v_cvt_f16_f32_e32 v7, v7
; GFX6-NEXT: v_cvt_f16_f32_e32 v10, v10
+; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3
+; GFX6-NEXT: v_cvt_f16_f32_e32 v6, v6
; GFX6-NEXT: v_cvt_f16_f32_e32 v9, v9
+; GFX6-NEXT: v_cvt_f16_f32_e32 v5, v5
+; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
; GFX6-NEXT: v_cvt_f16_f32_e32 v8, v8
-; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
-; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
-; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3
-; GFX6-NEXT: v_cvt_f32_f16_e32 v7, v7
-; GFX6-NEXT: v_cvt_f32_f16_e32 v6, v6
-; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5
-; GFX6-NEXT: v_cvt_f32_f16_e32 v4, v4
+; GFX6-NEXT: v_cvt_f16_f32_e32 v4, v4
+; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
+; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
; GFX6-NEXT: v_cvt_f32_f16_e32 v11, v11
+; GFX6-NEXT: v_cvt_f32_f16_e32 v7, v7
; GFX6-NEXT: v_cvt_f32_f16_e32 v10, v10
+; GFX6-NEXT: v_cvt_f32_f16_e32 v6, v6
; GFX6-NEXT: v_cvt_f32_f16_e32 v9, v9
+; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5
; GFX6-NEXT: v_cvt_f32_f16_e32 v8, v8
-; GFX6-NEXT: v_max_f32_e32 v3, v3, v7
-; GFX6-NEXT: v_max_f32_e32 v2, v2, v6
-; GFX6-NEXT: v_max_f32_e32 v1, v1, v5
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v4
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v8
-; GFX6-NEXT: v_max_f32_e32 v1, v1, v9
-; GFX6-NEXT: v_max_f32_e32 v2, v2, v10
-; GFX6-NEXT: v_max_f32_e32 v3, v3, v11
+; GFX6-NEXT: v_cvt_f32_f16_e32 v4, v4
+; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
+; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3
+; GFX6-NEXT: v_max3_f32 v0, v0, v4, v8
+; GFX6-NEXT: v_max3_f32 v1, v1, v5, v9
+; GFX6-NEXT: v_max3_f32 v2, v2, v6, v10
+; GFX6-NEXT: v_max3_f32 v3, v3, v7, v11
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_max3_v4f16_maximumnum_maximumnum__v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
-; GFX7-NEXT: v_cvt_f16_f32_e32 v4, v4
-; GFX7-NEXT: v_cvt_f16_f32_e32 v5, v5
-; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
-; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3
-; GFX7-NEXT: v_cvt_f16_f32_e32 v7, v7
-; GFX7-NEXT: v_cvt_f16_f32_e32 v6, v6
; GFX7-NEXT: v_cvt_f16_f32_e32 v11, v11
+; GFX7-NEXT: v_cvt_f16_f32_e32 v7, v7
; GFX7-NEXT: v_cvt_f16_f32_e32 v10, v10
+; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3
+; GFX7-NEXT: v_cvt_f16_f32_e32 v6, v6
; GFX7-NEXT: v_cvt_f16_f32_e32 v9, v9
+; GFX7-NEXT: v_cvt_f16_f32_e32 v5, v5
+; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
; GFX7-NEXT: v_cvt_f16_f32_e32 v8, v8
-; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
-; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
-; GFX7-NEXT: v_cvt_f32_f16_e32 v3, v3
-; GFX7-NEXT: v_cvt_f32_f16_e32 v7, v7
-; GFX7-NEXT: v_cvt_f32_f16_e32 v6, v6
-; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5
-; GFX7-NEXT: v_cvt_f32_f16_e32 v4, v4
+; GFX7-NEXT: v_cvt_f16_f32_e32 v4, v4
+; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
+; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
; GFX7-NEXT: v_cvt_f32_f16_e32 v11, v11
+; GFX7-NEXT: v_cvt_f32_f16_e32 v7, v7
; GFX7-NEXT: v_cvt_f32_f16_e32 v10, v10
+; GFX7-NEXT: v_cvt_f32_f16_e32 v6, v6
; GFX7-NEXT: v_cvt_f32_f16_e32 v9, v9
+; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5
; GFX7-NEXT: v_cvt_f32_f16_e32 v8, v8
-; GFX7-NEXT: v_max_f32_e32 v3, v3, v7
-; GFX7-NEXT: v_max_f32_e32 v2, v2, v6
-; GFX7-NEXT: v_max_f32_e32 v1, v1, v5
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v4
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v8
-; GFX7-NEXT: v_max_f32_e32 v1, v1, v9
-; GFX7-NEXT: v_max_f32_e32 v2, v2, v10
-; GFX7-NEXT: v_max_f32_e32 v3, v3, v11
+; GFX7-NEXT: v_cvt_f32_f16_e32 v4, v4
+; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
+; GFX7-NEXT: v_cvt_f32_f16_e32 v3, v3
+; GFX7-NEXT: v_max3_f32 v0, v0, v4, v8
+; GFX7-NEXT: v_max3_f32 v1, v1, v5, v9
+; GFX7-NEXT: v_max3_f32 v2, v2, v6, v10
+; GFX7-NEXT: v_max3_f32 v3, v3, v7, v11
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_max3_v4f16_maximumnum_maximumnum__v_v_v_0:
@@ -3245,61 +2851,37 @@ define float @v_min3_f32_maximumnum_maximumnum__neg_v_v_v_0(float %a, float %b,
; GFX6-LABEL: v_min3_f32_maximumnum_maximumnum__neg_v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, -1.0, v0
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_max3_f32 v0, -v0, v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_maximumnum_maximumnum__neg_v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, -1.0, v0
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_max3_f32 v0, -v0, v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_maximumnum_maximumnum__neg_v_v_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, -1.0, v0
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_max3_f32 v0, -v0, v1, v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_maximumnum_maximumnum__neg_v_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e64 v0, -v0, -v0
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX9-NEXT: v_max3_f32 v0, -v0, v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_maximumnum_maximumnum__neg_v_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e64 v0, -v0, -v0
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_max3_f32 v0, -v0, v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_maximumnum_maximumnum__neg_v_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX11-NEXT: v_max_f32_e64 v0, -v0, -v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v1 :: v_dual_max_f32 v1, v2, v2
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_max3_f32 v0, -v0, v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_maximumnum_maximumnum__neg_v_v_v_0:
@@ -3309,11 +2891,7 @@ define float @v_min3_f32_maximumnum_maximumnum__neg_v_v_v_0(float %a, float %b,
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e32 v1, v1, v1
-; GFX12-NEXT: v_max_num_f32_e64 v0, -v0, -v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v1 :: v_dual_max_num_f32 v1, v2, v2
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_max3_num_f32 v0, -v0, v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%neg.a = fneg float %a
%tmp0 = call float @llvm.maximumnum.f32(float %neg.a, float %b)
@@ -3325,61 +2903,37 @@ define float @v_min3_f32_maximumnum_maximumnum__v_neg_v_v_0(float %a, float %b,
; GFX6-LABEL: v_min3_f32_maximumnum_maximumnum__v_neg_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, -1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_max3_f32 v0, v0, -v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_maximumnum_maximumnum__v_neg_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, -1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_max3_f32 v0, v0, -v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_maximumnum_maximumnum__v_neg_v_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, -1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_max3_f32 v0, v0, -v1, v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_maximumnum_maximumnum__v_neg_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e64 v1, -v1, -v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX9-NEXT: v_max3_f32 v0, v0, -v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_maximumnum_maximumnum__v_neg_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v1, -v1, -v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_max3_f32 v0, v0, -v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_maximumnum_maximumnum__v_neg_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v1, -v1, -v1
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v1 :: v_dual_max_f32 v1, v2, v2
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_max3_f32 v0, v0, -v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_maximumnum_maximumnum__v_neg_v_v_0:
@@ -3389,11 +2943,7 @@ define float @v_min3_f32_maximumnum_maximumnum__v_neg_v_v_0(float %a, float %b,
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v1, -v1, -v1
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v1 :: v_dual_max_num_f32 v1, v2, v2
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_max3_num_f32 v0, v0, -v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%neg.b = fneg float %b
%tmp0 = call float @llvm.maximumnum.f32(float %a, float %neg.b)
@@ -3405,61 +2955,37 @@ define float @v_min3_f32_maximumnum_maximumnum__v_v_neg_v_0(float %a, float %b,
; GFX6-LABEL: v_min3_f32_maximumnum_maximumnum__v_v_neg_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e32 v1, -1.0, v2
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_max3_f32 v0, v0, v1, -v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_maximumnum_maximumnum__v_v_neg_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e32 v1, -1.0, v2
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_max3_f32 v0, v0, v1, -v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_maximumnum_maximumnum__v_v_neg_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e32 v1, -1.0, v2
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_max3_f32 v0, v0, v1, -v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_maximumnum_maximumnum__v_v_neg_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e64 v1, -v2, -v2
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX9-NEXT: v_max3_f32 v0, v0, v1, -v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_maximumnum_maximumnum__v_v_neg_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e64 v1, -v2, -v2
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_max3_f32 v0, v0, v1, -v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_maximumnum_maximumnum__v_v_neg_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX11-NEXT: v_max_f32_e64 v1, -v2, -v2
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_max3_f32 v0, v0, v1, -v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_maximumnum_maximumnum__v_v_neg_v_0:
@@ -3469,11 +2995,7 @@ define float @v_min3_f32_maximumnum_maximumnum__v_v_neg_v_0(float %a, float %b,
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
-; GFX12-NEXT: v_max_num_f32_e64 v1, -v2, -v2
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_max3_num_f32 v0, v0, v1, -v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%neg.c = fneg float %c
%tmp0 = call float @llvm.maximumnum.f32(float %a, float %b)
@@ -3485,61 +3007,37 @@ define float @v_min3_f32_maximumnum_maximumnum__neg_fabs_v_v_v_0(float %a, float
; GFX6-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e64 v0, -1.0, |v0|
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_max3_f32 v0, -|v0|, v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e64 v0, -1.0, |v0|
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_max3_f32 v0, -|v0|, v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_v_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e64 v0, -1.0, |v0|
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_max3_f32 v0, -|v0|, v1, v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e64 v0, -|v0|, -|v0|
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX9-NEXT: v_max3_f32 v0, -|v0|, v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e64 v0, -|v0|, -|v0|
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_max3_f32 v0, -|v0|, v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX11-NEXT: v_max_f32_e64 v0, -|v0|, -|v0|
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v1 :: v_dual_max_f32 v1, v2, v2
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_max3_f32 v0, -|v0|, v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_v_v_0:
@@ -3549,11 +3047,7 @@ define float @v_min3_f32_maximumnum_maximumnum__neg_fabs_v_v_v_0(float %a, float
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e32 v1, v1, v1
-; GFX12-NEXT: v_max_num_f32_e64 v0, -|v0|, -|v0|
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v1 :: v_dual_max_num_f32 v1, v2, v2
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_max3_num_f32 v0, -|v0|, v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%fabs.a = call float @llvm.fabs.f32(float %a)
%neg.fabs.a = fneg float %fabs.a
@@ -3566,62 +3060,37 @@ define float @v_min3_f32_maximumnum_maximumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v
; GFX6-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e64 v1, -1.0, |v1|
-; GFX6-NEXT: v_mul_f32_e64 v0, -1.0, |v0|
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e64 v1, -1.0, |v2|
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_max3_f32 v0, -|v0|, -|v1|, -|v2|
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e64 v1, -1.0, |v1|
-; GFX7-NEXT: v_mul_f32_e64 v0, -1.0, |v0|
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e64 v1, -1.0, |v2|
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_max3_f32 v0, -|v0|, -|v1|, -|v2|
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e64 v1, -1.0, |v1|
-; GFX8-NEXT: v_mul_f32_e64 v0, -1.0, |v0|
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e64 v1, -1.0, |v2|
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_max3_f32 v0, -|v0|, -|v1|, -|v2|
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e64 v1, -|v1|, -|v1|
-; GFX9-NEXT: v_max_f32_e64 v0, -|v0|, -|v0|
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e64 v1, -|v2|, -|v2|
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX9-NEXT: v_max3_f32 v0, -|v0|, -|v1|, -|v2|
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v1, -|v1|, -|v1|
-; GFX10-NEXT: v_max_f32_e64 v0, -|v0|, -|v0|
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e64 v1, -|v2|, -|v2|
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_max3_f32 v0, -|v0|, -|v1|, -|v2|
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v1, -|v1|, -|v1|
-; GFX11-NEXT: v_max_f32_e64 v0, -|v0|, -|v0|
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
-; GFX11-NEXT: v_max_f32_e64 v1, -|v2|, -|v2|
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_max3_f32 v0, -|v0|, -|v1|, -|v2|
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_maximumnum_maximumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
@@ -3631,12 +3100,7 @@ define float @v_min3_f32_maximumnum_maximumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v1, -|v1|, -|v1|
-; GFX12-NEXT: v_max_num_f32_e64 v0, -|v0|, -|v0|
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
-; GFX12-NEXT: v_max_num_f32_e64 v1, -|v2|, -|v2|
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_max3_num_f32 v0, -|v0|, -|v1|, -|v2|
; GFX12-NEXT: s_setpc_b64 s[30:31]
%fabs.a = call float @llvm.fabs.f32(float %a)
%neg.fabs.a = fneg float %fabs.a
@@ -3916,92 +3380,43 @@ define <2 x float> @v_min3_v2f32_maximumnum_maximumnum__neg_v_neg_v_neg_v_0(<2 x
; GFX6-LABEL: v_min3_v2f32_maximumnum_maximumnum__neg_v_neg_v_neg_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v2, -1.0, v2
-; GFX6-NEXT: v_mul_f32_e32 v0, -1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v3, -1.0, v3
-; GFX6-NEXT: v_mul_f32_e32 v1, -1.0, v1
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX6-NEXT: v_mul_f32_e32 v2, -1.0, v4
-; GFX6-NEXT: v_max_f32_e32 v1, v1, v3
-; GFX6-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX6-NEXT: v_mul_f32_e32 v2, -1.0, v5
-; GFX6-NEXT: v_max_f32_e32 v1, v1, v2
+; GFX6-NEXT: v_max3_f32 v0, -v0, -v2, -v4
+; GFX6-NEXT: v_max3_f32 v1, -v1, -v3, -v5
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_v2f32_maximumnum_maximumnum__neg_v_neg_v_neg_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v2, -1.0, v2
-; GFX7-NEXT: v_mul_f32_e32 v0, -1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v3, -1.0, v3
-; GFX7-NEXT: v_mul_f32_e32 v1, -1.0, v1
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX7-NEXT: v_mul_f32_e32 v2, -1.0, v4
-; GFX7-NEXT: v_max_f32_e32 v1, v1, v3
-; GFX7-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX7-NEXT: v_mul_f32_e32 v2, -1.0, v5
-; GFX7-NEXT: v_max_f32_e32 v1, v1, v2
+; GFX7-NEXT: v_max3_f32 v0, -v0, -v2, -v4
+; GFX7-NEXT: v_max3_f32 v1, -v1, -v3, -v5
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_v2f32_maximumnum_maximumnum__neg_v_neg_v_neg_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v2, -1.0, v2
-; GFX8-NEXT: v_mul_f32_e32 v0, -1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v3, -1.0, v3
-; GFX8-NEXT: v_mul_f32_e32 v1, -1.0, v1
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX8-NEXT: v_mul_f32_e32 v2, -1.0, v4
-; GFX8-NEXT: v_max_f32_e32 v1, v1, v3
-; GFX8-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX8-NEXT: v_mul_f32_e32 v2, -1.0, v5
-; GFX8-NEXT: v_max_f32_e32 v1, v1, v2
+; GFX8-NEXT: v_max3_f32 v0, -v0, -v2, -v4
+; GFX8-NEXT: v_max3_f32 v1, -v1, -v3, -v5
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_v2f32_maximumnum_maximumnum__neg_v_neg_v_neg_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e64 v2, -v2, -v2
-; GFX9-NEXT: v_max_f32_e64 v0, -v0, -v0
-; GFX9-NEXT: v_max_f32_e64 v3, -v3, -v3
-; GFX9-NEXT: v_max_f32_e64 v1, -v1, -v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX9-NEXT: v_max_f32_e64 v2, -v4, -v4
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v3
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX9-NEXT: v_max_f32_e64 v2, -v5, -v5
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v2
+; GFX9-NEXT: v_max3_f32 v0, -v0, -v2, -v4
+; GFX9-NEXT: v_max3_f32 v1, -v1, -v3, -v5
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_v2f32_maximumnum_maximumnum__neg_v_neg_v_neg_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v2, -v2, -v2
-; GFX10-NEXT: v_max_f32_e64 v0, -v0, -v0
-; GFX10-NEXT: v_max_f32_e64 v3, -v3, -v3
-; GFX10-NEXT: v_max_f32_e64 v1, -v1, -v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX10-NEXT: v_max_f32_e64 v2, -v4, -v4
-; GFX10-NEXT: v_max_f32_e64 v4, -v5, -v5
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v3
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v4
+; GFX10-NEXT: v_max3_f32 v0, -v0, -v2, -v4
+; GFX10-NEXT: v_max3_f32 v1, -v1, -v3, -v5
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_v2f32_maximumnum_maximumnum__neg_v_neg_v_neg_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v2, -v2, -v2
-; GFX11-NEXT: v_max_f32_e64 v0, -v0, -v0
-; GFX11-NEXT: v_max_f32_e64 v3, -v3, -v3
-; GFX11-NEXT: v_max_f32_e64 v1, -v1, -v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v2
-; GFX11-NEXT: v_max_f32_e64 v2, -v4, -v4
-; GFX11-NEXT: v_max_f32_e32 v1, v1, v3
-; GFX11-NEXT: v_max_f32_e64 v4, -v5, -v5
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v2 :: v_dual_max_f32 v1, v1, v4
+; GFX11-NEXT: v_max3_f32 v0, -v0, -v2, -v4
+; GFX11-NEXT: v_max3_f32 v1, -v1, -v3, -v5
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_v2f32_maximumnum_maximumnum__neg_v_neg_v_neg_v_0:
@@ -4011,17 +3426,8 @@ define <2 x float> @v_min3_v2f32_maximumnum_maximumnum__neg_v_neg_v_neg_v_0(<2 x
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v2, -v2, -v2
-; GFX12-NEXT: v_max_num_f32_e64 v0, -v0, -v0
-; GFX12-NEXT: v_max_num_f32_e64 v3, -v3, -v3
-; GFX12-NEXT: v_max_num_f32_e64 v1, -v1, -v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v2
-; GFX12-NEXT: v_max_num_f32_e64 v2, -v4, -v4
-; GFX12-NEXT: v_max_num_f32_e32 v1, v1, v3
-; GFX12-NEXT: v_max_num_f32_e64 v4, -v5, -v5
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v2 :: v_dual_max_num_f32 v1, v1, v4
+; GFX12-NEXT: v_max3_num_f32 v0, -v0, -v2, -v4
+; GFX12-NEXT: v_max3_num_f32 v1, -v1, -v3, -v5
; GFX12-NEXT: s_setpc_b64 s[30:31]
%neg.a = fneg <2 x float> %a
%neg.b = fneg <2 x float> %b
diff --git a/llvm/test/CodeGen/AMDGPU/fmin3-minimumnum.ll b/llvm/test/CodeGen/AMDGPU/fmin3-minimumnum.ll
index afce924a5b442..8a140bdfa42a6 100644
--- a/llvm/test/CodeGen/AMDGPU/fmin3-minimumnum.ll
+++ b/llvm/test/CodeGen/AMDGPU/fmin3-minimumnum.ll
@@ -21,60 +21,37 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_v_0(float %a, float %b, floa
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX9-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_min_f32 v0, v0, v1 :: v_dual_max_f32 v1, v2, v2
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0:
@@ -84,10 +61,7 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_v_0(float %a, float %b, floa
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v1 :: v_dual_max_num_f32 v1, v2, v2
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_min3_num_f32 v0, v0, v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float %a, float %b)
%min3 = call float @llvm.minimumnum.f32(float %tmp0, float %c)
@@ -98,60 +72,37 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_v_1(float %a, float %b, floa
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_1:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX6-NEXT: v_min_f32_e32 v0, v1, v0
+; GFX6-NEXT: v_min3_f32 v0, v2, v0, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_1:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX7-NEXT: v_min_f32_e32 v0, v1, v0
+; GFX7-NEXT: v_min3_f32 v0, v2, v0, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_1:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX8-NEXT: v_min_f32_e32 v0, v1, v0
+; GFX8-NEXT: v_min3_f32 v0, v2, v0, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_1:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX9-NEXT: v_min_f32_e32 v0, v1, v0
+; GFX9-NEXT: v_min3_f32 v0, v2, v0, v1
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_1:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX10-NEXT: v_min_f32_e32 v0, v1, v0
+; GFX10-NEXT: v_min3_f32 v0, v2, v0, v1
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_1:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_min_f32 v0, v0, v1 :: v_dual_max_f32 v1, v2, v2
-; GFX11-NEXT: v_min_f32_e32 v0, v1, v0
+; GFX11-NEXT: v_min3_f32 v0, v2, v0, v1
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_1:
@@ -161,10 +112,7 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_v_1(float %a, float %b, floa
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v1 :: v_dual_max_num_f32 v1, v2, v2
-; GFX12-NEXT: v_min_num_f32_e32 v0, v1, v0
+; GFX12-NEXT: v_min3_num_f32 v0, v2, v0, v1
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float %a, float %b)
%min3 = call float @llvm.minimumnum.f32(float %c, float %tmp0)
@@ -175,48 +123,36 @@ define float @v_min3_f32_minimumnum_minimumnum__i_v_v_0(float %b, float %c) {
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__i_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX6-NEXT: v_min3_f32 v0, v0, 1.0, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__i_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX7-NEXT: v_min3_f32 v0, v0, 1.0, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__i_v_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX8-NEXT: v_min3_f32 v0, v0, 1.0, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__i_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
; GFX9-NEXT: v_min3_f32 v0, v0, 1.0, v1
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__i_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
; GFX10-NEXT: v_min3_f32 v0, v0, 1.0, v1
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__i_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_min3_f32 v0, v0, 1.0, v1
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -227,8 +163,6 @@ define float @v_min3_f32_minimumnum_minimumnum__i_v_v_0(float %b, float %c) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_min3_num_f32 v0, v0, 1.0, v1
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float 1.0, float %b)
@@ -240,48 +174,36 @@ define float @v_min3_f32_minimumnum_minimumnum__i_v_v_1(float %b, float %c) {
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__i_v_v_1:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX6-NEXT: v_min3_f32 v0, v1, v0, 1.0
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__i_v_v_1:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX7-NEXT: v_min3_f32 v0, v1, v0, 1.0
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__i_v_v_1:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX8-NEXT: v_min3_f32 v0, v1, v0, 1.0
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__i_v_v_1:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
; GFX9-NEXT: v_min3_f32 v0, v1, v0, 1.0
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__i_v_v_1:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
; GFX10-NEXT: v_min3_f32 v0, v1, v0, 1.0
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__i_v_v_1:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_min3_f32 v0, v1, v0, 1.0
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -292,8 +214,6 @@ define float @v_min3_f32_minimumnum_minimumnum__i_v_v_1(float %b, float %c) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_min3_num_f32 v0, v1, v0, 1.0
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float 1.0, float %b)
@@ -305,48 +225,36 @@ define float @v_min3_f32_minimumnum_minimumnum__v_i_v_0(float %a, float %c) {
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__v_i_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX6-NEXT: v_min3_f32 v0, v0, 1.0, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__v_i_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX7-NEXT: v_min3_f32 v0, v0, 1.0, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__v_i_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX8-NEXT: v_min3_f32 v0, v0, 1.0, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__v_i_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
; GFX9-NEXT: v_min3_f32 v0, v0, 1.0, v1
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__v_i_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
; GFX10-NEXT: v_min3_f32 v0, v0, 1.0, v1
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__v_i_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_min3_f32 v0, v0, 1.0, v1
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -357,8 +265,6 @@ define float @v_min3_f32_minimumnum_minimumnum__v_i_v_0(float %a, float %c) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_min3_num_f32 v0, v0, 1.0, v1
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float %a, float 1.0)
@@ -370,48 +276,36 @@ define float @v_min3_f32_minimumnum_minimumnum__v_i_v_1(float %a, float %c) {
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__v_i_v_1:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX6-NEXT: v_min3_f32 v0, v1, v0, 1.0
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__v_i_v_1:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX7-NEXT: v_min3_f32 v0, v1, v0, 1.0
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__v_i_v_1:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX8-NEXT: v_min3_f32 v0, v1, v0, 1.0
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__v_i_v_1:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
; GFX9-NEXT: v_min3_f32 v0, v1, v0, 1.0
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__v_i_v_1:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
; GFX10-NEXT: v_min3_f32 v0, v1, v0, 1.0
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__v_i_v_1:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_min3_f32 v0, v1, v0, 1.0
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -422,8 +316,6 @@ define float @v_min3_f32_minimumnum_minimumnum__v_i_v_1(float %a, float %c) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_min3_num_f32 v0, v1, v0, 1.0
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float %a, float 1.0)
@@ -435,55 +327,37 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_i(float %a, float %b) {
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_i:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_min_f32_e32 v0, 1.0, v0
+; GFX6-NEXT: v_min3_f32 v0, v0, v1, 1.0
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_i:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_min_f32_e32 v0, 1.0, v0
+; GFX7-NEXT: v_min3_f32 v0, v0, v1, 1.0
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_i:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_min_f32_e32 v0, 1.0, v0
+; GFX8-NEXT: v_min3_f32 v0, v0, v1, 1.0
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_i:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_min_f32_e32 v0, 1.0, v0
+; GFX9-NEXT: v_min3_f32 v0, v0, v1, 1.0
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_i:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_min_f32_e32 v0, 1.0, v0
+; GFX10-NEXT: v_min3_f32 v0, v0, v1, 1.0
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_i:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX11-NEXT: v_min_f32_e32 v0, 1.0, v0
+; GFX11-NEXT: v_min3_f32 v0, v0, v1, 1.0
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_i:
@@ -493,10 +367,7 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_i(float %a, float %b) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
-; GFX12-NEXT: v_min_num_f32_e32 v0, 1.0, v0
+; GFX12-NEXT: v_min3_num_f32 v0, v0, v1, 1.0
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float %a, float %b)
%min3 = call float @llvm.minimumnum.f32(float %tmp0, float 1.0)
@@ -507,8 +378,6 @@ define float @v_min3_f32_minimumnum_minimumnum__v_k_v(float %a, float %c) {
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__v_k_v:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX6-NEXT: s_mov_b32 s4, 0x41000000
; GFX6-NEXT: v_min3_f32 v0, v0, s4, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
@@ -516,8 +385,6 @@ define float @v_min3_f32_minimumnum_minimumnum__v_k_v(float %a, float %c) {
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__v_k_v:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX7-NEXT: s_mov_b32 s4, 0x41000000
; GFX7-NEXT: v_min3_f32 v0, v0, s4, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
@@ -525,8 +392,6 @@ define float @v_min3_f32_minimumnum_minimumnum__v_k_v(float %a, float %c) {
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__v_k_v:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
; GFX8-NEXT: s_mov_b32 s4, 0x41000000
; GFX8-NEXT: v_min3_f32 v0, v0, s4, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
@@ -534,8 +399,6 @@ define float @v_min3_f32_minimumnum_minimumnum__v_k_v(float %a, float %c) {
; GFX900-SDAG-LABEL: v_min3_f32_minimumnum_minimumnum__v_k_v:
; GFX900-SDAG: ; %bb.0:
; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX900-SDAG-NEXT: v_max_f32_e32 v1, v1, v1
; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x41000000
; GFX900-SDAG-NEXT: v_min3_f32 v0, v0, s4, v1
; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]
@@ -543,8 +406,6 @@ define float @v_min3_f32_minimumnum_minimumnum__v_k_v(float %a, float %c) {
; GFX950-SDAG-LABEL: v_min3_f32_minimumnum_minimumnum__v_k_v:
; GFX950-SDAG: ; %bb.0:
; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX950-SDAG-NEXT: v_max_f32_e32 v1, v1, v1
; GFX950-SDAG-NEXT: s_mov_b32 s0, 0x41000000
; GFX950-SDAG-NEXT: v_min3_f32 v0, v0, s0, v1
; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31]
@@ -552,16 +413,12 @@ define float @v_min3_f32_minimumnum_minimumnum__v_k_v(float %a, float %c) {
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__v_k_v:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
; GFX10-NEXT: v_min3_f32 v0, v0, 0x41000000, v1
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__v_k_v:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_min3_f32 v0, v0, 0x41000000, v1
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -572,8 +429,6 @@ define float @v_min3_f32_minimumnum_minimumnum__v_k_v(float %a, float %c) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_min3_num_f32 v0, v0, 0x41000000, v1
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float %a, float 8.0)
@@ -585,55 +440,48 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_k(float %a, float %b) {
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_k:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_min_f32_e32 v0, 0x41000000, v0
+; GFX6-NEXT: s_mov_b32 s4, 0x41000000
+; GFX6-NEXT: v_min3_f32 v0, v0, v1, s4
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_k:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_min_f32_e32 v0, 0x41000000, v0
+; GFX7-NEXT: s_mov_b32 s4, 0x41000000
+; GFX7-NEXT: v_min3_f32 v0, v0, v1, s4
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_k:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_min_f32_e32 v0, 0x41000000, v0
+; GFX8-NEXT: s_mov_b32 s4, 0x41000000
+; GFX8-NEXT: v_min3_f32 v0, v0, v1, s4
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
-; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_k:
-; GFX9: ; %bb.0:
-; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_min_f32_e32 v0, 0x41000000, v0
-; GFX9-NEXT: s_setpc_b64 s[30:31]
+; GFX900-SDAG-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_k:
+; GFX900-SDAG: ; %bb.0:
+; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX900-SDAG-NEXT: s_mov_b32 s4, 0x41000000
+; GFX900-SDAG-NEXT: v_min3_f32 v0, v0, v1, s4
+; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]
+;
+; GFX950-SDAG-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_k:
+; GFX950-SDAG: ; %bb.0:
+; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
+; GFX950-SDAG-NEXT: s_mov_b32 s0, 0x41000000
+; GFX950-SDAG-NEXT: v_min3_f32 v0, v0, v1, s0
+; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_k:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_min_f32_e32 v0, 0x41000000, v0
+; GFX10-NEXT: v_min3_f32 v0, v0, v1, 0x41000000
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_k:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX11-NEXT: v_min_f32_e32 v0, 0x41000000, v0
+; GFX11-NEXT: v_min3_f32 v0, v0, v1, 0x41000000
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_k:
@@ -643,10 +491,7 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_k(float %a, float %b) {
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
-; GFX12-NEXT: v_min_num_f32_e32 v0, 0x41000000, v0
+; GFX12-NEXT: v_min3_num_f32 v0, v0, v1, 0x41000000
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float %a, float %b)
%min3 = call float @llvm.minimumnum.f32(float %tmp0, float 8.0)
@@ -657,71 +502,43 @@ define float @v_min3_f32_minimumnum_minimumnum__s_v_v(float inreg %a, float %b,
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_v:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e64 v2, 1.0, s16
-; GFX6-NEXT: v_min_f32_e32 v0, v2, v0
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_min3_f32 v0, s16, v0, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_v:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e64 v2, 1.0, s16
-; GFX7-NEXT: v_min_f32_e32 v0, v2, v0
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_min3_f32 v0, s16, v0, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_v:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e64 v2, 1.0, s16
-; GFX8-NEXT: v_min_f32_e32 v0, v2, v0
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_min3_f32 v0, s16, v0, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX900-SDAG-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_v:
; GFX900-SDAG: ; %bb.0:
; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX900-SDAG-NEXT: v_max_f32_e64 v2, s16, s16
-; GFX900-SDAG-NEXT: v_min_f32_e32 v0, v2, v0
-; GFX900-SDAG-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX900-SDAG-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX900-SDAG-NEXT: v_min3_f32 v0, s16, v0, v1
; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX950-SDAG-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_v:
; GFX950-SDAG: ; %bb.0:
; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX950-SDAG-NEXT: v_max_f32_e64 v2, s0, s0
-; GFX950-SDAG-NEXT: v_min_f32_e32 v0, v2, v0
-; GFX950-SDAG-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX950-SDAG-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX950-SDAG-NEXT: v_min3_f32 v0, s0, v0, v1
; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_v:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v2, s16, s16
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_min_f32_e32 v0, v2, v0
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_min3_f32 v0, s16, v0, v1
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_v:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v2, s0, s0
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_min_f32_e32 v0, v2, v0
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_min3_f32 v0, s0, v0, v1
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_v:
@@ -731,11 +548,7 @@ define float @v_min3_f32_minimumnum_minimumnum__s_v_v(float inreg %a, float %b,
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v2, s0, s0
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_min_num_f32_e32 v0, v2, v0
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_min3_num_f32 v0, s0, v0, v1
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float %a, float %b)
%min3 = call float @llvm.minimumnum.f32(float %tmp0, float %c)
@@ -746,71 +559,48 @@ define float @v_min3_f32_minimumnum_minimumnum__s_s_v(float inreg %a, float inre
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_v:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s17
-; GFX6-NEXT: v_mul_f32_e64 v2, 1.0, s16
-; GFX6-NEXT: v_min_f32_e32 v1, v2, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_min_f32_e32 v0, v1, v0
+; GFX6-NEXT: v_mov_b32_e32 v1, s17
+; GFX6-NEXT: v_min3_f32 v0, s16, v1, v0
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_v:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s17
-; GFX7-NEXT: v_mul_f32_e64 v2, 1.0, s16
-; GFX7-NEXT: v_min_f32_e32 v1, v2, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_min_f32_e32 v0, v1, v0
+; GFX7-NEXT: v_mov_b32_e32 v1, s17
+; GFX7-NEXT: v_min3_f32 v0, s16, v1, v0
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_v:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s17
-; GFX8-NEXT: v_mul_f32_e64 v2, 1.0, s16
-; GFX8-NEXT: v_min_f32_e32 v1, v2, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_min_f32_e32 v0, v1, v0
+; GFX8-NEXT: v_mov_b32_e32 v1, s17
+; GFX8-NEXT: v_min3_f32 v0, s16, v1, v0
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX900-SDAG-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_v:
; GFX900-SDAG: ; %bb.0:
; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s17, s17
-; GFX900-SDAG-NEXT: v_max_f32_e64 v2, s16, s16
-; GFX900-SDAG-NEXT: v_min_f32_e32 v1, v2, v1
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX900-SDAG-NEXT: v_min_f32_e32 v0, v1, v0
+; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, s17
+; GFX900-SDAG-NEXT: v_min3_f32 v0, s16, v1, v0
; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX950-SDAG-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_v:
; GFX950-SDAG: ; %bb.0:
; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s1, s1
-; GFX950-SDAG-NEXT: v_max_f32_e64 v2, s0, s0
-; GFX950-SDAG-NEXT: v_min_f32_e32 v1, v2, v1
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX950-SDAG-NEXT: v_min_f32_e32 v0, v1, v0
+; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, s1
+; GFX950-SDAG-NEXT: v_min3_f32 v0, s0, v1, v0
; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_v:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v1, s17, s17
-; GFX10-NEXT: v_max_f32_e64 v2, s16, s16
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_min_f32_e32 v1, v2, v1
-; GFX10-NEXT: v_min_f32_e32 v0, v1, v0
+; GFX10-NEXT: v_min3_f32 v0, s16, s17, v0
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_v:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v1, s1, s1
-; GFX11-NEXT: v_max_f32_e64 v2, s0, s0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_min_f32 v1, v2, v1
-; GFX11-NEXT: v_min_f32_e32 v0, v1, v0
+; GFX11-NEXT: v_min3_f32 v0, s0, s1, v0
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_v:
@@ -820,11 +610,7 @@ define float @v_min3_f32_minimumnum_minimumnum__s_s_v(float inreg %a, float inre
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v1, s1, s1
-; GFX12-NEXT: v_max_num_f32_e64 v2, s0, s0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_min_num_f32 v1, v2, v1
-; GFX12-NEXT: v_min_num_f32_e32 v0, v1, v0
+; GFX12-NEXT: v_min3_num_f32 v0, s0, s1, v0
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float %a, float %b)
%min3 = call float @llvm.minimumnum.f32(float %tmp0, float %c)
@@ -835,72 +621,48 @@ define float @v_min3_f32_minimumnum_minimumnum__s_v_s(float inreg %a, float %b,
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_s:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s16
-; GFX6-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s17
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_mov_b32_e32 v1, s17
+; GFX6-NEXT: v_min3_f32 v0, s16, v0, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_s:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s16
-; GFX7-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s17
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_mov_b32_e32 v1, s17
+; GFX7-NEXT: v_min3_f32 v0, s16, v0, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_s:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s16
-; GFX8-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s17
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_mov_b32_e32 v1, s17
+; GFX8-NEXT: v_min3_f32 v0, s16, v0, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX900-SDAG-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_s:
; GFX900-SDAG: ; %bb.0:
; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX900-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s16, s16
-; GFX900-SDAG-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s17, s17
-; GFX900-SDAG-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, s17
+; GFX900-SDAG-NEXT: v_min3_f32 v0, s16, v0, v1
; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX950-SDAG-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_s:
; GFX950-SDAG: ; %bb.0:
; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-SDAG-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX950-SDAG-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s1, s1
-; GFX950-SDAG-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, s1
+; GFX950-SDAG-NEXT: v_min3_f32 v0, s0, v0, v1
; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_s:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v1, s16, s16
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX10-NEXT: v_max_f32_e64 v1, s17, s17
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_min3_f32 v0, s16, v0, s17
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_s:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX11-NEXT: v_max_f32_e64 v1, s1, s1
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_min3_f32 v0, s0, v0, s1
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_minimumnum_minimumnum__s_v_s:
@@ -910,12 +672,7 @@ define float @v_min3_f32_minimumnum_minimumnum__s_v_s(float inreg %a, float %b,
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v1, s0, s0
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_min_num_f32_e32 v0, v1, v0
-; GFX12-NEXT: v_max_num_f32_e64 v1, s1, s1
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_min3_num_f32 v0, s0, v0, s1
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float %a, float %b)
%min3 = call float @llvm.minimumnum.f32(float %tmp0, float %c)
@@ -926,72 +683,56 @@ define float @v_min3_f32_minimumnum_minimumnum__s_s_s(float inreg %a, float inre
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e64 v0, 1.0, s17
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s16
-; GFX6-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s18
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_mov_b32_e32 v0, s17
+; GFX6-NEXT: v_mov_b32_e32 v1, s18
+; GFX6-NEXT: v_min3_f32 v0, s16, v0, v1
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e64 v0, 1.0, s17
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s16
-; GFX7-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s18
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_mov_b32_e32 v0, s17
+; GFX7-NEXT: v_mov_b32_e32 v1, s18
+; GFX7-NEXT: v_min3_f32 v0, s16, v0, v1
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e64 v0, 1.0, s17
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s16
-; GFX8-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s18
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_mov_b32_e32 v0, s17
+; GFX8-NEXT: v_mov_b32_e32 v1, s18
+; GFX8-NEXT: v_min3_f32 v0, s16, v0, v1
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX900-SDAG-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX900-SDAG: ; %bb.0:
; GFX900-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX900-SDAG-NEXT: v_max_f32_e64 v0, s17, s17
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s16, s16
-; GFX900-SDAG-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s18, s18
-; GFX900-SDAG-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX900-SDAG-NEXT: v_mov_b32_e32 v0, s17
+; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, s18
+; GFX900-SDAG-NEXT: v_min3_f32 v0, s16, v0, v1
; GFX900-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX950-SDAG-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX950-SDAG: ; %bb.0:
; GFX950-SDAG-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX950-SDAG-NEXT: v_max_f32_e64 v0, s1, s1
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX950-SDAG-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s2, s2
-; GFX950-SDAG-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, s1
+; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, s2
+; GFX950-SDAG-NEXT: v_min3_f32 v0, s0, v0, v1
; GFX950-SDAG-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v0, s17, s17
-; GFX10-NEXT: v_max_f32_e64 v1, s16, s16
-; GFX10-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX10-NEXT: v_max_f32_e64 v1, s18, s18
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_mov_b32_e32 v0, s18
+; GFX10-NEXT: v_min3_f32 v0, s16, s17, v0
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v0, s1, s1
-; GFX11-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX11-NEXT: v_max_f32_e64 v1, s2, s2
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_mov_b32_e32 v0, s2
+; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX11-NEXT: v_min3_f32 v0, s0, s1, v0
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_minimumnum_minimumnum__s_s_s:
@@ -1001,12 +742,9 @@ define float @v_min3_f32_minimumnum_minimumnum__s_s_s(float inreg %a, float inre
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v0, s1, s1
-; GFX12-NEXT: v_max_num_f32_e64 v1, s0, s0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_min_num_f32_e32 v0, v1, v0
-; GFX12-NEXT: v_max_num_f32_e64 v1, s2, s2
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_mov_b32_e32 v0, s2
+; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX12-NEXT: v_min3_num_f32 v0, s0, s1, v0
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float %a, float %b)
%min3 = call float @llvm.minimumnum.f32(float %tmp0, float %c)
@@ -1016,86 +754,65 @@ define float @v_min3_f32_minimumnum_minimumnum__s_s_s(float inreg %a, float inre
define amdgpu_ps i32 @s_min3_f32_minimumnum_minimumnum__s_s_s(float inreg %a, float inreg %b, float inreg %c) {
; GFX6-LABEL: s_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX6: ; %bb.0:
-; GFX6-NEXT: v_mul_f32_e64 v0, 1.0, s1
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s0
-; GFX6-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX6-NEXT: v_mul_f32_e64 v1, 1.0, s2
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_mov_b32_e32 v0, s1
+; GFX6-NEXT: v_mov_b32_e32 v1, s2
+; GFX6-NEXT: v_min3_f32 v0, s0, v0, v1
; GFX6-NEXT: v_readfirstlane_b32 s0, v0
; GFX6-NEXT: ; return to shader part epilog
;
; GFX7-LABEL: s_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX7: ; %bb.0:
-; GFX7-NEXT: v_mul_f32_e64 v0, 1.0, s1
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s0
-; GFX7-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX7-NEXT: v_mul_f32_e64 v1, 1.0, s2
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_mov_b32_e32 v0, s1
+; GFX7-NEXT: v_mov_b32_e32 v1, s2
+; GFX7-NEXT: v_min3_f32 v0, s0, v0, v1
; GFX7-NEXT: v_readfirstlane_b32 s0, v0
; GFX7-NEXT: ; return to shader part epilog
;
; GFX8-LABEL: s_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX8: ; %bb.0:
-; GFX8-NEXT: v_mul_f32_e64 v0, 1.0, s1
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s0
-; GFX8-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX8-NEXT: v_mul_f32_e64 v1, 1.0, s2
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_mov_b32_e32 v0, s1
+; GFX8-NEXT: v_mov_b32_e32 v1, s2
+; GFX8-NEXT: v_min3_f32 v0, s0, v0, v1
; GFX8-NEXT: v_readfirstlane_b32 s0, v0
; GFX8-NEXT: ; return to shader part epilog
;
; GFX900-SDAG-LABEL: s_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX900-SDAG: ; %bb.0:
-; GFX900-SDAG-NEXT: v_max_f32_e64 v0, s1, s1
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX900-SDAG-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX900-SDAG-NEXT: v_max_f32_e64 v1, s2, s2
-; GFX900-SDAG-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX900-SDAG-NEXT: v_mov_b32_e32 v0, s1
+; GFX900-SDAG-NEXT: v_mov_b32_e32 v1, s2
+; GFX900-SDAG-NEXT: v_min3_f32 v0, s0, v0, v1
; GFX900-SDAG-NEXT: v_readfirstlane_b32 s0, v0
; GFX900-SDAG-NEXT: ; return to shader part epilog
;
; GFX950-SDAG-LABEL: s_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX950-SDAG: ; %bb.0:
-; GFX950-SDAG-NEXT: v_max_f32_e64 v0, s1, s1
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX950-SDAG-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX950-SDAG-NEXT: v_max_f32_e64 v1, s2, s2
-; GFX950-SDAG-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX950-SDAG-NEXT: v_mov_b32_e32 v0, s1
+; GFX950-SDAG-NEXT: v_mov_b32_e32 v1, s2
+; GFX950-SDAG-NEXT: v_min3_f32 v0, s0, v0, v1
; GFX950-SDAG-NEXT: s_nop 0
; GFX950-SDAG-NEXT: v_readfirstlane_b32 s0, v0
; GFX950-SDAG-NEXT: ; return to shader part epilog
;
; GFX10-LABEL: s_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX10: ; %bb.0:
-; GFX10-NEXT: v_max_f32_e64 v0, s1, s1
-; GFX10-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX10-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX10-NEXT: v_max_f32_e64 v1, s2, s2
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_mov_b32_e32 v0, s2
+; GFX10-NEXT: v_min3_f32 v0, s0, s1, v0
; GFX10-NEXT: v_readfirstlane_b32 s0, v0
; GFX10-NEXT: ; return to shader part epilog
;
; GFX11-LABEL: s_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX11: ; %bb.0:
-; GFX11-NEXT: v_max_f32_e64 v0, s1, s1
-; GFX11-NEXT: v_max_f32_e64 v1, s0, s0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_min_f32_e32 v0, v1, v0
-; GFX11-NEXT: v_max_f32_e64 v1, s2, s2
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX11-NEXT: v_mov_b32_e32 v0, s2
+; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX11-NEXT: v_min3_f32 v0, s0, s1, v0
; GFX11-NEXT: v_readfirstlane_b32 s0, v0
; GFX11-NEXT: ; return to shader part epilog
;
; GFX12-LABEL: s_min3_f32_minimumnum_minimumnum__s_s_s:
; GFX12: ; %bb.0:
-; GFX12-NEXT: v_max_num_f32_e64 v0, s1, s1
-; GFX12-NEXT: v_max_num_f32_e64 v1, s0, s0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_min_num_f32_e32 v0, v1, v0
-; GFX12-NEXT: v_max_num_f32_e64 v1, s2, s2
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
+; GFX12-NEXT: v_mov_b32_e32 v0, s2
+; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
+; GFX12-NEXT: v_min3_num_f32 v0, s0, s1, v0
; GFX12-NEXT: v_readfirstlane_b32 s0, v0
; GFX12-NEXT: s_wait_alu 0xf1ff
; GFX12-NEXT: ; return to shader part epilog
@@ -1160,43 +877,36 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan0(float %a, float %
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v2, 1.0, v2
; GFX6-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v2, 1.0, v2
; GFX7-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v2
; GFX8-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v2, v2, v2
; GFX9-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v2, v2, v2
; GFX10-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e32 v2, v2, v2
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -1207,8 +917,6 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan0(float %a, float %
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e32 v2, v2, v2
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_min3_num_f32 v0, v0, v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call nnan float @llvm.minimumnum.f32(float %a, float %b)
@@ -1220,48 +928,36 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan1(float %a, float %
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan1:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
; GFX6-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan1:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
; GFX7-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan1:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
; GFX8-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan1:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
; GFX9-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan1:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
; GFX10-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan1:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX11-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
@@ -1272,8 +968,6 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_v_0__nnan1(float %a, float %
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
; GFX12-NEXT: v_min3_num_f32 v0, v0, v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call float @llvm.minimumnum.f32(float %a, float %b)
@@ -1285,88 +979,43 @@ define <2 x float> @v_min3_v2f32_minimumnum_minimumnum__v_v_v_0(<2 x float> %a,
; GFX6-LABEL: v_min3_v2f32_minimumnum_minimumnum__v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v2, 1.0, v2
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v3, 1.0, v3
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX6-NEXT: v_mul_f32_e32 v2, 1.0, v4
-; GFX6-NEXT: v_min_f32_e32 v1, v1, v3
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX6-NEXT: v_mul_f32_e32 v2, 1.0, v5
-; GFX6-NEXT: v_min_f32_e32 v1, v1, v2
+; GFX6-NEXT: v_min3_f32 v0, v0, v2, v4
+; GFX6-NEXT: v_min3_f32 v1, v1, v3, v5
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_v2f32_minimumnum_minimumnum__v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v2, 1.0, v2
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v3, 1.0, v3
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX7-NEXT: v_mul_f32_e32 v2, 1.0, v4
-; GFX7-NEXT: v_min_f32_e32 v1, v1, v3
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX7-NEXT: v_mul_f32_e32 v2, 1.0, v5
-; GFX7-NEXT: v_min_f32_e32 v1, v1, v2
+; GFX7-NEXT: v_min3_f32 v0, v0, v2, v4
+; GFX7-NEXT: v_min3_f32 v1, v1, v3, v5
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_v2f32_minimumnum_minimumnum__v_v_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v2
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v3, 1.0, v3
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v4
-; GFX8-NEXT: v_min_f32_e32 v1, v1, v3
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX8-NEXT: v_mul_f32_e32 v2, 1.0, v5
-; GFX8-NEXT: v_min_f32_e32 v1, v1, v2
+; GFX8-NEXT: v_min3_f32 v0, v0, v2, v4
+; GFX8-NEXT: v_min3_f32 v1, v1, v3, v5
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_v2f32_minimumnum_minimumnum__v_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v2, v2, v2
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_max_f32_e32 v3, v3, v3
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX9-NEXT: v_max_f32_e32 v2, v4, v4
-; GFX9-NEXT: v_min_f32_e32 v1, v1, v3
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX9-NEXT: v_max_f32_e32 v2, v5, v5
-; GFX9-NEXT: v_min_f32_e32 v1, v1, v2
+; GFX9-NEXT: v_min3_f32 v0, v0, v2, v4
+; GFX9-NEXT: v_min3_f32 v1, v1, v3, v5
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_v2f32_minimumnum_minimumnum__v_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v2, v2, v2
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_max_f32_e32 v3, v3, v3
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX10-NEXT: v_max_f32_e32 v2, v4, v4
-; GFX10-NEXT: v_max_f32_e32 v4, v5, v5
-; GFX10-NEXT: v_min_f32_e32 v1, v1, v3
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX10-NEXT: v_min_f32_e32 v1, v1, v4
+; GFX10-NEXT: v_min3_f32 v0, v0, v2, v4
+; GFX10-NEXT: v_min3_f32 v1, v1, v3, v5
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_v2f32_minimumnum_minimumnum__v_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v2, v2, v2 :: v_dual_max_f32 v3, v3, v3
-; GFX11-NEXT: v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_min_f32 v0, v0, v2 :: v_dual_min_f32 v1, v1, v3
-; GFX11-NEXT: v_max_f32_e32 v2, v4, v4
-; GFX11-NEXT: v_max_f32_e32 v4, v5, v5
-; GFX11-NEXT: v_dual_min_f32 v0, v0, v2 :: v_dual_min_f32 v1, v1, v4
+; GFX11-NEXT: v_min3_f32 v0, v0, v2, v4
+; GFX11-NEXT: v_min3_f32 v1, v1, v3, v5
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_v2f32_minimumnum_minimumnum__v_v_v_0:
@@ -1376,13 +1025,8 @@ define <2 x float> @v_min3_v2f32_minimumnum_minimumnum__v_v_v_0(<2 x float> %a,
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v2, v2, v2 :: v_dual_max_num_f32 v3, v3, v3
-; GFX12-NEXT: v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v2 :: v_dual_min_num_f32 v1, v1, v3
-; GFX12-NEXT: v_max_num_f32_e32 v2, v4, v4
-; GFX12-NEXT: v_max_num_f32_e32 v4, v5, v5
-; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v2 :: v_dual_min_num_f32 v1, v1, v4
+; GFX12-NEXT: v_min3_num_f32 v0, v0, v2, v4
+; GFX12-NEXT: v_min3_num_f32 v1, v1, v3, v5
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call <2 x float> @llvm.minimumnum.v2f32(<2 x float> %a, <2 x float> %b)
%min3 = call <2 x float> @llvm.minimumnum.v2f32(<2 x float> %tmp0, <2 x float> %c)
@@ -1393,27 +1037,25 @@ define half @v_min3_f16_minimumnum_minimumnum__v_v_v_0(half %a, half %b, half %c
; GFX6-LABEL: v_min3_f16_minimumnum_minimumnum__v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
-; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
+; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v2
+; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX6-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f16_minimumnum_minimumnum__v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
-; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
+; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v2
+; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX7-NEXT: v_min3_f32 v0, v0, v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f16_minimumnum_minimumnum__v_v_v_0:
@@ -1429,32 +1071,19 @@ define half @v_min3_f16_minimumnum_minimumnum__v_v_v_0(half %a, half %b, half %c
; GFX9-LABEL: v_min3_f16_minimumnum_minimumnum__v_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f16_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f16_e32 v0, v0, v0
-; GFX9-NEXT: v_min_f16_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f16_e32 v1, v2, v2
-; GFX9-NEXT: v_min_f16_e32 v0, v0, v1
+; GFX9-NEXT: v_min3_f16 v0, v0, v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f16_minimumnum_minimumnum__v_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f16_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f16_e32 v0, v0, v0
-; GFX10-NEXT: v_min_f16_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f16_e32 v1, v2, v2
-; GFX10-NEXT: v_min_f16_e32 v0, v0, v1
+; GFX10-NEXT: v_min3_f16 v0, v0, v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f16_minimumnum_minimumnum__v_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f16_e32 v1, v1, v1
-; GFX11-NEXT: v_max_f16_e32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_min_f16_e32 v0, v0, v1
-; GFX11-NEXT: v_max_f16_e32 v1, v2, v2
-; GFX11-NEXT: v_min_f16_e32 v0, v0, v1
+; GFX11-NEXT: v_min3_f16 v0, v0, v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f16_minimumnum_minimumnum__v_v_v_0:
@@ -1464,12 +1093,7 @@ define half @v_min3_f16_minimumnum_minimumnum__v_v_v_0(half %a, half %b, half %c
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f16_e32 v1, v1, v1
-; GFX12-NEXT: v_max_num_f16_e32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_min_num_f16_e32 v0, v0, v1
-; GFX12-NEXT: v_max_num_f16_e32 v1, v2, v2
-; GFX12-NEXT: v_min_num_f16_e32 v0, v0, v1
+; GFX12-NEXT: v_min3_num_f16 v0, v0, v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%tmp0 = call half @llvm.minimumnum.f16(half %a, half %b)
%min3 = call half @llvm.minimumnum.f16(half %tmp0, half %c)
@@ -1480,43 +1104,39 @@ define <2 x half> @v_min3_v2f16_minimumnum_minimumnum__v_v_v_0(<2 x half> %a, <2
; GFX6-LABEL: v_min3_v2f16_minimumnum_minimumnum__v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
-; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3
-; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
; GFX6-NEXT: v_cvt_f16_f32_e32 v5, v5
+; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3
; GFX6-NEXT: v_cvt_f16_f32_e32 v4, v4
-; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
+; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
+; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
+; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5
; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3
-; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
; GFX6-NEXT: v_cvt_f32_f16_e32 v4, v4
-; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5
-; GFX6-NEXT: v_min_f32_e32 v1, v1, v3
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v4
-; GFX6-NEXT: v_min_f32_e32 v1, v1, v5
+; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
+; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX6-NEXT: v_min3_f32 v0, v0, v2, v4
+; GFX6-NEXT: v_min3_f32 v1, v1, v3, v5
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_v2f16_minimumnum_minimumnum__v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
-; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3
-; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
; GFX7-NEXT: v_cvt_f16_f32_e32 v5, v5
+; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3
; GFX7-NEXT: v_cvt_f16_f32_e32 v4, v4
-; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
+; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
+; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
+; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5
; GFX7-NEXT: v_cvt_f32_f16_e32 v3, v3
-; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
; GFX7-NEXT: v_cvt_f32_f16_e32 v4, v4
-; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5
-; GFX7-NEXT: v_min_f32_e32 v1, v1, v3
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v4
-; GFX7-NEXT: v_min_f32_e32 v1, v1, v5
+; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
+; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX7-NEXT: v_min3_f32 v0, v0, v2, v4
+; GFX7-NEXT: v_min3_f32 v1, v1, v3, v5
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_v2f16_minimumnum_minimumnum__v_v_v_0:
@@ -1601,59 +1221,53 @@ define <3 x half> @v_min3_v3f16_minimumnum_minimumnum__v_v_v_0(<3 x half> %a, <3
; GFX6-LABEL: v_min3_v3f16_minimumnum_minimumnum__v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3
-; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
-; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
-; GFX6-NEXT: v_cvt_f16_f32_e32 v5, v5
-; GFX6-NEXT: v_cvt_f16_f32_e32 v4, v4
; GFX6-NEXT: v_cvt_f16_f32_e32 v8, v8
+; GFX6-NEXT: v_cvt_f16_f32_e32 v5, v5
; GFX6-NEXT: v_cvt_f16_f32_e32 v7, v7
+; GFX6-NEXT: v_cvt_f16_f32_e32 v4, v4
+; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
; GFX6-NEXT: v_cvt_f16_f32_e32 v6, v6
-; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
-; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
-; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5
-; GFX6-NEXT: v_cvt_f32_f16_e32 v4, v4
-; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3
+; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3
+; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
+; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
; GFX6-NEXT: v_cvt_f32_f16_e32 v8, v8
+; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5
; GFX6-NEXT: v_cvt_f32_f16_e32 v7, v7
+; GFX6-NEXT: v_cvt_f32_f16_e32 v4, v4
; GFX6-NEXT: v_cvt_f32_f16_e32 v6, v6
-; GFX6-NEXT: v_min_f32_e32 v2, v2, v5
-; GFX6-NEXT: v_min_f32_e32 v1, v1, v4
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v3
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v6
-; GFX6-NEXT: v_min_f32_e32 v1, v1, v7
-; GFX6-NEXT: v_min_f32_e32 v2, v2, v8
+; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3
+; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
+; GFX6-NEXT: v_min3_f32 v0, v0, v3, v6
+; GFX6-NEXT: v_min3_f32 v1, v1, v4, v7
+; GFX6-NEXT: v_min3_f32 v2, v2, v5, v8
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_v3f16_minimumnum_minimumnum__v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3
-; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
-; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
-; GFX7-NEXT: v_cvt_f16_f32_e32 v5, v5
-; GFX7-NEXT: v_cvt_f16_f32_e32 v4, v4
; GFX7-NEXT: v_cvt_f16_f32_e32 v8, v8
+; GFX7-NEXT: v_cvt_f16_f32_e32 v5, v5
; GFX7-NEXT: v_cvt_f16_f32_e32 v7, v7
+; GFX7-NEXT: v_cvt_f16_f32_e32 v4, v4
+; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
; GFX7-NEXT: v_cvt_f16_f32_e32 v6, v6
-; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
-; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
-; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5
-; GFX7-NEXT: v_cvt_f32_f16_e32 v4, v4
-; GFX7-NEXT: v_cvt_f32_f16_e32 v3, v3
+; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3
+; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
+; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
; GFX7-NEXT: v_cvt_f32_f16_e32 v8, v8
+; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5
; GFX7-NEXT: v_cvt_f32_f16_e32 v7, v7
+; GFX7-NEXT: v_cvt_f32_f16_e32 v4, v4
; GFX7-NEXT: v_cvt_f32_f16_e32 v6, v6
-; GFX7-NEXT: v_min_f32_e32 v2, v2, v5
-; GFX7-NEXT: v_min_f32_e32 v1, v1, v4
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v3
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v6
-; GFX7-NEXT: v_min_f32_e32 v1, v1, v7
-; GFX7-NEXT: v_min_f32_e32 v2, v2, v8
+; GFX7-NEXT: v_cvt_f32_f16_e32 v3, v3
+; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
+; GFX7-NEXT: v_min3_f32 v0, v0, v3, v6
+; GFX7-NEXT: v_min3_f32 v1, v1, v4, v7
+; GFX7-NEXT: v_min3_f32 v2, v2, v5, v8
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_v3f16_minimumnum_minimumnum__v_v_v_0:
@@ -1769,75 +1383,67 @@ define <4 x half> @v_min3_v4f16_minimumnum_minimumnum__v_v_v_0(<4 x half> %a, <4
; GFX6-LABEL: v_min3_v4f16_minimumnum_minimumnum__v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
-; GFX6-NEXT: v_cvt_f16_f32_e32 v4, v4
-; GFX6-NEXT: v_cvt_f16_f32_e32 v5, v5
-; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
-; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3
-; GFX6-NEXT: v_cvt_f16_f32_e32 v7, v7
-; GFX6-NEXT: v_cvt_f16_f32_e32 v6, v6
; GFX6-NEXT: v_cvt_f16_f32_e32 v11, v11
+; GFX6-NEXT: v_cvt_f16_f32_e32 v7, v7
; GFX6-NEXT: v_cvt_f16_f32_e32 v10, v10
+; GFX6-NEXT: v_cvt_f16_f32_e32 v3, v3
+; GFX6-NEXT: v_cvt_f16_f32_e32 v6, v6
; GFX6-NEXT: v_cvt_f16_f32_e32 v9, v9
+; GFX6-NEXT: v_cvt_f16_f32_e32 v5, v5
+; GFX6-NEXT: v_cvt_f16_f32_e32 v2, v2
; GFX6-NEXT: v_cvt_f16_f32_e32 v8, v8
-; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
-; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
-; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3
-; GFX6-NEXT: v_cvt_f32_f16_e32 v7, v7
-; GFX6-NEXT: v_cvt_f32_f16_e32 v6, v6
-; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5
-; GFX6-NEXT: v_cvt_f32_f16_e32 v4, v4
+; GFX6-NEXT: v_cvt_f16_f32_e32 v4, v4
+; GFX6-NEXT: v_cvt_f16_f32_e32 v0, v0
+; GFX6-NEXT: v_cvt_f16_f32_e32 v1, v1
; GFX6-NEXT: v_cvt_f32_f16_e32 v11, v11
+; GFX6-NEXT: v_cvt_f32_f16_e32 v7, v7
; GFX6-NEXT: v_cvt_f32_f16_e32 v10, v10
+; GFX6-NEXT: v_cvt_f32_f16_e32 v6, v6
; GFX6-NEXT: v_cvt_f32_f16_e32 v9, v9
+; GFX6-NEXT: v_cvt_f32_f16_e32 v5, v5
; GFX6-NEXT: v_cvt_f32_f16_e32 v8, v8
-; GFX6-NEXT: v_min_f32_e32 v3, v3, v7
-; GFX6-NEXT: v_min_f32_e32 v2, v2, v6
-; GFX6-NEXT: v_min_f32_e32 v1, v1, v5
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v4
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v8
-; GFX6-NEXT: v_min_f32_e32 v1, v1, v9
-; GFX6-NEXT: v_min_f32_e32 v2, v2, v10
-; GFX6-NEXT: v_min_f32_e32 v3, v3, v11
+; GFX6-NEXT: v_cvt_f32_f16_e32 v4, v4
+; GFX6-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX6-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX6-NEXT: v_cvt_f32_f16_e32 v2, v2
+; GFX6-NEXT: v_cvt_f32_f16_e32 v3, v3
+; GFX6-NEXT: v_min3_f32 v0, v0, v4, v8
+; GFX6-NEXT: v_min3_f32 v1, v1, v5, v9
+; GFX6-NEXT: v_min3_f32 v2, v2, v6, v10
+; GFX6-NEXT: v_min3_f32 v3, v3, v7, v11
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_v4f16_minimumnum_minimumnum__v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
-; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
-; GFX7-NEXT: v_cvt_f16_f32_e32 v4, v4
-; GFX7-NEXT: v_cvt_f16_f32_e32 v5, v5
-; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
-; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3
-; GFX7-NEXT: v_cvt_f16_f32_e32 v7, v7
-; GFX7-NEXT: v_cvt_f16_f32_e32 v6, v6
; GFX7-NEXT: v_cvt_f16_f32_e32 v11, v11
+; GFX7-NEXT: v_cvt_f16_f32_e32 v7, v7
; GFX7-NEXT: v_cvt_f16_f32_e32 v10, v10
+; GFX7-NEXT: v_cvt_f16_f32_e32 v3, v3
+; GFX7-NEXT: v_cvt_f16_f32_e32 v6, v6
; GFX7-NEXT: v_cvt_f16_f32_e32 v9, v9
+; GFX7-NEXT: v_cvt_f16_f32_e32 v5, v5
+; GFX7-NEXT: v_cvt_f16_f32_e32 v2, v2
; GFX7-NEXT: v_cvt_f16_f32_e32 v8, v8
-; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
-; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
-; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
-; GFX7-NEXT: v_cvt_f32_f16_e32 v3, v3
-; GFX7-NEXT: v_cvt_f32_f16_e32 v7, v7
-; GFX7-NEXT: v_cvt_f32_f16_e32 v6, v6
-; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5
-; GFX7-NEXT: v_cvt_f32_f16_e32 v4, v4
+; GFX7-NEXT: v_cvt_f16_f32_e32 v4, v4
+; GFX7-NEXT: v_cvt_f16_f32_e32 v0, v0
+; GFX7-NEXT: v_cvt_f16_f32_e32 v1, v1
; GFX7-NEXT: v_cvt_f32_f16_e32 v11, v11
+; GFX7-NEXT: v_cvt_f32_f16_e32 v7, v7
; GFX7-NEXT: v_cvt_f32_f16_e32 v10, v10
+; GFX7-NEXT: v_cvt_f32_f16_e32 v6, v6
; GFX7-NEXT: v_cvt_f32_f16_e32 v9, v9
+; GFX7-NEXT: v_cvt_f32_f16_e32 v5, v5
; GFX7-NEXT: v_cvt_f32_f16_e32 v8, v8
-; GFX7-NEXT: v_min_f32_e32 v3, v3, v7
-; GFX7-NEXT: v_min_f32_e32 v2, v2, v6
-; GFX7-NEXT: v_min_f32_e32 v1, v1, v5
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v4
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v8
-; GFX7-NEXT: v_min_f32_e32 v1, v1, v9
-; GFX7-NEXT: v_min_f32_e32 v2, v2, v10
-; GFX7-NEXT: v_min_f32_e32 v3, v3, v11
+; GFX7-NEXT: v_cvt_f32_f16_e32 v4, v4
+; GFX7-NEXT: v_cvt_f32_f16_e32 v0, v0
+; GFX7-NEXT: v_cvt_f32_f16_e32 v1, v1
+; GFX7-NEXT: v_cvt_f32_f16_e32 v2, v2
+; GFX7-NEXT: v_cvt_f32_f16_e32 v3, v3
+; GFX7-NEXT: v_min3_f32 v0, v0, v4, v8
+; GFX7-NEXT: v_min3_f32 v1, v1, v5, v9
+; GFX7-NEXT: v_min3_f32 v2, v2, v6, v10
+; GFX7-NEXT: v_min3_f32 v3, v3, v7, v11
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_v4f16_minimumnum_minimumnum__v_v_v_0:
@@ -3251,61 +2857,37 @@ define float @v_min3_f32_minimumnum_minimumnum__neg_v_v_v_0(float %a, float %b,
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__neg_v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, -1.0, v0
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_min3_f32 v0, -v0, v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__neg_v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, -1.0, v0
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_min3_f32 v0, -v0, v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__neg_v_v_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, -1.0, v0
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_min3_f32 v0, -v0, v1, v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__neg_v_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e64 v0, -v0, -v0
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX9-NEXT: v_min3_f32 v0, -v0, v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__neg_v_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e64 v0, -v0, -v0
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_min3_f32 v0, -v0, v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__neg_v_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX11-NEXT: v_max_f32_e64 v0, -v0, -v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_min_f32 v0, v0, v1 :: v_dual_max_f32 v1, v2, v2
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_min3_f32 v0, -v0, v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_minimumnum_minimumnum__neg_v_v_v_0:
@@ -3315,11 +2897,7 @@ define float @v_min3_f32_minimumnum_minimumnum__neg_v_v_v_0(float %a, float %b,
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e32 v1, v1, v1
-; GFX12-NEXT: v_max_num_f32_e64 v0, -v0, -v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v1 :: v_dual_max_num_f32 v1, v2, v2
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_min3_num_f32 v0, -v0, v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%neg.a = fneg float %a
%tmp0 = call float @llvm.minimumnum.f32(float %neg.a, float %b)
@@ -3331,61 +2909,37 @@ define float @v_min3_f32_minimumnum_minimumnum__v_neg_v_v_0(float %a, float %b,
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__v_neg_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, -1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_min3_f32 v0, v0, -v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__v_neg_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, -1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_min3_f32 v0, v0, -v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__v_neg_v_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, -1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_min3_f32 v0, v0, -v1, v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__v_neg_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e64 v1, -v1, -v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX9-NEXT: v_min3_f32 v0, v0, -v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__v_neg_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v1, -v1, -v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_min3_f32 v0, v0, -v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__v_neg_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v1, -v1, -v1
-; GFX11-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_min_f32 v0, v0, v1 :: v_dual_max_f32 v1, v2, v2
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_min3_f32 v0, v0, -v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_minimumnum_minimumnum__v_neg_v_v_0:
@@ -3395,11 +2949,7 @@ define float @v_min3_f32_minimumnum_minimumnum__v_neg_v_v_0(float %a, float %b,
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v1, -v1, -v1
-; GFX12-NEXT: v_max_num_f32_e32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v1 :: v_dual_max_num_f32 v1, v2, v2
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_min3_num_f32 v0, v0, -v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%neg.b = fneg float %b
%tmp0 = call float @llvm.minimumnum.f32(float %a, float %neg.b)
@@ -3411,61 +2961,37 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_neg_v_0(float %a, float %b,
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_neg_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e32 v1, -1.0, v2
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_min3_f32 v0, v0, v1, -v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_neg_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e32 v1, -1.0, v2
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_min3_f32 v0, v0, v1, -v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_neg_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e32 v0, 1.0, v0
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e32 v1, -1.0, v2
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_min3_f32 v0, v0, v1, -v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_neg_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e64 v1, -v2, -v2
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX9-NEXT: v_min3_f32 v0, v0, v1, -v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_neg_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e32 v0, v0, v0
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e64 v1, -v2, -v2
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_min3_f32 v0, v0, v1, -v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_neg_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX11-NEXT: v_max_f32_e64 v1, -v2, -v2
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_min3_f32 v0, v0, v1, -v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_minimumnum_minimumnum__v_v_neg_v_0:
@@ -3475,11 +3001,7 @@ define float @v_min3_f32_minimumnum_minimumnum__v_v_neg_v_0(float %a, float %b,
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
-; GFX12-NEXT: v_max_num_f32_e64 v1, -v2, -v2
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_min3_num_f32 v0, v0, v1, -v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%neg.c = fneg float %c
%tmp0 = call float @llvm.minimumnum.f32(float %a, float %b)
@@ -3491,61 +3013,37 @@ define float @v_min3_f32_minimumnum_minimumnum__neg_fabs_v_v_v_0(float %a, float
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_v_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX6-NEXT: v_mul_f32_e64 v0, -1.0, |v0|
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_min3_f32 v0, -|v0|, v1, v2
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_v_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX7-NEXT: v_mul_f32_e64 v0, -1.0, |v0|
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_min3_f32 v0, -|v0|, v1, v2
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_v_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v1
-; GFX8-NEXT: v_mul_f32_e64 v0, -1.0, |v0|
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e32 v1, 1.0, v2
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_min3_f32 v0, -|v0|, v1, v2
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_v_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX9-NEXT: v_max_f32_e64 v0, -|v0|, -|v0|
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX9-NEXT: v_min3_f32 v0, -|v0|, v1, v2
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_v_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX10-NEXT: v_max_f32_e64 v0, -|v0|, -|v0|
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e32 v1, v2, v2
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_min3_f32 v0, -|v0|, v1, v2
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_v_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e32 v1, v1, v1
-; GFX11-NEXT: v_max_f32_e64 v0, -|v0|, -|v0|
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_dual_min_f32 v0, v0, v1 :: v_dual_max_f32 v1, v2, v2
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_min3_f32 v0, -|v0|, v1, v2
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_v_v_0:
@@ -3555,11 +3053,7 @@ define float @v_min3_f32_minimumnum_minimumnum__neg_fabs_v_v_v_0(float %a, float
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e32 v1, v1, v1
-; GFX12-NEXT: v_max_num_f32_e64 v0, -|v0|, -|v0|
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v1 :: v_dual_max_num_f32 v1, v2, v2
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_min3_num_f32 v0, -|v0|, v1, v2
; GFX12-NEXT: s_setpc_b64 s[30:31]
%fabs.a = call float @llvm.fabs.f32(float %a)
%neg.fabs.a = fneg float %fabs.a
@@ -3572,62 +3066,37 @@ define float @v_min3_f32_minimumnum_minimumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v
; GFX6-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e64 v1, -1.0, |v1|
-; GFX6-NEXT: v_mul_f32_e64 v0, -1.0, |v0|
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX6-NEXT: v_mul_f32_e64 v1, -1.0, |v2|
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX6-NEXT: v_min3_f32 v0, -|v0|, -|v1|, -|v2|
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e64 v1, -1.0, |v1|
-; GFX7-NEXT: v_mul_f32_e64 v0, -1.0, |v0|
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX7-NEXT: v_mul_f32_e64 v1, -1.0, |v2|
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX7-NEXT: v_min3_f32 v0, -|v0|, -|v1|, -|v2|
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e64 v1, -1.0, |v1|
-; GFX8-NEXT: v_mul_f32_e64 v0, -1.0, |v0|
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX8-NEXT: v_mul_f32_e64 v1, -1.0, |v2|
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX8-NEXT: v_min3_f32 v0, -|v0|, -|v1|, -|v2|
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e64 v1, -|v1|, -|v1|
-; GFX9-NEXT: v_max_f32_e64 v0, -|v0|, -|v0|
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX9-NEXT: v_max_f32_e64 v1, -|v2|, -|v2|
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX9-NEXT: v_min3_f32 v0, -|v0|, -|v1|, -|v2|
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v1, -|v1|, -|v1|
-; GFX10-NEXT: v_max_f32_e64 v0, -|v0|, -|v0|
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX10-NEXT: v_max_f32_e64 v1, -|v2|, -|v2|
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX10-NEXT: v_min3_f32 v0, -|v0|, -|v1|, -|v2|
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v1, -|v1|, -|v1|
-; GFX11-NEXT: v_max_f32_e64 v0, -|v0|, -|v0|
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
-; GFX11-NEXT: v_max_f32_e64 v1, -|v2|, -|v2|
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v1
+; GFX11-NEXT: v_min3_f32 v0, -|v0|, -|v1|, -|v2|
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_f32_minimumnum_minimumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v_0:
@@ -3637,12 +3106,7 @@ define float @v_min3_f32_minimumnum_minimumnum__neg_fabs_v_neg_fabs_v_neg_fabs_v
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v1, -|v1|, -|v1|
-; GFX12-NEXT: v_max_num_f32_e64 v0, -|v0|, -|v0|
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
-; GFX12-NEXT: v_max_num_f32_e64 v1, -|v2|, -|v2|
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v1
+; GFX12-NEXT: v_min3_num_f32 v0, -|v0|, -|v1|, -|v2|
; GFX12-NEXT: s_setpc_b64 s[30:31]
%fabs.a = call float @llvm.fabs.f32(float %a)
%neg.fabs.a = fneg float %fabs.a
@@ -3922,92 +3386,43 @@ define <2 x float> @v_min3_v2f32_minimumnum_minimumnum__neg_v_neg_v_neg_v_0(<2 x
; GFX6-LABEL: v_min3_v2f32_minimumnum_minimumnum__neg_v_neg_v_neg_v_0:
; GFX6: ; %bb.0:
; GFX6-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX6-NEXT: v_mul_f32_e32 v2, -1.0, v2
-; GFX6-NEXT: v_mul_f32_e32 v0, -1.0, v0
-; GFX6-NEXT: v_mul_f32_e32 v3, -1.0, v3
-; GFX6-NEXT: v_mul_f32_e32 v1, -1.0, v1
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX6-NEXT: v_mul_f32_e32 v2, -1.0, v4
-; GFX6-NEXT: v_min_f32_e32 v1, v1, v3
-; GFX6-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX6-NEXT: v_mul_f32_e32 v2, -1.0, v5
-; GFX6-NEXT: v_min_f32_e32 v1, v1, v2
+; GFX6-NEXT: v_min3_f32 v0, -v0, -v2, -v4
+; GFX6-NEXT: v_min3_f32 v1, -v1, -v3, -v5
; GFX6-NEXT: s_setpc_b64 s[30:31]
;
; GFX7-LABEL: v_min3_v2f32_minimumnum_minimumnum__neg_v_neg_v_neg_v_0:
; GFX7: ; %bb.0:
; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX7-NEXT: v_mul_f32_e32 v2, -1.0, v2
-; GFX7-NEXT: v_mul_f32_e32 v0, -1.0, v0
-; GFX7-NEXT: v_mul_f32_e32 v3, -1.0, v3
-; GFX7-NEXT: v_mul_f32_e32 v1, -1.0, v1
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX7-NEXT: v_mul_f32_e32 v2, -1.0, v4
-; GFX7-NEXT: v_min_f32_e32 v1, v1, v3
-; GFX7-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX7-NEXT: v_mul_f32_e32 v2, -1.0, v5
-; GFX7-NEXT: v_min_f32_e32 v1, v1, v2
+; GFX7-NEXT: v_min3_f32 v0, -v0, -v2, -v4
+; GFX7-NEXT: v_min3_f32 v1, -v1, -v3, -v5
; GFX7-NEXT: s_setpc_b64 s[30:31]
;
; GFX8-LABEL: v_min3_v2f32_minimumnum_minimumnum__neg_v_neg_v_neg_v_0:
; GFX8: ; %bb.0:
; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX8-NEXT: v_mul_f32_e32 v2, -1.0, v2
-; GFX8-NEXT: v_mul_f32_e32 v0, -1.0, v0
-; GFX8-NEXT: v_mul_f32_e32 v3, -1.0, v3
-; GFX8-NEXT: v_mul_f32_e32 v1, -1.0, v1
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX8-NEXT: v_mul_f32_e32 v2, -1.0, v4
-; GFX8-NEXT: v_min_f32_e32 v1, v1, v3
-; GFX8-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX8-NEXT: v_mul_f32_e32 v2, -1.0, v5
-; GFX8-NEXT: v_min_f32_e32 v1, v1, v2
+; GFX8-NEXT: v_min3_f32 v0, -v0, -v2, -v4
+; GFX8-NEXT: v_min3_f32 v1, -v1, -v3, -v5
; GFX8-NEXT: s_setpc_b64 s[30:31]
;
; GFX9-LABEL: v_min3_v2f32_minimumnum_minimumnum__neg_v_neg_v_neg_v_0:
; GFX9: ; %bb.0:
; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX9-NEXT: v_max_f32_e64 v2, -v2, -v2
-; GFX9-NEXT: v_max_f32_e64 v0, -v0, -v0
-; GFX9-NEXT: v_max_f32_e64 v3, -v3, -v3
-; GFX9-NEXT: v_max_f32_e64 v1, -v1, -v1
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX9-NEXT: v_max_f32_e64 v2, -v4, -v4
-; GFX9-NEXT: v_min_f32_e32 v1, v1, v3
-; GFX9-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX9-NEXT: v_max_f32_e64 v2, -v5, -v5
-; GFX9-NEXT: v_min_f32_e32 v1, v1, v2
+; GFX9-NEXT: v_min3_f32 v0, -v0, -v2, -v4
+; GFX9-NEXT: v_min3_f32 v1, -v1, -v3, -v5
; GFX9-NEXT: s_setpc_b64 s[30:31]
;
; GFX10-LABEL: v_min3_v2f32_minimumnum_minimumnum__neg_v_neg_v_neg_v_0:
; GFX10: ; %bb.0:
; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX10-NEXT: v_max_f32_e64 v2, -v2, -v2
-; GFX10-NEXT: v_max_f32_e64 v0, -v0, -v0
-; GFX10-NEXT: v_max_f32_e64 v3, -v3, -v3
-; GFX10-NEXT: v_max_f32_e64 v1, -v1, -v1
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX10-NEXT: v_max_f32_e64 v2, -v4, -v4
-; GFX10-NEXT: v_max_f32_e64 v4, -v5, -v5
-; GFX10-NEXT: v_min_f32_e32 v1, v1, v3
-; GFX10-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX10-NEXT: v_min_f32_e32 v1, v1, v4
+; GFX10-NEXT: v_min3_f32 v0, -v0, -v2, -v4
+; GFX10-NEXT: v_min3_f32 v1, -v1, -v3, -v5
; GFX10-NEXT: s_setpc_b64 s[30:31]
;
; GFX11-LABEL: v_min3_v2f32_minimumnum_minimumnum__neg_v_neg_v_neg_v_0:
; GFX11: ; %bb.0:
; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
-; GFX11-NEXT: v_max_f32_e64 v2, -v2, -v2
-; GFX11-NEXT: v_max_f32_e64 v0, -v0, -v0
-; GFX11-NEXT: v_max_f32_e64 v3, -v3, -v3
-; GFX11-NEXT: v_max_f32_e64 v1, -v1, -v1
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
-; GFX11-NEXT: v_min_f32_e32 v0, v0, v2
-; GFX11-NEXT: v_max_f32_e64 v2, -v4, -v4
-; GFX11-NEXT: v_min_f32_e32 v1, v1, v3
-; GFX11-NEXT: v_max_f32_e64 v4, -v5, -v5
-; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX11-NEXT: v_dual_min_f32 v0, v0, v2 :: v_dual_min_f32 v1, v1, v4
+; GFX11-NEXT: v_min3_f32 v0, -v0, -v2, -v4
+; GFX11-NEXT: v_min3_f32 v1, -v1, -v3, -v5
; GFX11-NEXT: s_setpc_b64 s[30:31]
;
; GFX12-LABEL: v_min3_v2f32_minimumnum_minimumnum__neg_v_neg_v_neg_v_0:
@@ -4017,17 +3432,8 @@ define <2 x float> @v_min3_v2f32_minimumnum_minimumnum__neg_v_neg_v_neg_v_0(<2 x
; GFX12-NEXT: s_wait_samplecnt 0x0
; GFX12-NEXT: s_wait_bvhcnt 0x0
; GFX12-NEXT: s_wait_kmcnt 0x0
-; GFX12-NEXT: v_max_num_f32_e64 v2, -v2, -v2
-; GFX12-NEXT: v_max_num_f32_e64 v0, -v0, -v0
-; GFX12-NEXT: v_max_num_f32_e64 v3, -v3, -v3
-; GFX12-NEXT: v_max_num_f32_e64 v1, -v1, -v1
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
-; GFX12-NEXT: v_min_num_f32_e32 v0, v0, v2
-; GFX12-NEXT: v_max_num_f32_e64 v2, -v4, -v4
-; GFX12-NEXT: v_min_num_f32_e32 v1, v1, v3
-; GFX12-NEXT: v_max_num_f32_e64 v4, -v5, -v5
-; GFX12-NEXT: s_delay_alu instid0(VALU_DEP_1)
-; GFX12-NEXT: v_dual_min_num_f32 v0, v0, v2 :: v_dual_min_num_f32 v1, v1, v4
+; GFX12-NEXT: v_min3_num_f32 v0, -v0, -v2, -v4
+; GFX12-NEXT: v_min3_num_f32 v1, -v1, -v3, -v5
; GFX12-NEXT: s_setpc_b64 s[30:31]
%neg.a = fneg <2 x float> %a
%neg.b = fneg <2 x float> %b
More information about the llvm-commits
mailing list