[llvm-branch-commits] [llvm] TTI: Check legalization cost of fptosi_sat/fptoui_sat nodes (PR #100521)
Matt Arsenault via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Aug 8 06:10:06 PDT 2024
https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/100521
>From d428b6040084690055e06cd246cd7afa56c971b7 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Thu, 25 Jul 2024 10:33:23 +0400
Subject: [PATCH] TTI: Check legalization cost of fptosi_sat/fptoui_sat nodes
---
llvm/include/llvm/CodeGen/BasicTTIImpl.h | 56 +--
llvm/test/Analysis/CostModel/X86/fptoi_sat.ll | 400 +++++++++---------
.../AggressiveInstCombine/ARM/fptosisat.ll | 49 ++-
3 files changed, 266 insertions(+), 239 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/BasicTTIImpl.h b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
index 890c2b8ca36e1..8a14c8a37577a 100644
--- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h
+++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
@@ -2183,31 +2183,11 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
ISD = ISD::UMULO;
break;
case Intrinsic::fptosi_sat:
- case Intrinsic::fptoui_sat: {
- if (Tys.empty())
- break;
- Type *FromTy = Tys[0];
- bool IsSigned = IID == Intrinsic::fptosi_sat;
-
- InstructionCost Cost = 0;
- IntrinsicCostAttributes Attrs1(Intrinsic::minnum, FromTy,
- {FromTy, FromTy});
- Cost += thisT()->getIntrinsicInstrCost(Attrs1, CostKind);
- IntrinsicCostAttributes Attrs2(Intrinsic::maxnum, FromTy,
- {FromTy, FromTy});
- Cost += thisT()->getIntrinsicInstrCost(Attrs2, CostKind);
- Cost += thisT()->getCastInstrCost(
- IsSigned ? Instruction::FPToSI : Instruction::FPToUI, RetTy, FromTy,
- TTI::CastContextHint::None, CostKind);
- if (IsSigned) {
- Type *CondTy = RetTy->getWithNewBitWidth(1);
- Cost += thisT()->getCmpSelInstrCost(
- BinaryOperator::FCmp, FromTy, CondTy, CmpInst::FCMP_UNO, CostKind);
- Cost += thisT()->getCmpSelInstrCost(
- BinaryOperator::Select, RetTy, CondTy, CmpInst::FCMP_UNO, CostKind);
- }
- return Cost;
- }
+ ISD = ISD::FP_TO_SINT_SAT;
+ break;
+ case Intrinsic::fptoui_sat:
+ ISD = ISD::FP_TO_UINT_SAT;
+ break;
case Intrinsic::ctpop:
ISD = ISD::CTPOP;
// In case of legalization use TCC_Expensive. This is cheaper than a
@@ -2422,6 +2402,32 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
Cost += thisT()->getArithmeticInstrCost(Instruction::Or, RetTy, CostKind);
return Cost;
}
+ case Intrinsic::fptosi_sat:
+ case Intrinsic::fptoui_sat: {
+ if (Tys.empty())
+ break;
+ Type *FromTy = Tys[0];
+ bool IsSigned = IID == Intrinsic::fptosi_sat;
+
+ InstructionCost Cost = 0;
+ IntrinsicCostAttributes Attrs1(Intrinsic::minnum, FromTy,
+ {FromTy, FromTy});
+ Cost += thisT()->getIntrinsicInstrCost(Attrs1, CostKind);
+ IntrinsicCostAttributes Attrs2(Intrinsic::maxnum, FromTy,
+ {FromTy, FromTy});
+ Cost += thisT()->getIntrinsicInstrCost(Attrs2, CostKind);
+ Cost += thisT()->getCastInstrCost(
+ IsSigned ? Instruction::FPToSI : Instruction::FPToUI, RetTy, FromTy,
+ TTI::CastContextHint::None, CostKind);
+ if (IsSigned) {
+ Type *CondTy = RetTy->getWithNewBitWidth(1);
+ Cost += thisT()->getCmpSelInstrCost(
+ BinaryOperator::FCmp, FromTy, CondTy, CmpInst::FCMP_UNO, CostKind);
+ Cost += thisT()->getCmpSelInstrCost(
+ BinaryOperator::Select, RetTy, CondTy, CmpInst::FCMP_UNO, CostKind);
+ }
+ return Cost;
+ }
default:
break;
}
diff --git a/llvm/test/Analysis/CostModel/X86/fptoi_sat.ll b/llvm/test/Analysis/CostModel/X86/fptoi_sat.ll
index 3f5c79f2d59c6..55b80350f595e 100644
--- a/llvm/test/Analysis/CostModel/X86/fptoi_sat.ll
+++ b/llvm/test/Analysis/CostModel/X86/fptoi_sat.ll
@@ -12,26 +12,26 @@
define void @casts() {
; SSE2-LABEL: 'casts'
-; SSE2-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 25 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
; SSE2-NEXT: Cost Model: Found an estimated cost of 19 for instruction: %v2f32s1 = call <2 x i1> @llvm.fptosi.sat.v2i1.v2f32(<2 x float> undef)
; SSE2-NEXT: Cost Model: Found an estimated cost of 15 for instruction: %v2f32u1 = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f32(<2 x float> undef)
; SSE2-NEXT: Cost Model: Found an estimated cost of 18 for instruction: %v2f32s8 = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f32(<2 x float> undef)
@@ -115,26 +115,26 @@ define void @casts() {
; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; SSE42-LABEL: 'casts'
-; SSE42-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
; SSE42-NEXT: Cost Model: Found an estimated cost of 17 for instruction: %v2f32s1 = call <2 x i1> @llvm.fptosi.sat.v2i1.v2f32(<2 x float> undef)
; SSE42-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %v2f32u1 = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f32(<2 x float> undef)
; SSE42-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %v2f32s8 = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f32(<2 x float> undef)
@@ -218,26 +218,26 @@ define void @casts() {
; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; AVX1-LABEL: 'casts'
-; AVX1-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
-; AVX1-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
+; AVX1-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
; AVX1-NEXT: Cost Model: Found an estimated cost of 15 for instruction: %v2f32s1 = call <2 x i1> @llvm.fptosi.sat.v2i1.v2f32(<2 x float> undef)
; AVX1-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %v2f32u1 = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f32(<2 x float> undef)
; AVX1-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %v2f32s8 = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f32(<2 x float> undef)
@@ -321,26 +321,26 @@ define void @casts() {
; AVX1-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; AVX2-LABEL: 'casts'
-; AVX2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
; AVX2-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %v2f32s1 = call <2 x i1> @llvm.fptosi.sat.v2i1.v2f32(<2 x float> undef)
; AVX2-NEXT: Cost Model: Found an estimated cost of 10 for instruction: %v2f32u1 = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f32(<2 x float> undef)
; AVX2-NEXT: Cost Model: Found an estimated cost of 9 for instruction: %v2f32s8 = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f32(<2 x float> undef)
@@ -424,26 +424,26 @@ define void @casts() {
; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; AVX512F-LABEL: 'casts'
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
; AVX512F-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %v2f32s1 = call <2 x i1> @llvm.fptosi.sat.v2i1.v2f32(<2 x float> undef)
; AVX512F-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %v2f32u1 = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f32(<2 x float> undef)
; AVX512F-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %v2f32s8 = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f32(<2 x float> undef)
@@ -527,26 +527,26 @@ define void @casts() {
; AVX512F-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; AVX512DQ-LABEL: 'casts'
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %v2f32s1 = call <2 x i1> @llvm.fptosi.sat.v2i1.v2f32(<2 x float> undef)
; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %v2f32u1 = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f32(<2 x float> undef)
; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %v2f32s8 = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f32(<2 x float> undef)
@@ -630,26 +630,26 @@ define void @casts() {
; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; SLM-LABEL: 'casts'
-; SLM-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s1 = call i1 @llvm.fptosi.sat.i1.f32(float undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u1 = call i1 @llvm.fptoui.sat.i1.f32(float undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s8 = call i8 @llvm.fptosi.sat.i8.f32(float undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u8 = call i8 @llvm.fptoui.sat.i8.f32(float undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s16 = call i16 @llvm.fptosi.sat.i16.f32(float undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u16 = call i16 @llvm.fptoui.sat.i16.f32(float undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s32 = call i32 @llvm.fptosi.sat.i32.f32(float undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u32 = call i32 @llvm.fptoui.sat.i32.f32(float undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32s64 = call i64 @llvm.fptosi.sat.i64.f32(float undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f32u64 = call i64 @llvm.fptoui.sat.i64.f32(float undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s1 = call i1 @llvm.fptosi.sat.i1.f64(double undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u1 = call i1 @llvm.fptoui.sat.i1.f64(double undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s8 = call i8 @llvm.fptosi.sat.i8.f64(double undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u8 = call i8 @llvm.fptoui.sat.i8.f64(double undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s16 = call i16 @llvm.fptosi.sat.i16.f64(double undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u16 = call i16 @llvm.fptoui.sat.i16.f64(double undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s32 = call i32 @llvm.fptosi.sat.i32.f64(double undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u32 = call i32 @llvm.fptoui.sat.i32.f64(double undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64s64 = call i64 @llvm.fptosi.sat.i64.f64(double undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f64u64 = call i64 @llvm.fptoui.sat.i64.f64(double undef)
; SLM-NEXT: Cost Model: Found an estimated cost of 19 for instruction: %v2f32s1 = call <2 x i1> @llvm.fptosi.sat.v2i1.v2f32(<2 x float> undef)
; SLM-NEXT: Cost Model: Found an estimated cost of 14 for instruction: %v2f32u1 = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f32(<2 x float> undef)
; SLM-NEXT: Cost Model: Found an estimated cost of 15 for instruction: %v2f32s8 = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f32(<2 x float> undef)
@@ -847,16 +847,16 @@ define void @casts() {
define void @fp16() {
; SSE2-LABEL: 'fp16'
-; SSE2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s1 = call i1 @llvm.fptosi.sat.i1.f16(half undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u1 = call i1 @llvm.fptoui.sat.i1.f16(half undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s8 = call i8 @llvm.fptosi.sat.i8.f16(half undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u8 = call i8 @llvm.fptoui.sat.i8.f16(half undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s16 = call i16 @llvm.fptosi.sat.i16.f16(half undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u16 = call i16 @llvm.fptoui.sat.i16.f16(half undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s32 = call i32 @llvm.fptosi.sat.i32.f16(half undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u32 = call i32 @llvm.fptoui.sat.i32.f16(half undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s64 = call i64 @llvm.fptosi.sat.i64.f16(half undef)
-; SSE2-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u64 = call i64 @llvm.fptoui.sat.i64.f16(half undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s1 = call i1 @llvm.fptosi.sat.i1.f16(half undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u1 = call i1 @llvm.fptoui.sat.i1.f16(half undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s8 = call i8 @llvm.fptosi.sat.i8.f16(half undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u8 = call i8 @llvm.fptoui.sat.i8.f16(half undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s16 = call i16 @llvm.fptosi.sat.i16.f16(half undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u16 = call i16 @llvm.fptoui.sat.i16.f16(half undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s32 = call i32 @llvm.fptosi.sat.i32.f16(half undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u32 = call i32 @llvm.fptoui.sat.i32.f16(half undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s64 = call i64 @llvm.fptosi.sat.i64.f16(half undef)
+; SSE2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u64 = call i64 @llvm.fptoui.sat.i64.f16(half undef)
; SSE2-NEXT: Cost Model: Found an estimated cost of 15 for instruction: %v2f16s1 = call <2 x i1> @llvm.fptosi.sat.v2i1.v2f16(<2 x half> undef)
; SSE2-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %v2f16u1 = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f16(<2 x half> undef)
; SSE2-NEXT: Cost Model: Found an estimated cost of 18 for instruction: %v2f16s8 = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f16(<2 x half> undef)
@@ -900,16 +900,16 @@ define void @fp16() {
; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; SSE42-LABEL: 'fp16'
-; SSE42-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s1 = call i1 @llvm.fptosi.sat.i1.f16(half undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u1 = call i1 @llvm.fptoui.sat.i1.f16(half undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s8 = call i8 @llvm.fptosi.sat.i8.f16(half undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u8 = call i8 @llvm.fptoui.sat.i8.f16(half undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s16 = call i16 @llvm.fptosi.sat.i16.f16(half undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u16 = call i16 @llvm.fptoui.sat.i16.f16(half undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s32 = call i32 @llvm.fptosi.sat.i32.f16(half undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u32 = call i32 @llvm.fptoui.sat.i32.f16(half undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s64 = call i64 @llvm.fptosi.sat.i64.f16(half undef)
-; SSE42-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u64 = call i64 @llvm.fptoui.sat.i64.f16(half undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s1 = call i1 @llvm.fptosi.sat.i1.f16(half undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u1 = call i1 @llvm.fptoui.sat.i1.f16(half undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s8 = call i8 @llvm.fptosi.sat.i8.f16(half undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u8 = call i8 @llvm.fptoui.sat.i8.f16(half undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s16 = call i16 @llvm.fptosi.sat.i16.f16(half undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u16 = call i16 @llvm.fptoui.sat.i16.f16(half undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s32 = call i32 @llvm.fptosi.sat.i32.f16(half undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u32 = call i32 @llvm.fptoui.sat.i32.f16(half undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s64 = call i64 @llvm.fptosi.sat.i64.f16(half undef)
+; SSE42-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u64 = call i64 @llvm.fptoui.sat.i64.f16(half undef)
; SSE42-NEXT: Cost Model: Found an estimated cost of 15 for instruction: %v2f16s1 = call <2 x i1> @llvm.fptosi.sat.v2i1.v2f16(<2 x half> undef)
; SSE42-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %v2f16u1 = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f16(<2 x half> undef)
; SSE42-NEXT: Cost Model: Found an estimated cost of 17 for instruction: %v2f16s8 = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f16(<2 x half> undef)
@@ -953,16 +953,16 @@ define void @fp16() {
; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; AVX2-LABEL: 'fp16'
-; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s1 = call i1 @llvm.fptosi.sat.i1.f16(half undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u1 = call i1 @llvm.fptoui.sat.i1.f16(half undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s8 = call i8 @llvm.fptosi.sat.i8.f16(half undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u8 = call i8 @llvm.fptoui.sat.i8.f16(half undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s16 = call i16 @llvm.fptosi.sat.i16.f16(half undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u16 = call i16 @llvm.fptoui.sat.i16.f16(half undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s32 = call i32 @llvm.fptosi.sat.i32.f16(half undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u32 = call i32 @llvm.fptoui.sat.i32.f16(half undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s64 = call i64 @llvm.fptosi.sat.i64.f16(half undef)
-; AVX2-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u64 = call i64 @llvm.fptoui.sat.i64.f16(half undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s1 = call i1 @llvm.fptosi.sat.i1.f16(half undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u1 = call i1 @llvm.fptoui.sat.i1.f16(half undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s8 = call i8 @llvm.fptosi.sat.i8.f16(half undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u8 = call i8 @llvm.fptoui.sat.i8.f16(half undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s16 = call i16 @llvm.fptosi.sat.i16.f16(half undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u16 = call i16 @llvm.fptoui.sat.i16.f16(half undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s32 = call i32 @llvm.fptosi.sat.i32.f16(half undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u32 = call i32 @llvm.fptoui.sat.i32.f16(half undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s64 = call i64 @llvm.fptosi.sat.i64.f16(half undef)
+; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u64 = call i64 @llvm.fptoui.sat.i64.f16(half undef)
; AVX2-NEXT: Cost Model: Found an estimated cost of 15 for instruction: %v2f16s1 = call <2 x i1> @llvm.fptosi.sat.v2i1.v2f16(<2 x half> undef)
; AVX2-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %v2f16u1 = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f16(<2 x half> undef)
; AVX2-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %v2f16s8 = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f16(<2 x half> undef)
@@ -1006,16 +1006,16 @@ define void @fp16() {
; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; AVX512F-LABEL: 'fp16'
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s1 = call i1 @llvm.fptosi.sat.i1.f16(half undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u1 = call i1 @llvm.fptoui.sat.i1.f16(half undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s8 = call i8 @llvm.fptosi.sat.i8.f16(half undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u8 = call i8 @llvm.fptoui.sat.i8.f16(half undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s16 = call i16 @llvm.fptosi.sat.i16.f16(half undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u16 = call i16 @llvm.fptoui.sat.i16.f16(half undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s32 = call i32 @llvm.fptosi.sat.i32.f16(half undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u32 = call i32 @llvm.fptoui.sat.i32.f16(half undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s64 = call i64 @llvm.fptosi.sat.i64.f16(half undef)
-; AVX512F-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u64 = call i64 @llvm.fptoui.sat.i64.f16(half undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s1 = call i1 @llvm.fptosi.sat.i1.f16(half undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u1 = call i1 @llvm.fptoui.sat.i1.f16(half undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s8 = call i8 @llvm.fptosi.sat.i8.f16(half undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u8 = call i8 @llvm.fptoui.sat.i8.f16(half undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s16 = call i16 @llvm.fptosi.sat.i16.f16(half undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u16 = call i16 @llvm.fptoui.sat.i16.f16(half undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s32 = call i32 @llvm.fptosi.sat.i32.f16(half undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u32 = call i32 @llvm.fptoui.sat.i32.f16(half undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s64 = call i64 @llvm.fptosi.sat.i64.f16(half undef)
+; AVX512F-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u64 = call i64 @llvm.fptoui.sat.i64.f16(half undef)
; AVX512F-NEXT: Cost Model: Found an estimated cost of 23 for instruction: %v2f16s1 = call <2 x i1> @llvm.fptosi.sat.v2i1.v2f16(<2 x half> undef)
; AVX512F-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %v2f16u1 = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f16(<2 x half> undef)
; AVX512F-NEXT: Cost Model: Found an estimated cost of 17 for instruction: %v2f16s8 = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f16(<2 x half> undef)
@@ -1059,16 +1059,16 @@ define void @fp16() {
; AVX512F-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; AVX512DQ-LABEL: 'fp16'
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s1 = call i1 @llvm.fptosi.sat.i1.f16(half undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u1 = call i1 @llvm.fptoui.sat.i1.f16(half undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s8 = call i8 @llvm.fptosi.sat.i8.f16(half undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u8 = call i8 @llvm.fptoui.sat.i8.f16(half undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s16 = call i16 @llvm.fptosi.sat.i16.f16(half undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u16 = call i16 @llvm.fptoui.sat.i16.f16(half undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s32 = call i32 @llvm.fptosi.sat.i32.f16(half undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u32 = call i32 @llvm.fptoui.sat.i32.f16(half undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s64 = call i64 @llvm.fptosi.sat.i64.f16(half undef)
-; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u64 = call i64 @llvm.fptoui.sat.i64.f16(half undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s1 = call i1 @llvm.fptosi.sat.i1.f16(half undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u1 = call i1 @llvm.fptoui.sat.i1.f16(half undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s8 = call i8 @llvm.fptosi.sat.i8.f16(half undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u8 = call i8 @llvm.fptoui.sat.i8.f16(half undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s16 = call i16 @llvm.fptosi.sat.i16.f16(half undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u16 = call i16 @llvm.fptoui.sat.i16.f16(half undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s32 = call i32 @llvm.fptosi.sat.i32.f16(half undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u32 = call i32 @llvm.fptoui.sat.i32.f16(half undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s64 = call i64 @llvm.fptosi.sat.i64.f16(half undef)
+; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u64 = call i64 @llvm.fptoui.sat.i64.f16(half undef)
; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 23 for instruction: %v2f16s1 = call <2 x i1> @llvm.fptosi.sat.v2i1.v2f16(<2 x half> undef)
; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 16 for instruction: %v2f16u1 = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f16(<2 x half> undef)
; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 17 for instruction: %v2f16s8 = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f16(<2 x half> undef)
@@ -1112,16 +1112,16 @@ define void @fp16() {
; AVX512DQ-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret void
;
; SLM-LABEL: 'fp16'
-; SLM-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s1 = call i1 @llvm.fptosi.sat.i1.f16(half undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u1 = call i1 @llvm.fptoui.sat.i1.f16(half undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s8 = call i8 @llvm.fptosi.sat.i8.f16(half undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u8 = call i8 @llvm.fptoui.sat.i8.f16(half undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s16 = call i16 @llvm.fptosi.sat.i16.f16(half undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u16 = call i16 @llvm.fptoui.sat.i16.f16(half undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s32 = call i32 @llvm.fptosi.sat.i32.f16(half undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u32 = call i32 @llvm.fptoui.sat.i32.f16(half undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %f16s64 = call i64 @llvm.fptosi.sat.i64.f16(half undef)
-; SLM-NEXT: Cost Model: Found an estimated cost of 3 for instruction: %f16u64 = call i64 @llvm.fptoui.sat.i64.f16(half undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s1 = call i1 @llvm.fptosi.sat.i1.f16(half undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u1 = call i1 @llvm.fptoui.sat.i1.f16(half undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s8 = call i8 @llvm.fptosi.sat.i8.f16(half undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u8 = call i8 @llvm.fptoui.sat.i8.f16(half undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s16 = call i16 @llvm.fptosi.sat.i16.f16(half undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u16 = call i16 @llvm.fptoui.sat.i16.f16(half undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s32 = call i32 @llvm.fptosi.sat.i32.f16(half undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u32 = call i32 @llvm.fptoui.sat.i32.f16(half undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16s64 = call i64 @llvm.fptosi.sat.i64.f16(half undef)
+; SLM-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %f16u64 = call i64 @llvm.fptoui.sat.i64.f16(half undef)
; SLM-NEXT: Cost Model: Found an estimated cost of 17 for instruction: %v2f16s1 = call <2 x i1> @llvm.fptosi.sat.v2i1.v2f16(<2 x half> undef)
; SLM-NEXT: Cost Model: Found an estimated cost of 11 for instruction: %v2f16u1 = call <2 x i1> @llvm.fptoui.sat.v2i1.v2f16(<2 x half> undef)
; SLM-NEXT: Cost Model: Found an estimated cost of 19 for instruction: %v2f16s8 = call <2 x i8> @llvm.fptosi.sat.v2i8.v2f16(<2 x half> undef)
diff --git a/llvm/test/Transforms/AggressiveInstCombine/ARM/fptosisat.ll b/llvm/test/Transforms/AggressiveInstCombine/ARM/fptosisat.ll
index f26463815c16d..da3bac2562285 100644
--- a/llvm/test/Transforms/AggressiveInstCombine/ARM/fptosisat.ll
+++ b/llvm/test/Transforms/AggressiveInstCombine/ARM/fptosisat.ll
@@ -83,10 +83,9 @@ define i64 @f64_i32(double %in) {
; CHECK-BASE-NEXT: ret i64 [[MAX]]
;
; CHECK-MVEFP-LABEL: @f64_i32(
-; CHECK-MVEFP-NEXT: [[CONV:%.*]] = fptosi double [[IN:%.*]] to i64
-; CHECK-MVEFP-NEXT: [[MIN:%.*]] = call i64 @llvm.smin.i64(i64 [[CONV]], i64 2147483647)
-; CHECK-MVEFP-NEXT: [[MAX:%.*]] = call i64 @llvm.smax.i64(i64 [[MIN]], i64 -2147483648)
-; CHECK-MVEFP-NEXT: ret i64 [[MAX]]
+; CHECK-MVEFP-NEXT: [[TMP1:%.*]] = call i32 @llvm.fptosi.sat.i32.f64(double [[IN:%.*]])
+; CHECK-MVEFP-NEXT: [[TMP2:%.*]] = sext i32 [[TMP1]] to i64
+; CHECK-MVEFP-NEXT: ret i64 [[TMP2]]
;
; CHECK-FP64-LABEL: @f64_i32(
; CHECK-FP64-NEXT: [[TMP1:%.*]] = call i32 @llvm.fptosi.sat.i32.f64(double [[IN:%.*]])
@@ -100,11 +99,22 @@ define i64 @f64_i32(double %in) {
}
define i64 @f64_i31(double %in) {
-; CHECK-LABEL: @f64_i31(
-; CHECK-NEXT: [[CONV:%.*]] = fptosi double [[IN:%.*]] to i64
-; CHECK-NEXT: [[MIN:%.*]] = call i64 @llvm.smin.i64(i64 [[CONV]], i64 1073741823)
-; CHECK-NEXT: [[MAX:%.*]] = call i64 @llvm.smax.i64(i64 [[MIN]], i64 -1073741824)
-; CHECK-NEXT: ret i64 [[MAX]]
+; CHECK-BASE-LABEL: @f64_i31(
+; CHECK-BASE-NEXT: [[CONV:%.*]] = fptosi double [[IN:%.*]] to i64
+; CHECK-BASE-NEXT: [[MIN:%.*]] = call i64 @llvm.smin.i64(i64 [[CONV]], i64 1073741823)
+; CHECK-BASE-NEXT: [[MAX:%.*]] = call i64 @llvm.smax.i64(i64 [[MIN]], i64 -1073741824)
+; CHECK-BASE-NEXT: ret i64 [[MAX]]
+;
+; CHECK-MVEFP-LABEL: @f64_i31(
+; CHECK-MVEFP-NEXT: [[TMP1:%.*]] = call i31 @llvm.fptosi.sat.i31.f64(double [[IN:%.*]])
+; CHECK-MVEFP-NEXT: [[TMP2:%.*]] = sext i31 [[TMP1]] to i64
+; CHECK-MVEFP-NEXT: ret i64 [[TMP2]]
+;
+; CHECK-FP64-LABEL: @f64_i31(
+; CHECK-FP64-NEXT: [[CONV:%.*]] = fptosi double [[IN:%.*]] to i64
+; CHECK-FP64-NEXT: [[MIN:%.*]] = call i64 @llvm.smin.i64(i64 [[CONV]], i64 1073741823)
+; CHECK-FP64-NEXT: [[MAX:%.*]] = call i64 @llvm.smax.i64(i64 [[MIN]], i64 -1073741824)
+; CHECK-FP64-NEXT: ret i64 [[MAX]]
;
%conv = fptosi double %in to i64
%min = call i64 @llvm.smin.i64(i64 %conv, i64 1073741823)
@@ -113,11 +123,22 @@ define i64 @f64_i31(double %in) {
}
define i32 @f64_i16(double %in) {
-; CHECK-LABEL: @f64_i16(
-; CHECK-NEXT: [[CONV:%.*]] = fptosi double [[IN:%.*]] to i32
-; CHECK-NEXT: [[MIN:%.*]] = call i32 @llvm.smin.i32(i32 [[CONV]], i32 32767)
-; CHECK-NEXT: [[MAX:%.*]] = call i32 @llvm.smax.i32(i32 [[MIN]], i32 -32768)
-; CHECK-NEXT: ret i32 [[MAX]]
+; CHECK-BASE-LABEL: @f64_i16(
+; CHECK-BASE-NEXT: [[CONV:%.*]] = fptosi double [[IN:%.*]] to i32
+; CHECK-BASE-NEXT: [[MIN:%.*]] = call i32 @llvm.smin.i32(i32 [[CONV]], i32 32767)
+; CHECK-BASE-NEXT: [[MAX:%.*]] = call i32 @llvm.smax.i32(i32 [[MIN]], i32 -32768)
+; CHECK-BASE-NEXT: ret i32 [[MAX]]
+;
+; CHECK-MVEFP-LABEL: @f64_i16(
+; CHECK-MVEFP-NEXT: [[TMP1:%.*]] = call i16 @llvm.fptosi.sat.i16.f64(double [[IN:%.*]])
+; CHECK-MVEFP-NEXT: [[TMP2:%.*]] = sext i16 [[TMP1]] to i32
+; CHECK-MVEFP-NEXT: ret i32 [[TMP2]]
+;
+; CHECK-FP64-LABEL: @f64_i16(
+; CHECK-FP64-NEXT: [[CONV:%.*]] = fptosi double [[IN:%.*]] to i32
+; CHECK-FP64-NEXT: [[MIN:%.*]] = call i32 @llvm.smin.i32(i32 [[CONV]], i32 32767)
+; CHECK-FP64-NEXT: [[MAX:%.*]] = call i32 @llvm.smax.i32(i32 [[MIN]], i32 -32768)
+; CHECK-FP64-NEXT: ret i32 [[MAX]]
;
%conv = fptosi double %in to i32
%min = call i32 @llvm.smin.i32(i32 %conv, i32 32767)
More information about the llvm-branch-commits
mailing list