[llvm] [InstCombine][X86] Move simplifyX86FPMaxMin handling from simplifyDemandedVectorEltsIntrinsic to instCombineIntrinsic (PR #175441)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Sun Jan 11 08:09:55 PST 2026
https://github.com/RKSimon created https://github.com/llvm/llvm-project/pull/175441
My fault for missing this when reviewing #174806 - technically we might benefit from demanded elts handling for these intrinsics some day, but the base implementation should be in instCombineIntrinsic
Noticed while reviewing #175375 which I recommended reuses more of the simplifyX86FPMaxMin handling.
>From 64c7566f1f51531327e837726eda21c4cfcfb014 Mon Sep 17 00:00:00 2001
From: Simon Pilgrim <llvm-dev at redking.me.uk>
Date: Sun, 11 Jan 2026 16:08:30 +0000
Subject: [PATCH] [InstCombine][X86] Move simplifyX86FPMaxMin handling from
simplifyDemandedVectorEltsIntrinsic to instCombineIntrinsic
My fault for missing this when reviewing #174806 - technically we might benefit from demanded elts handling for these intrinsics some day, but the base implementation should be in instCombineIntrinsic
Noticed while reviewing #175375 which I recommended reuses more of the simplifyX86FPMaxMin handling.
---
.../Target/X86/X86InstCombineIntrinsic.cpp | 53 ++++++++++---------
1 file changed, 27 insertions(+), 26 deletions(-)
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( <A x Bi>, Ci ).
// Constant fold lshr( <A x Bi>, Ci ).
// Constant fold shl( <A x Bi>, Ci ).
@@ -3341,32 +3368,6 @@ std::optional<Value *> 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:
More information about the llvm-commits
mailing list