diff --git a/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp b/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp
index 5eff38b214aef..7345dc794de7b 100644
--- a/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp
+++ b/llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp
@@ -2524,6 +2524,33 @@ X86TTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const {
}
break;
+ // Generalize SSE/AVX FP to maxnum/minnum.
+ case Intrinsic::x86_sse_max_ps:
+ case Intrinsic::x86_sse2_max_pd:
+ case Intrinsic::x86_avx_max_pd_256:
+ case Intrinsic::x86_avx_max_ps_256:
+ case Intrinsic::x86_avx512_max_pd_512:
+ case Intrinsic::x86_avx512_max_ps_512:
+ case Intrinsic::x86_avx512fp16_max_ph_128:
+ case Intrinsic::x86_avx512fp16_max_ph_256:
+ case Intrinsic::x86_avx512fp16_max_ph_512:
+ if (Value *V = simplifyX86FPMaxMin(II, IC.Builder, Intrinsic::maxnum))
+ return IC.replaceInstUsesWith(II, V);
+ break;
+
+ case Intrinsic::x86_sse_min_ps:
+ case Intrinsic::x86_sse2_min_pd:
+ case Intrinsic::x86_avx_min_pd_256:
+ case Intrinsic::x86_avx_min_ps_256:
+ case Intrinsic::x86_avx512_min_pd_512:
+ case Intrinsic::x86_avx512_min_ps_512:
+ case Intrinsic::x86_avx512fp16_min_ph_128:
+ case Intrinsic::x86_avx512fp16_min_ph_256:
+ case Intrinsic::x86_avx512fp16_min_ph_512:
+ if (Value *V = simplifyX86FPMaxMin(II, IC.Builder, Intrinsic::minnum))
+ return IC.replaceInstUsesWith(II, V);
+ break;
+
// Constant fold ashr( , Ci ).
// Constant fold lshr( , Ci ).
// Constant fold shl( , Ci ).
@@ -3341,32 +3368,6 @@ std::optional X86TTIImpl::simplifyDemandedVectorEltsIntrinsic(
break;
}
- // Generalize SSE/AVX FP to maxnum/minnum.
- case Intrinsic::x86_sse_max_ps:
- case Intrinsic::x86_sse2_max_pd:
- case Intrinsic::x86_avx_max_pd_256:
- case Intrinsic::x86_avx_max_ps_256:
- case Intrinsic::x86_avx512_max_pd_512:
- case Intrinsic::x86_avx512_max_ps_512:
- case Intrinsic::x86_avx512fp16_max_ph_128:
- case Intrinsic::x86_avx512fp16_max_ph_256:
- case Intrinsic::x86_avx512fp16_max_ph_512:
- if (Value *V = simplifyX86FPMaxMin(II, IC.Builder, Intrinsic::maxnum))
- return IC.replaceInstUsesWith(II, V);
- break;
- case Intrinsic::x86_sse_min_ps:
- case Intrinsic::x86_sse2_min_pd:
- case Intrinsic::x86_avx_min_pd_256:
- case Intrinsic::x86_avx_min_ps_256:
- case Intrinsic::x86_avx512_min_pd_512:
- case Intrinsic::x86_avx512_min_ps_512:
- case Intrinsic::x86_avx512fp16_min_ph_128:
- case Intrinsic::x86_avx512fp16_min_ph_256:
- case Intrinsic::x86_avx512fp16_min_ph_512:
- if (Value *V = simplifyX86FPMaxMin(II, IC.Builder, Intrinsic::minnum))
- return IC.replaceInstUsesWith(II, V);
- break;
-
// General per-element vector operations.
case Intrinsic::x86_avx2_psllv_d:
case Intrinsic::x86_avx2_psllv_d_256: