[AArch64] Replace the custom AArch64ISD::FMIN/MAX nodes with ISD::FMINNAN/MAXNAN
NFCI. This just removes custom ISDNodes that are no longer needed. llvm-svn: 244594
This commit is contained in:
parent
d616c642bb
commit
edf38f0cb0
|
@ -679,6 +679,11 @@ void AArch64TargetLowering::addTypeForNEON(EVT VT, EVT PromotedBitwiseVT) {
|
|||
ISD::SABSDIFF, ISD::UABSDIFF})
|
||||
setOperationAction(Opcode, VT.getSimpleVT(), Legal);
|
||||
|
||||
// F[MIN|MAX]NAN are available for all FP NEON types.
|
||||
if (VT.isFloatingPoint())
|
||||
for (unsigned Opcode : {ISD::FMINNAN, ISD::FMAXNAN})
|
||||
setOperationAction(Opcode, VT.getSimpleVT(), Legal);
|
||||
|
||||
if (Subtarget->isLittleEndian()) {
|
||||
for (unsigned im = (unsigned)ISD::PRE_INC;
|
||||
im != (unsigned)ISD::LAST_INDEXED_MODE; ++im) {
|
||||
|
@ -818,8 +823,6 @@ const char *AArch64TargetLowering::getTargetNodeName(unsigned Opcode) const {
|
|||
case AArch64ISD::CCMN: return "AArch64ISD::CCMN";
|
||||
case AArch64ISD::FCCMP: return "AArch64ISD::FCCMP";
|
||||
case AArch64ISD::FCMP: return "AArch64ISD::FCMP";
|
||||
case AArch64ISD::FMIN: return "AArch64ISD::FMIN";
|
||||
case AArch64ISD::FMAX: return "AArch64ISD::FMAX";
|
||||
case AArch64ISD::DUP: return "AArch64ISD::DUP";
|
||||
case AArch64ISD::DUPLANE8: return "AArch64ISD::DUPLANE8";
|
||||
case AArch64ISD::DUPLANE16: return "AArch64ISD::DUPLANE16";
|
||||
|
@ -8219,10 +8222,10 @@ static SDValue performIntrinsicCombine(SDNode *N,
|
|||
case Intrinsic::aarch64_neon_umaxv:
|
||||
return combineAcrossLanesIntrinsic(AArch64ISD::UMAXV, N, DAG);
|
||||
case Intrinsic::aarch64_neon_fmax:
|
||||
return DAG.getNode(AArch64ISD::FMAX, SDLoc(N), N->getValueType(0),
|
||||
return DAG.getNode(ISD::FMAXNAN, SDLoc(N), N->getValueType(0),
|
||||
N->getOperand(1), N->getOperand(2));
|
||||
case Intrinsic::aarch64_neon_fmin:
|
||||
return DAG.getNode(AArch64ISD::FMIN, SDLoc(N), N->getValueType(0),
|
||||
return DAG.getNode(ISD::FMINNAN, SDLoc(N), N->getValueType(0),
|
||||
N->getOperand(1), N->getOperand(2));
|
||||
case Intrinsic::aarch64_neon_sabd:
|
||||
return DAG.getNode(ISD::SABSDIFF, SDLoc(N), N->getValueType(0),
|
||||
|
@ -9147,7 +9150,7 @@ static SDValue performSelectCCCombine(SDNode *N, SelectionDAG &DAG) {
|
|||
case ISD::SETLT:
|
||||
case ISD::SETLE:
|
||||
IsOrEqual = (CC == ISD::SETLE || CC == ISD::SETOLE || CC == ISD::SETULE);
|
||||
Opcode = IsReversed ? AArch64ISD::FMAX : AArch64ISD::FMIN;
|
||||
Opcode = IsReversed ? ISD::FMAXNAN : ISD::FMINNAN;
|
||||
break;
|
||||
|
||||
case ISD::SETUGT:
|
||||
|
@ -9158,7 +9161,7 @@ static SDValue performSelectCCCombine(SDNode *N, SelectionDAG &DAG) {
|
|||
case ISD::SETGT:
|
||||
case ISD::SETGE:
|
||||
IsOrEqual = (CC == ISD::SETGE || CC == ISD::SETOGE || CC == ISD::SETUGE);
|
||||
Opcode = IsReversed ? AArch64ISD::FMIN : AArch64ISD::FMAX;
|
||||
Opcode = IsReversed ? ISD::FMINNAN : ISD::FMAXNAN;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -66,10 +66,6 @@ enum NodeType : unsigned {
|
|||
// Floating point comparison
|
||||
FCMP,
|
||||
|
||||
// Floating point max and min instructions.
|
||||
FMAX,
|
||||
FMIN,
|
||||
|
||||
// Scalar extract
|
||||
EXTR,
|
||||
|
||||
|
|
|
@ -182,9 +182,6 @@ def AArch64threadpointer : SDNode<"AArch64ISD::THREAD_POINTER", SDTPtrLeaf>;
|
|||
|
||||
def AArch64fcmp : SDNode<"AArch64ISD::FCMP", SDT_AArch64FCmp>;
|
||||
|
||||
def AArch64fmax : SDNode<"AArch64ISD::FMAX", SDTFPBinOp>;
|
||||
def AArch64fmin : SDNode<"AArch64ISD::FMIN", SDTFPBinOp>;
|
||||
|
||||
def AArch64dup : SDNode<"AArch64ISD::DUP", SDT_AArch64Dup>;
|
||||
def AArch64duplane8 : SDNode<"AArch64ISD::DUPLANE8", SDT_AArch64DupLane>;
|
||||
def AArch64duplane16 : SDNode<"AArch64ISD::DUPLANE16", SDT_AArch64DupLane>;
|
||||
|
@ -2506,18 +2503,18 @@ let SchedRW = [WriteFDiv] in {
|
|||
defm FDIV : TwoOperandFPData<0b0001, "fdiv", fdiv>;
|
||||
}
|
||||
defm FMAXNM : TwoOperandFPData<0b0110, "fmaxnm", int_aarch64_neon_fmaxnm>;
|
||||
defm FMAX : TwoOperandFPData<0b0100, "fmax", AArch64fmax>;
|
||||
defm FMAX : TwoOperandFPData<0b0100, "fmax", fmaxnan>;
|
||||
defm FMINNM : TwoOperandFPData<0b0111, "fminnm", int_aarch64_neon_fminnm>;
|
||||
defm FMIN : TwoOperandFPData<0b0101, "fmin", AArch64fmin>;
|
||||
defm FMIN : TwoOperandFPData<0b0101, "fmin", fminnan>;
|
||||
let SchedRW = [WriteFMul] in {
|
||||
defm FMUL : TwoOperandFPData<0b0000, "fmul", fmul>;
|
||||
defm FNMUL : TwoOperandFPDataNeg<0b1000, "fnmul", fmul>;
|
||||
}
|
||||
defm FSUB : TwoOperandFPData<0b0011, "fsub", fsub>;
|
||||
|
||||
def : Pat<(v1f64 (AArch64fmax (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
|
||||
def : Pat<(v1f64 (fmaxnan (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
|
||||
(FMAXDrr FPR64:$Rn, FPR64:$Rm)>;
|
||||
def : Pat<(v1f64 (AArch64fmin (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
|
||||
def : Pat<(v1f64 (fminnan (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
|
||||
(FMINDrr FPR64:$Rn, FPR64:$Rm)>;
|
||||
def : Pat<(v1f64 (int_aarch64_neon_fmaxnm (v1f64 FPR64:$Rn), (v1f64 FPR64:$Rm))),
|
||||
(FMAXNMDrr FPR64:$Rn, FPR64:$Rm)>;
|
||||
|
@ -2809,11 +2806,11 @@ defm FDIV : SIMDThreeSameVectorFP<1,0,0b11111,"fdiv", fdiv>;
|
|||
defm FMAXNMP : SIMDThreeSameVectorFP<1,0,0b11000,"fmaxnmp", int_aarch64_neon_fmaxnmp>;
|
||||
defm FMAXNM : SIMDThreeSameVectorFP<0,0,0b11000,"fmaxnm", int_aarch64_neon_fmaxnm>;
|
||||
defm FMAXP : SIMDThreeSameVectorFP<1,0,0b11110,"fmaxp", int_aarch64_neon_fmaxp>;
|
||||
defm FMAX : SIMDThreeSameVectorFP<0,0,0b11110,"fmax", AArch64fmax>;
|
||||
defm FMAX : SIMDThreeSameVectorFP<0,0,0b11110,"fmax", fmaxnan>;
|
||||
defm FMINNMP : SIMDThreeSameVectorFP<1,1,0b11000,"fminnmp", int_aarch64_neon_fminnmp>;
|
||||
defm FMINNM : SIMDThreeSameVectorFP<0,1,0b11000,"fminnm", int_aarch64_neon_fminnm>;
|
||||
defm FMINP : SIMDThreeSameVectorFP<1,1,0b11110,"fminp", int_aarch64_neon_fminp>;
|
||||
defm FMIN : SIMDThreeSameVectorFP<0,1,0b11110,"fmin", AArch64fmin>;
|
||||
defm FMIN : SIMDThreeSameVectorFP<0,1,0b11110,"fmin", fminnan>;
|
||||
|
||||
// NOTE: The operands of the PatFrag are reordered on FMLA/FMLS because the
|
||||
// instruction expects the addend first, while the fma intrinsic puts it last.
|
||||
|
|
Loading…
Reference in New Issue