mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-19 10:13:13 +00:00
[AVX-512] Don't lower avx512 vcvtps2ph/vcvtph2ps nodes to ISD::FP16_TO_FP/ISD::FP_TO_FP16 with an extra x86 specific rounding mode operand. We should use a target specific ISD opcode.
llvm-svn: 282046
This commit is contained in:
parent
92806722a6
commit
9e4f5327ec
@ -17510,7 +17510,7 @@ static SDValue getVectorMaskingNode(SDValue Op, SDValue Mask,
|
||||
case X86ISD::VTRUNC:
|
||||
case X86ISD::VTRUNCS:
|
||||
case X86ISD::VTRUNCUS:
|
||||
case ISD::FP_TO_FP16:
|
||||
case X86ISD::CVTPS2PH:
|
||||
// We can't use ISD::VSELECT here because it is not always "Legal"
|
||||
// for the destination type. For example vpmovqb require only AVX512
|
||||
// and vselect that can operate on byte element type require BWI
|
||||
@ -22668,6 +22668,8 @@ const char *X86TargetLowering::getTargetNodeName(unsigned Opcode) const {
|
||||
case X86ISD::MULTISHIFT: return "X86ISD::MULTISHIFT";
|
||||
case X86ISD::SCALAR_FP_TO_SINT_RND: return "X86ISD::SCALAR_FP_TO_SINT_RND";
|
||||
case X86ISD::SCALAR_FP_TO_UINT_RND: return "X86ISD::SCALAR_FP_TO_UINT_RND";
|
||||
case X86ISD::CVTPS2PH: return "X86ISD::CVTPS2PH";
|
||||
case X86ISD::CVTPH2PS: return "X86ISD::CVTPH2PS";
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -539,6 +539,9 @@ namespace llvm {
|
||||
// ERI instructions.
|
||||
RSQRT28, RCP28, EXP2,
|
||||
|
||||
// Conversions between float and half-float.
|
||||
CVTPS2PH, CVTPH2PS,
|
||||
|
||||
// Compare and swap.
|
||||
LCMPXCHG_DAG = ISD::FIRST_TARGET_MEMORY_OPCODE,
|
||||
LCMPXCHG8_DAG,
|
||||
|
@ -558,12 +558,12 @@ def X86cvtp2UIntRnd : SDNode<"X86ISD::FP_TO_UINT_RND", SDTFloatToIntRnd>;
|
||||
def X86cvtp2Int : SDNode<"X86ISD::FP_TO_SINT_RND", SDTFloatToInt>;
|
||||
def X86cvtp2UInt : SDNode<"X86ISD::FP_TO_UINT_RND", SDTFloatToInt>;
|
||||
|
||||
def X86cvtph2ps : SDNode<"ISD::FP16_TO_FP",
|
||||
def X86cvtph2ps : SDNode<"X86ISD::CVTPH2PS",
|
||||
SDTypeProfile<1, 2, [SDTCVecEltisVT<0, f32>,
|
||||
SDTCVecEltisVT<1, i16>,
|
||||
SDTCisVT<2, i32>]> >;
|
||||
|
||||
def X86cvtps2ph : SDNode<"ISD::FP_TO_FP16",
|
||||
def X86cvtps2ph : SDNode<"X86ISD::CVTPS2PH",
|
||||
SDTypeProfile<1, 3, [SDTCVecEltisVT<0, i16>,
|
||||
SDTCVecEltisVT<1, f32>,
|
||||
SDTCisVT<2, i32>,
|
||||
|
@ -1396,17 +1396,17 @@ static const IntrinsicData IntrinsicsWithoutChain[] = {
|
||||
X86_INTRINSIC_DATA(avx512_mask_valign_q_512, INTR_TYPE_3OP_IMM8_MASK,
|
||||
X86ISD::VALIGN, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_vcvtph2ps_128, INTR_TYPE_1OP_MASK_RM,
|
||||
ISD::FP16_TO_FP, 0),
|
||||
X86ISD::CVTPH2PS, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_vcvtph2ps_256, INTR_TYPE_1OP_MASK_RM,
|
||||
ISD::FP16_TO_FP, 0),
|
||||
X86ISD::CVTPH2PS, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_vcvtph2ps_512, INTR_TYPE_1OP_MASK_RM,
|
||||
ISD::FP16_TO_FP, 0),
|
||||
X86ISD::CVTPH2PS, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_vcvtps2ph_128, INTR_TYPE_2OP_MASK_RM,
|
||||
ISD::FP_TO_FP16, 0),
|
||||
X86ISD::CVTPS2PH, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_vcvtps2ph_256, INTR_TYPE_2OP_MASK_RM,
|
||||
ISD::FP_TO_FP16, 0),
|
||||
X86ISD::CVTPS2PH, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_vcvtps2ph_512, INTR_TYPE_2OP_MASK_RM,
|
||||
ISD::FP_TO_FP16, 0),
|
||||
X86ISD::CVTPS2PH, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_vfmadd_pd_128, FMA_OP_MASK, X86ISD::FMADD, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_vfmadd_pd_256, FMA_OP_MASK, X86ISD::FMADD, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_vfmadd_pd_512, FMA_OP_MASK, X86ISD::FMADD,
|
||||
|
Loading…
x
Reference in New Issue
Block a user