[llvm] [InstCombine][X86] Move simplifyX86FPMaxMin handling from simplifyDemandedVectorEltsIntrinsic to instCombineIntrinsic (PR #175441)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Jan 11 08:10:22 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-x86
Author: Simon Pilgrim (RKSimon)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/175441.diff
1 Files Affected:
- (modified) llvm/lib/Target/X86/X86InstCombineIntrinsic.cpp (+27-26)
``````````diff
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:
``````````
</details>
https://github.com/llvm/llvm-project/pull/175441
More information about the llvm-commits
mailing list