[llvm] [X86] Move ISD::FP_TO_*INT_SAT actions to be with a Subtarget's other ops. (PR #223657)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 15 04:24:37 PDT 2026
https://github.com/RKSimon created https://github.com/llvm/llvm-project/pull/223657
Don't treat them differently to the general pattern we try to keep to based on grouping each Subtarget abilities - they shouldn't allow soft-float either.
Cleanup to reduce diff in #199416
>From 0d97afadba0c41b078eb12250497facd30086565 Mon Sep 17 00:00:00 2001
From: Simon Pilgrim <llvm-dev at redking.me.uk>
Date: Tue, 15 Sep 2026 12:22:07 +0100
Subject: [PATCH] [X86] Move ISD::FP_TO_*INT_SAT actions to be with a
Subtarget's other ops. NFC.
Don't treat the differently to the general pattern we try to keep to based on Subtarget abilities - they shouldn't allow soft-float either.
Cleanup to reduce diff in #199416
---
llvm/lib/Target/X86/X86ISelLowering.cpp | 57 +++++++++++--------------
1 file changed, 25 insertions(+), 32 deletions(-)
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 775fd7642f040..b888642db969a 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -308,38 +308,6 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
}
}
- if (Subtarget.hasSSE2()) {
- // Custom lowering for saturating float to int conversions.
- // We handle promotion to larger result types manually.
- for (MVT VT : { MVT::i8, MVT::i16, MVT::i32 }) {
- setOperationAction(ISD::FP_TO_UINT_SAT, VT, Custom);
- setOperationAction(ISD::FP_TO_SINT_SAT, VT, Custom);
- }
- if (Subtarget.is64Bit()) {
- setOperationAction(ISD::FP_TO_UINT_SAT, MVT::i64, Custom);
- setOperationAction(ISD::FP_TO_SINT_SAT, MVT::i64, Custom);
- }
- }
- if (Subtarget.hasAVX10_2()) {
- for (MVT VT : {MVT::v8i8, MVT::v16i8, MVT::v32i8}) {
- setOperationAction(ISD::FP_TO_UINT_SAT, VT, Custom);
- setOperationAction(ISD::FP_TO_SINT_SAT, VT, Custom);
- }
- setOperationAction(ISD::FP_TO_UINT_SAT, MVT::v2i32, Custom);
- setOperationAction(ISD::FP_TO_SINT_SAT, MVT::v2i32, Custom);
- setOperationAction(ISD::FP_TO_UINT_SAT, MVT::v8i64, Legal);
- setOperationAction(ISD::FP_TO_SINT_SAT, MVT::v8i64, Legal);
- for (MVT VT : {MVT::i32, MVT::v4i32, MVT::v8i32, MVT::v16i32, MVT::v2i64,
- MVT::v4i64}) {
- setOperationAction(ISD::FP_TO_UINT_SAT, VT, Legal);
- setOperationAction(ISD::FP_TO_SINT_SAT, VT, Legal);
- }
- if (Subtarget.is64Bit()) {
- setOperationAction(ISD::FP_TO_UINT_SAT, MVT::i64, Legal);
- setOperationAction(ISD::FP_TO_SINT_SAT, MVT::i64, Legal);
- }
- }
-
// Handle address space casts between mixed sized pointers.
setOperationAction(ISD::ADDRSPACECAST, MVT::i32, Custom);
setOperationAction(ISD::ADDRSPACECAST, MVT::i64, Custom);
@@ -1287,6 +1255,15 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
setOperationAction(ISD::STRICT_FP_TO_UINT, VT, Custom);
}
+ // Custom lowering for saturating float to int conversions.
+ // We handle promotion to larger result types manually.
+ for (MVT VT : {MVT::i8, MVT::i16, MVT::i32, MVT::i64}) {
+ if (VT == MVT::i64 && !Subtarget.is64Bit())
+ continue;
+ setOperationAction(ISD::FP_TO_UINT_SAT, VT, Custom);
+ setOperationAction(ISD::FP_TO_SINT_SAT, VT, Custom);
+ }
+
setOperationAction(ISD::SINT_TO_FP, MVT::v4i32, Custom);
setOperationAction(ISD::STRICT_SINT_TO_FP, MVT::v4i32, Custom);
setOperationAction(ISD::SINT_TO_FP, MVT::v2i32, Custom);
@@ -2618,6 +2595,22 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
}
if (!Subtarget.useSoftFloat() && Subtarget.hasAVX10_2()) {
+ for (MVT VT : {MVT::v8i8, MVT::v16i8, MVT::v32i8}) {
+ setOperationAction(ISD::FP_TO_UINT_SAT, VT, Custom);
+ setOperationAction(ISD::FP_TO_SINT_SAT, VT, Custom);
+ }
+ setOperationAction(ISD::FP_TO_UINT_SAT, MVT::v2i32, Custom);
+ setOperationAction(ISD::FP_TO_SINT_SAT, MVT::v2i32, Custom);
+ setOperationAction(ISD::FP_TO_UINT_SAT, MVT::v8i64, Legal);
+ setOperationAction(ISD::FP_TO_SINT_SAT, MVT::v8i64, Legal);
+ for (MVT VT : {MVT::i32, MVT::i64, MVT::v4i32, MVT::v8i32, MVT::v16i32,
+ MVT::v2i64, MVT::v4i64}) {
+ if (VT == MVT::i64 && !Subtarget.is64Bit())
+ continue;
+ setOperationAction(ISD::FP_TO_UINT_SAT, VT, Legal);
+ setOperationAction(ISD::FP_TO_SINT_SAT, VT, Legal);
+ }
+
// Lower scalar bf16 arithmetic by widening to a vector op and extracting
// the low element.
setOperationAction(ISD::FADD, MVT::bf16, Custom);
More information about the llvm-commits
mailing list