[X86] Rename X86ISD::CMPM_RND and X86ISD::FSETCCM_RND to _SAE instead of _RND. Remove rounding operand.
The operand could only be the SAE encoding so no need to include it. llvm-svn: 355801
This commit is contained in:
parent
704303a2a1
commit
4c544ca993
|
@ -497,7 +497,7 @@ namespace {
|
|||
static bool isLegalMaskCompare(SDNode *N, const X86Subtarget *Subtarget) {
|
||||
unsigned Opcode = N->getOpcode();
|
||||
if (Opcode == X86ISD::CMPM || Opcode == ISD::SETCC ||
|
||||
Opcode == X86ISD::CMPM_RND || Opcode == X86ISD::VFPCLASS) {
|
||||
Opcode == X86ISD::CMPM_SAE || Opcode == X86ISD::VFPCLASS) {
|
||||
// We can get 256-bit 8 element types here without VLX being enabled. When
|
||||
// this happens we will use 512-bit operations and the mask will not be
|
||||
// zero extended.
|
||||
|
@ -509,7 +509,7 @@ static bool isLegalMaskCompare(SDNode *N, const X86Subtarget *Subtarget) {
|
|||
}
|
||||
// Scalar opcodes use 128 bit registers, but aren't subject to the VLX check.
|
||||
if (Opcode == X86ISD::VFPCLASSS || Opcode == X86ISD::FSETCCM ||
|
||||
Opcode == X86ISD::FSETCCM_RND)
|
||||
Opcode == X86ISD::FSETCCM_SAE)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
|
|
@ -5463,7 +5463,7 @@ static bool isMaskedZeroUpperBitsvXi1(unsigned int Opcode) {
|
|||
default:
|
||||
return false;
|
||||
case X86ISD::CMPM:
|
||||
case X86ISD::CMPM_RND:
|
||||
case X86ISD::CMPM_SAE:
|
||||
case ISD::SETCC:
|
||||
return true;
|
||||
}
|
||||
|
@ -21802,7 +21802,7 @@ static SDValue getScalarMaskingNode(SDValue Op, SDValue Mask,
|
|||
DAG.getBitcast(MVT::v8i1, Mask),
|
||||
DAG.getIntPtrConstant(0, dl));
|
||||
if (Op.getOpcode() == X86ISD::FSETCCM ||
|
||||
Op.getOpcode() == X86ISD::FSETCCM_RND ||
|
||||
Op.getOpcode() == X86ISD::FSETCCM_SAE ||
|
||||
Op.getOpcode() == X86ISD::VFPCLASSS)
|
||||
return DAG.getNode(ISD::AND, dl, VT, Op, IMask);
|
||||
|
||||
|
@ -22316,7 +22316,7 @@ SDValue X86TargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
|
|||
FCmp = DAG.getNode(X86ISD::FSETCCM, dl, MVT::v1i1, LHS, RHS,
|
||||
DAG.getConstant(CondVal, dl, MVT::i8));
|
||||
else if (isRoundModeSAE(Sae))
|
||||
FCmp = DAG.getNode(X86ISD::FSETCCM_RND, dl, MVT::v1i1, LHS, RHS,
|
||||
FCmp = DAG.getNode(X86ISD::FSETCCM_SAE, dl, MVT::v1i1, LHS, RHS,
|
||||
DAG.getConstant(CondVal, dl, MVT::i8), Sae);
|
||||
else
|
||||
return SDValue();
|
||||
|
@ -27511,12 +27511,12 @@ const char *X86TargetLowering::getTargetNodeName(unsigned Opcode) const {
|
|||
case X86ISD::COMI: return "X86ISD::COMI";
|
||||
case X86ISD::UCOMI: return "X86ISD::UCOMI";
|
||||
case X86ISD::CMPM: return "X86ISD::CMPM";
|
||||
case X86ISD::CMPM_RND: return "X86ISD::CMPM_RND";
|
||||
case X86ISD::CMPM_SAE: return "X86ISD::CMPM_SAE";
|
||||
case X86ISD::SETCC: return "X86ISD::SETCC";
|
||||
case X86ISD::SETCC_CARRY: return "X86ISD::SETCC_CARRY";
|
||||
case X86ISD::FSETCC: return "X86ISD::FSETCC";
|
||||
case X86ISD::FSETCCM: return "X86ISD::FSETCCM";
|
||||
case X86ISD::FSETCCM_RND: return "X86ISD::FSETCCM_RND";
|
||||
case X86ISD::FSETCCM_SAE: return "X86ISD::FSETCCM_SAE";
|
||||
case X86ISD::CMOV: return "X86ISD::CMOV";
|
||||
case X86ISD::BRCOND: return "X86ISD::BRCOND";
|
||||
case X86ISD::RET_FLAG: return "X86ISD::RET_FLAG";
|
||||
|
|
|
@ -109,8 +109,8 @@ namespace llvm {
|
|||
FSETCC,
|
||||
|
||||
/// X86 FP SETCC, similar to above, but with output as an i1 mask and
|
||||
/// with optional rounding mode.
|
||||
FSETCCM, FSETCCM_RND,
|
||||
/// and a version with SAE.
|
||||
FSETCCM, FSETCCM_SAE,
|
||||
|
||||
/// X86 conditional moves. Operand 0 and operand 1 are the two values
|
||||
/// to select from. Operand 2 is the condition code, and operand 3 is the
|
||||
|
@ -341,8 +341,8 @@ namespace llvm {
|
|||
/// Vector comparison generating mask bits for fp and
|
||||
/// integer signed and unsigned data types.
|
||||
CMPM,
|
||||
// Vector comparison with rounding mode for FP values
|
||||
CMPM_RND,
|
||||
// Vector comparison with SAE for FP values
|
||||
CMPM_SAE,
|
||||
|
||||
// Arithmetic operations with FLAGS results.
|
||||
ADD, SUB, ADC, SBB, SMUL, UMUL,
|
||||
|
|
|
@ -2055,8 +2055,7 @@ multiclass avx512_cmp_scalar<X86VectorVTInfo _, SDNode OpNode, SDNode OpNodeRnd,
|
|||
"{sae}, $src2, $src1", "$src1, $src2, {sae}",
|
||||
(OpNodeRnd (_.VT _.RC:$src1),
|
||||
(_.VT _.RC:$src2),
|
||||
imm:$cc,
|
||||
(i32 FROUND_NO_EXC))>,
|
||||
imm:$cc)>,
|
||||
EVEX_4V, EVEX_B, Sched<[sched]>;
|
||||
// Accept explicit immediate argument form instead of comparison code.
|
||||
let isAsmParserOnly = 1, hasSideEffects = 0 in {
|
||||
|
@ -2108,10 +2107,10 @@ multiclass avx512_cmp_scalar<X86VectorVTInfo _, SDNode OpNode, SDNode OpNodeRnd,
|
|||
|
||||
let Predicates = [HasAVX512] in {
|
||||
let ExeDomain = SSEPackedSingle in
|
||||
defm VCMPSSZ : avx512_cmp_scalar<f32x_info, X86cmpms, X86cmpmsRnd,
|
||||
defm VCMPSSZ : avx512_cmp_scalar<f32x_info, X86cmpms, X86cmpmsSAE,
|
||||
SchedWriteFCmp.Scl>, AVX512XSIi8Base;
|
||||
let ExeDomain = SSEPackedDouble in
|
||||
defm VCMPSDZ : avx512_cmp_scalar<f64x_info, X86cmpms, X86cmpmsRnd,
|
||||
defm VCMPSDZ : avx512_cmp_scalar<f64x_info, X86cmpms, X86cmpmsSAE,
|
||||
SchedWriteFCmp.Scl>, AVX512XDIi8Base, VEX_W;
|
||||
}
|
||||
|
||||
|
@ -2597,10 +2596,9 @@ multiclass avx512_vcmp_sae<X86FoldableSchedWrite sched, X86VectorVTInfo _> {
|
|||
(outs _.KRC:$dst),(ins _.RC:$src1, _.RC:$src2, AVXCC:$cc),
|
||||
"vcmp${cc}"#_.Suffix,
|
||||
"{sae}, $src2, $src1", "$src1, $src2, {sae}",
|
||||
(X86cmpmRnd (_.VT _.RC:$src1),
|
||||
(X86cmpmSAE (_.VT _.RC:$src1),
|
||||
(_.VT _.RC:$src2),
|
||||
imm:$cc,
|
||||
(i32 FROUND_NO_EXC))>,
|
||||
imm:$cc)>,
|
||||
EVEX_B, Sched<[sched]>;
|
||||
|
||||
let isAsmParserOnly = 1, hasSideEffects = 0 in {
|
||||
|
|
|
@ -163,25 +163,14 @@ def X86CmpMaskCC :
|
|||
SDTypeProfile<1, 3, [SDTCisVec<0>, SDTCVecEltisVT<0, i1>,
|
||||
SDTCisVec<1>, SDTCisSameAs<2, 1>,
|
||||
SDTCisSameNumEltsAs<0, 1>, SDTCisVT<3, i8>]>;
|
||||
def X86CmpMaskCCRound :
|
||||
SDTypeProfile<1, 4, [SDTCisVec<0>,SDTCVecEltisVT<0, i1>,
|
||||
SDTCisVec<1>, SDTCisFP<1>, SDTCisSameAs<2, 1>,
|
||||
SDTCisSameNumEltsAs<0, 1>, SDTCisVT<3, i8>,
|
||||
SDTCisVT<4, i32>]>;
|
||||
def X86CmpMaskCCScalar :
|
||||
SDTypeProfile<1, 3, [SDTCisInt<0>, SDTCisFP<1>, SDTCisSameAs<1, 2>,
|
||||
SDTCisVT<3, i8>]>;
|
||||
|
||||
def X86CmpMaskCCScalarRound :
|
||||
SDTypeProfile<1, 4, [SDTCisInt<0>, SDTCisFP<1>, SDTCisSameAs<1, 2>,
|
||||
SDTCisVT<3, i8>, SDTCisVT<4, i32>]>;
|
||||
|
||||
def X86cmpm : SDNode<"X86ISD::CMPM", X86CmpMaskCC>;
|
||||
// Hack to make CMPM commutable in tablegen patterns for load folding.
|
||||
def X86cmpm_c : SDNode<"X86ISD::CMPM", X86CmpMaskCC, [SDNPCommutative]>;
|
||||
def X86cmpmRnd : SDNode<"X86ISD::CMPM_RND", X86CmpMaskCCRound>;
|
||||
def X86cmpmSAE : SDNode<"X86ISD::CMPM_SAE", X86CmpMaskCC>;
|
||||
def X86cmpms : SDNode<"X86ISD::FSETCCM", X86CmpMaskCCScalar>;
|
||||
def X86cmpmsRnd : SDNode<"X86ISD::FSETCCM_RND", X86CmpMaskCCScalarRound>;
|
||||
def X86cmpmsSAE : SDNode<"X86ISD::FSETCCM_SAE", X86CmpMaskCCScalar>;
|
||||
|
||||
def X86phminpos: SDNode<"X86ISD::PHMINPOS",
|
||||
SDTypeProfile<1, 1, [SDTCisVT<0, v8i16>, SDTCisVT<1, v8i16>]>>;
|
||||
|
|
|
@ -415,10 +415,10 @@ static const IntrinsicData IntrinsicsWithoutChain[] = {
|
|||
X86_INTRINSIC_DATA(avx512_add_ps_512, INTR_TYPE_2OP, ISD::FADD, X86ISD::FADD_RND),
|
||||
X86_INTRINSIC_DATA(avx512_cmp_pd_128, CMP_MASK_CC, X86ISD::CMPM, 0),
|
||||
X86_INTRINSIC_DATA(avx512_cmp_pd_256, CMP_MASK_CC, X86ISD::CMPM, 0),
|
||||
X86_INTRINSIC_DATA(avx512_cmp_pd_512, CMP_MASK_CC, X86ISD::CMPM, X86ISD::CMPM_RND),
|
||||
X86_INTRINSIC_DATA(avx512_cmp_pd_512, CMP_MASK_CC, X86ISD::CMPM, X86ISD::CMPM_SAE),
|
||||
X86_INTRINSIC_DATA(avx512_cmp_ps_128, CMP_MASK_CC, X86ISD::CMPM, 0),
|
||||
X86_INTRINSIC_DATA(avx512_cmp_ps_256, CMP_MASK_CC, X86ISD::CMPM, 0),
|
||||
X86_INTRINSIC_DATA(avx512_cmp_ps_512, CMP_MASK_CC, X86ISD::CMPM, X86ISD::CMPM_RND),
|
||||
X86_INTRINSIC_DATA(avx512_cmp_ps_512, CMP_MASK_CC, X86ISD::CMPM, X86ISD::CMPM_SAE),
|
||||
X86_INTRINSIC_DATA(avx512_conflict_d_128, INTR_TYPE_1OP, X86ISD::CONFLICT, 0),
|
||||
X86_INTRINSIC_DATA(avx512_conflict_d_256, INTR_TYPE_1OP, X86ISD::CONFLICT, 0),
|
||||
X86_INTRINSIC_DATA(avx512_conflict_d_512, INTR_TYPE_1OP, X86ISD::CONFLICT, 0),
|
||||
|
@ -461,9 +461,9 @@ static const IntrinsicData IntrinsicsWithoutChain[] = {
|
|||
X86_INTRINSIC_DATA(avx512_mask_add_ss_round, INTR_TYPE_SCALAR_MASK,
|
||||
X86ISD::FADDS, X86ISD::FADDS_RND),
|
||||
X86_INTRINSIC_DATA(avx512_mask_cmp_sd, CMP_MASK_SCALAR_CC,
|
||||
X86ISD::FSETCCM, X86ISD::FSETCCM_RND),
|
||||
X86ISD::FSETCCM, X86ISD::FSETCCM_SAE),
|
||||
X86_INTRINSIC_DATA(avx512_mask_cmp_ss, CMP_MASK_SCALAR_CC,
|
||||
X86ISD::FSETCCM, X86ISD::FSETCCM_RND),
|
||||
X86ISD::FSETCCM, X86ISD::FSETCCM_SAE),
|
||||
|
||||
X86_INTRINSIC_DATA(avx512_mask_compress, COMPRESS_EXPAND_IN_REG,
|
||||
X86ISD::COMPRESS, 0),
|
||||
|
|
Loading…
Reference in New Issue