mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-05 03:10:29 +00:00
[AVX-512] Use different ISD opcodes for some of the scalar intrinsic lowering. Isel is not very robust against using the same ISD opcode with different number of operands so its better to separate.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282229 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fd1fd77cb1
commit
cfb1f68fd0
@ -22632,8 +22632,11 @@ const char *X86TargetLowering::getTargetNodeName(unsigned Opcode) const {
|
||||
case X86ISD::VPMADD52H: return "X86ISD::VPMADD52H";
|
||||
case X86ISD::VPMADD52L: return "X86ISD::VPMADD52L";
|
||||
case X86ISD::VRNDSCALE: return "X86ISD::VRNDSCALE";
|
||||
case X86ISD::VRNDSCALES: return "X86ISD::VRNDSCALES";
|
||||
case X86ISD::VREDUCE: return "X86ISD::VREDUCE";
|
||||
case X86ISD::VREDUCES: return "X86ISD::VREDUCES";
|
||||
case X86ISD::VGETMANT: return "X86ISD::VGETMANT";
|
||||
case X86ISD::VGETMANTS: return "X86ISD::VGETMANTS";
|
||||
case X86ISD::PCMPESTRI: return "X86ISD::PCMPESTRI";
|
||||
case X86ISD::PCMPISTRI: return "X86ISD::PCMPISTRI";
|
||||
case X86ISD::XTEST: return "X86ISD::XTEST";
|
||||
@ -22642,14 +22645,18 @@ const char *X86TargetLowering::getTargetNodeName(unsigned Opcode) const {
|
||||
case X86ISD::SELECT: return "X86ISD::SELECT";
|
||||
case X86ISD::ADDSUB: return "X86ISD::ADDSUB";
|
||||
case X86ISD::RCP28: return "X86ISD::RCP28";
|
||||
case X86ISD::RCP28S: return "X86ISD::RCP28S";
|
||||
case X86ISD::EXP2: return "X86ISD::EXP2";
|
||||
case X86ISD::RSQRT28: return "X86ISD::RSQRT28";
|
||||
case X86ISD::RSQRT28S: return "X86ISD::RSQRT28S";
|
||||
case X86ISD::FADD_RND: return "X86ISD::FADD_RND";
|
||||
case X86ISD::FSUB_RND: return "X86ISD::FSUB_RND";
|
||||
case X86ISD::FMUL_RND: return "X86ISD::FMUL_RND";
|
||||
case X86ISD::FDIV_RND: return "X86ISD::FDIV_RND";
|
||||
case X86ISD::FSQRT_RND: return "X86ISD::FSQRT_RND";
|
||||
case X86ISD::FSQRTS_RND: return "X86ISD::FSQRTS_RND";
|
||||
case X86ISD::FGETEXP_RND: return "X86ISD::FGETEXP_RND";
|
||||
case X86ISD::FGETEXPS_RND: return "X86ISD::FGETEXPS_RND";
|
||||
case X86ISD::SCALEF: return "X86ISD::SCALEF";
|
||||
case X86ISD::SCALEFS: return "X86ISD::SCALEFS";
|
||||
case X86ISD::ADDS: return "X86ISD::ADDS";
|
||||
|
@ -209,12 +209,12 @@ namespace llvm {
|
||||
FDIV_RND,
|
||||
FMAX_RND,
|
||||
FMIN_RND,
|
||||
FSQRT_RND,
|
||||
FSQRT_RND, FSQRTS_RND,
|
||||
|
||||
// FP vector get exponent.
|
||||
FGETEXP_RND,
|
||||
FGETEXP_RND, FGETEXPS_RND,
|
||||
// Extract Normalized Mantissas.
|
||||
VGETMANT,
|
||||
VGETMANT, VGETMANTS,
|
||||
// FP Scale.
|
||||
SCALEF,
|
||||
SCALEFS,
|
||||
@ -430,9 +430,9 @@ namespace llvm {
|
||||
// Range Restriction Calculation For Packed Pairs of Float32/64 values.
|
||||
VRANGE,
|
||||
// Reduce - Perform Reduction Transformation on scalar\packed FP.
|
||||
VREDUCE,
|
||||
VREDUCE, VREDUCES,
|
||||
// RndScale - Round FP Values To Include A Given Number Of Fraction Bits.
|
||||
VRNDSCALE,
|
||||
VRNDSCALE, VRNDSCALES,
|
||||
// Tests Types Of a FP Values for packed types.
|
||||
VFPCLASS,
|
||||
// Tests Types Of a FP Values for scalar types.
|
||||
@ -541,7 +541,7 @@ namespace llvm {
|
||||
XTEST,
|
||||
|
||||
// ERI instructions.
|
||||
RSQRT28, RCP28, EXP2,
|
||||
RSQRT28, RSQRT28S, RCP28, RCP28S, EXP2,
|
||||
|
||||
// Conversions between float and half-float.
|
||||
CVTPS2PH, CVTPH2PS,
|
||||
|
@ -468,9 +468,9 @@ def X86scalef : SDNode<"X86ISD::SCALEF", SDTFPBinOpRound>;
|
||||
def X86scalefs : SDNode<"X86ISD::SCALEFS", SDTFPBinOpRound>;
|
||||
def X86fminRnd : SDNode<"X86ISD::FMIN_RND", SDTFPBinOpRound>;
|
||||
def X86fsqrtRnd : SDNode<"X86ISD::FSQRT_RND", SDTFPUnaryOpRound>;
|
||||
def X86fsqrtRnds : SDNode<"X86ISD::FSQRT_RND", SDTFPBinOpRound>;
|
||||
def X86fsqrtRnds : SDNode<"X86ISD::FSQRTS_RND", SDTFPBinOpRound>;
|
||||
def X86fgetexpRnd : SDNode<"X86ISD::FGETEXP_RND", SDTFPUnaryOpRound>;
|
||||
def X86fgetexpRnds : SDNode<"X86ISD::FGETEXP_RND", SDTFPBinOpRound>;
|
||||
def X86fgetexpRnds : SDNode<"X86ISD::FGETEXPS_RND", SDTFPBinOpRound>;
|
||||
|
||||
def X86Fmadd : SDNode<"X86ISD::FMADD", SDTFma>;
|
||||
def X86Fnmadd : SDNode<"X86ISD::FNMADD", SDTFma>;
|
||||
@ -493,11 +493,11 @@ def X86rsqrt28 : SDNode<"X86ISD::RSQRT28", SDTFPUnaryOpRound>;
|
||||
def X86rcp28 : SDNode<"X86ISD::RCP28", SDTFPUnaryOpRound>;
|
||||
def X86exp2 : SDNode<"X86ISD::EXP2", SDTFPUnaryOpRound>;
|
||||
|
||||
def X86rsqrt28s : SDNode<"X86ISD::RSQRT28", SDTFPBinOpRound>;
|
||||
def X86rcp28s : SDNode<"X86ISD::RCP28", SDTFPBinOpRound>;
|
||||
def X86RndScales : SDNode<"X86ISD::VRNDSCALE", SDTFPBinOpImmRound>;
|
||||
def X86Reduces : SDNode<"X86ISD::VREDUCE", SDTFPBinOpImmRound>;
|
||||
def X86GetMants : SDNode<"X86ISD::VGETMANT", SDTFPBinOpImmRound>;
|
||||
def X86rsqrt28s : SDNode<"X86ISD::RSQRT28S", SDTFPBinOpRound>;
|
||||
def X86rcp28s : SDNode<"X86ISD::RCP28S", SDTFPBinOpRound>;
|
||||
def X86RndScales : SDNode<"X86ISD::VRNDSCALES", SDTFPBinOpImmRound>;
|
||||
def X86Reduces : SDNode<"X86ISD::VREDUCES", SDTFPBinOpImmRound>;
|
||||
def X86GetMants : SDNode<"X86ISD::VGETMANTS", SDTFPBinOpImmRound>;
|
||||
|
||||
def SDT_PCMPISTRI : SDTypeProfile<2, 3, [SDTCisVT<0, i32>, SDTCisVT<1, i32>,
|
||||
SDTCisVT<2, v16i8>, SDTCisVT<3, v16i8>,
|
||||
|
@ -706,9 +706,9 @@ static const IntrinsicData IntrinsicsWithoutChain[] = {
|
||||
X86_INTRINSIC_DATA(avx512_mask_getexp_ps_512, INTR_TYPE_1OP_MASK_RM,
|
||||
X86ISD::FGETEXP_RND, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_getexp_sd, INTR_TYPE_SCALAR_MASK_RM,
|
||||
X86ISD::FGETEXP_RND, 0),
|
||||
X86ISD::FGETEXPS_RND, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_getexp_ss, INTR_TYPE_SCALAR_MASK_RM,
|
||||
X86ISD::FGETEXP_RND, 0),
|
||||
X86ISD::FGETEXPS_RND, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_getmant_pd_128, INTR_TYPE_2OP_MASK_RM,
|
||||
X86ISD::VGETMANT, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_getmant_pd_256, INTR_TYPE_2OP_MASK_RM,
|
||||
@ -722,9 +722,9 @@ static const IntrinsicData IntrinsicsWithoutChain[] = {
|
||||
X86_INTRINSIC_DATA(avx512_mask_getmant_ps_512, INTR_TYPE_2OP_MASK_RM,
|
||||
X86ISD::VGETMANT, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_getmant_sd, INTR_TYPE_3OP_SCALAR_MASK_RM,
|
||||
X86ISD::VGETMANT, 0),
|
||||
X86ISD::VGETMANTS, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_getmant_ss, INTR_TYPE_3OP_SCALAR_MASK_RM,
|
||||
X86ISD::VGETMANT, 0),
|
||||
X86ISD::VGETMANTS, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_insertf32x4_256, INSERT_SUBVEC,
|
||||
ISD::INSERT_SUBVECTOR, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_insertf32x4_512, INSERT_SUBVEC,
|
||||
@ -1307,8 +1307,8 @@ static const IntrinsicData IntrinsicsWithoutChain[] = {
|
||||
X86_INTRINSIC_DATA(avx512_mask_reduce_ps_128, INTR_TYPE_2OP_MASK_RM, X86ISD::VREDUCE, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_reduce_ps_256, INTR_TYPE_2OP_MASK_RM, X86ISD::VREDUCE, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_reduce_ps_512, INTR_TYPE_2OP_MASK_RM, X86ISD::VREDUCE, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_reduce_sd, INTR_TYPE_SCALAR_MASK_RM, X86ISD::VREDUCE, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_reduce_ss, INTR_TYPE_SCALAR_MASK_RM, X86ISD::VREDUCE, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_reduce_sd, INTR_TYPE_SCALAR_MASK_RM, X86ISD::VREDUCES, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_reduce_ss, INTR_TYPE_SCALAR_MASK_RM, X86ISD::VREDUCES, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_rndscale_pd_128, INTR_TYPE_2OP_MASK_RM, X86ISD::VRNDSCALE, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_rndscale_pd_256, INTR_TYPE_2OP_MASK_RM, X86ISD::VRNDSCALE, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_rndscale_pd_512, INTR_TYPE_2OP_MASK_RM, X86ISD::VRNDSCALE, 0),
|
||||
@ -1316,9 +1316,9 @@ static const IntrinsicData IntrinsicsWithoutChain[] = {
|
||||
X86_INTRINSIC_DATA(avx512_mask_rndscale_ps_256, INTR_TYPE_2OP_MASK_RM, X86ISD::VRNDSCALE, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_rndscale_ps_512, INTR_TYPE_2OP_MASK_RM, X86ISD::VRNDSCALE, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_rndscale_sd, INTR_TYPE_SCALAR_MASK_RM,
|
||||
X86ISD::VRNDSCALE, 0),
|
||||
X86ISD::VRNDSCALES, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_rndscale_ss, INTR_TYPE_SCALAR_MASK_RM,
|
||||
X86ISD::VRNDSCALE, 0),
|
||||
X86ISD::VRNDSCALES, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_scalef_pd_128, INTR_TYPE_2OP_MASK_RM,
|
||||
X86ISD::SCALEF, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_scalef_pd_256, INTR_TYPE_2OP_MASK_RM,
|
||||
@ -1360,9 +1360,9 @@ static const IntrinsicData IntrinsicsWithoutChain[] = {
|
||||
X86_INTRINSIC_DATA(avx512_mask_sqrt_ps_512, INTR_TYPE_1OP_MASK, ISD::FSQRT,
|
||||
X86ISD::FSQRT_RND),
|
||||
X86_INTRINSIC_DATA(avx512_mask_sqrt_sd, INTR_TYPE_SCALAR_MASK_RM,
|
||||
X86ISD::FSQRT_RND, 0),
|
||||
X86ISD::FSQRTS_RND, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_sqrt_ss, INTR_TYPE_SCALAR_MASK_RM,
|
||||
X86ISD::FSQRT_RND, 0),
|
||||
X86ISD::FSQRTS_RND, 0),
|
||||
X86_INTRINSIC_DATA(avx512_mask_sub_pd_512, INTR_TYPE_2OP_MASK, ISD::FSUB,
|
||||
X86ISD::FSUB_RND),
|
||||
X86_INTRINSIC_DATA(avx512_mask_sub_ps_512, INTR_TYPE_2OP_MASK, ISD::FSUB,
|
||||
@ -1718,8 +1718,8 @@ static const IntrinsicData IntrinsicsWithoutChain[] = {
|
||||
X86_INTRINSIC_DATA(avx512_rcp14_ss, INTR_TYPE_SCALAR_MASK, X86ISD::FRCPS, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rcp28_pd, INTR_TYPE_1OP_MASK_RM, X86ISD::RCP28, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rcp28_ps, INTR_TYPE_1OP_MASK_RM, X86ISD::RCP28, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rcp28_sd, INTR_TYPE_SCALAR_MASK_RM, X86ISD::RCP28, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rcp28_ss, INTR_TYPE_SCALAR_MASK_RM, X86ISD::RCP28, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rcp28_sd, INTR_TYPE_SCALAR_MASK_RM, X86ISD::RCP28S, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rcp28_ss, INTR_TYPE_SCALAR_MASK_RM, X86ISD::RCP28S, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rsqrt14_pd_128, INTR_TYPE_1OP_MASK, X86ISD::FRSQRT, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rsqrt14_pd_256, INTR_TYPE_1OP_MASK, X86ISD::FRSQRT, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rsqrt14_pd_512, INTR_TYPE_1OP_MASK, X86ISD::FRSQRT, 0),
|
||||
@ -1730,8 +1730,8 @@ static const IntrinsicData IntrinsicsWithoutChain[] = {
|
||||
X86_INTRINSIC_DATA(avx512_rsqrt14_ss, INTR_TYPE_SCALAR_MASK, X86ISD::FRSQRTS, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rsqrt28_pd, INTR_TYPE_1OP_MASK_RM,X86ISD::RSQRT28, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rsqrt28_ps, INTR_TYPE_1OP_MASK_RM,X86ISD::RSQRT28, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rsqrt28_sd, INTR_TYPE_SCALAR_MASK_RM,X86ISD::RSQRT28, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rsqrt28_ss, INTR_TYPE_SCALAR_MASK_RM,X86ISD::RSQRT28, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rsqrt28_sd, INTR_TYPE_SCALAR_MASK_RM,X86ISD::RSQRT28S, 0),
|
||||
X86_INTRINSIC_DATA(avx512_rsqrt28_ss, INTR_TYPE_SCALAR_MASK_RM,X86ISD::RSQRT28S, 0),
|
||||
X86_INTRINSIC_DATA(avx512_vcomi_sd, COMI_RM, X86ISD::COMI, X86ISD::UCOMI),
|
||||
X86_INTRINSIC_DATA(avx512_vcomi_ss, COMI_RM, X86ISD::COMI, X86ISD::UCOMI),
|
||||
X86_INTRINSIC_DATA(avx512_vcvtsd2si32, INTR_TYPE_2OP,
|
||||
|
Loading…
Reference in New Issue
Block a user