mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
ARM cost model: Make some vector integer to float casts cheaper
The default logic marks them as too expensive. For example, before this patch we estimated: cost of 16 for instruction: %r = uitofp <4 x i16> %v0 to <4 x float> While this translates to: vmovl.u16 q8, d16 vcvt.f32.u32 q8, q8 All other costs are left to the values assigned by the fallback logic. Theses costs are mostly reasonable in the sense that they get progressively more expensive as the instruction sequences emitted get longer. radar://13445992 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177334 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -222,6 +222,28 @@ unsigned ARMTTI::getCastInstrCost(unsigned Opcode, Type *Dst,
|
||||
// Vector float <-> i32 conversions.
|
||||
{ ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i32, 1 },
|
||||
{ ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i32, 1 },
|
||||
|
||||
{ ISD::SINT_TO_FP, MVT::v2f32, MVT::v2i8, 3 },
|
||||
{ ISD::UINT_TO_FP, MVT::v2f32, MVT::v2i8, 3 },
|
||||
{ ISD::SINT_TO_FP, MVT::v2f32, MVT::v2i16, 2 },
|
||||
{ ISD::UINT_TO_FP, MVT::v2f32, MVT::v2i16, 2 },
|
||||
{ ISD::SINT_TO_FP, MVT::v2f32, MVT::v2i32, 1 },
|
||||
{ ISD::UINT_TO_FP, MVT::v2f32, MVT::v2i32, 1 },
|
||||
{ ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i1, 3 },
|
||||
{ ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i1, 3 },
|
||||
{ ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i8, 3 },
|
||||
{ ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i8, 3 },
|
||||
{ ISD::SINT_TO_FP, MVT::v4f32, MVT::v4i16, 2 },
|
||||
{ ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i16, 2 },
|
||||
{ ISD::SINT_TO_FP, MVT::v8f32, MVT::v8i16, 4 },
|
||||
{ ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i16, 4 },
|
||||
{ ISD::SINT_TO_FP, MVT::v8f32, MVT::v8i32, 2 },
|
||||
{ ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i32, 2 },
|
||||
{ ISD::SINT_TO_FP, MVT::v16f32, MVT::v16i16, 8 },
|
||||
{ ISD::UINT_TO_FP, MVT::v16f32, MVT::v16i16, 8 },
|
||||
{ ISD::SINT_TO_FP, MVT::v16f32, MVT::v16i32, 4 },
|
||||
{ ISD::UINT_TO_FP, MVT::v16f32, MVT::v16i32, 4 },
|
||||
|
||||
{ ISD::FP_TO_SINT, MVT::v4i32, MVT::v4f32, 1 },
|
||||
{ ISD::FP_TO_UINT, MVT::v4i32, MVT::v4f32, 1 },
|
||||
{ ISD::FP_TO_SINT, MVT::v4i8, MVT::v4f32, 3 },
|
||||
@@ -232,6 +254,14 @@ unsigned ARMTTI::getCastInstrCost(unsigned Opcode, Type *Dst,
|
||||
// Vector double <-> i32 conversions.
|
||||
{ ISD::SINT_TO_FP, MVT::v2f64, MVT::v2i32, 2 },
|
||||
{ ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i32, 2 },
|
||||
|
||||
{ ISD::SINT_TO_FP, MVT::v2f64, MVT::v2i8, 4 },
|
||||
{ ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i8, 4 },
|
||||
{ ISD::SINT_TO_FP, MVT::v2f64, MVT::v2i16, 3 },
|
||||
{ ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i16, 3 },
|
||||
{ ISD::SINT_TO_FP, MVT::v2f64, MVT::v2i32, 2 },
|
||||
{ ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i32, 2 },
|
||||
|
||||
{ ISD::FP_TO_SINT, MVT::v2i32, MVT::v2f64, 2 },
|
||||
{ ISD::FP_TO_UINT, MVT::v2i32, MVT::v2f64, 2 },
|
||||
{ ISD::FP_TO_SINT, MVT::v8i16, MVT::v8f32, 4 },
|
||||
|
Reference in New Issue
Block a user