mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
[SelectionDAG] Remove ISD::FP_ROUND_INREG
I don't think anything in tree creates this node. So all of this code appears to be dead. Code coverage agrees http://lab.llvm.org:8080/coverage/coverage-reports/llvm/coverage/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp.html Differential Revision: https://reviews.llvm.org/D67312 llvm-svn: 371431
This commit is contained in:
parent
49685d1ebe
commit
d97bf0b804
@ -40,6 +40,8 @@ Non-comprehensive list of changes in this release
|
||||
functionality, or simply have a lot to talk about), see the `NOTE` below
|
||||
for adding a new subsection.
|
||||
|
||||
* The ISD::FP_ROUND_INREG opcode and related code was removed from SelectionDAG.
|
||||
|
||||
.. NOTE
|
||||
If you would like to document a larger change, then you can add a
|
||||
subsection about it right here. You can copy the following boilerplate
|
||||
|
@ -576,13 +576,6 @@ namespace ISD {
|
||||
/// 3 Round to -inf
|
||||
FLT_ROUNDS_,
|
||||
|
||||
/// X = FP_ROUND_INREG(Y, VT) - This operator takes an FP register, and
|
||||
/// rounds it to a floating point value. It then promotes it and returns it
|
||||
/// in a register of the same size. This operation effectively just
|
||||
/// discards excess precision. The type to round down to is specified by
|
||||
/// the VT operand, a VTSDNode.
|
||||
FP_ROUND_INREG,
|
||||
|
||||
/// X = FP_EXTEND(Y) - Extend a smaller FP type into a larger FP type.
|
||||
FP_EXTEND,
|
||||
|
||||
|
@ -440,7 +440,6 @@ namespace {
|
||||
SDValue visitFP_TO_SINT(SDNode *N);
|
||||
SDValue visitFP_TO_UINT(SDNode *N);
|
||||
SDValue visitFP_ROUND(SDNode *N);
|
||||
SDValue visitFP_ROUND_INREG(SDNode *N);
|
||||
SDValue visitFP_EXTEND(SDNode *N);
|
||||
SDValue visitFNEG(SDNode *N);
|
||||
SDValue visitFABS(SDNode *N);
|
||||
@ -1814,7 +1813,6 @@ SDValue DAGCombiner::visit(SDNode *N) {
|
||||
case ISD::FP_TO_SINT: return visitFP_TO_SINT(N);
|
||||
case ISD::FP_TO_UINT: return visitFP_TO_UINT(N);
|
||||
case ISD::FP_ROUND: return visitFP_ROUND(N);
|
||||
case ISD::FP_ROUND_INREG: return visitFP_ROUND_INREG(N);
|
||||
case ISD::FP_EXTEND: return visitFP_EXTEND(N);
|
||||
case ISD::FNEG: return visitFNEG(N);
|
||||
case ISD::FABS: return visitFABS(N);
|
||||
@ -13151,22 +13149,6 @@ SDValue DAGCombiner::visitFP_ROUND(SDNode *N) {
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
SDValue DAGCombiner::visitFP_ROUND_INREG(SDNode *N) {
|
||||
SDValue N0 = N->getOperand(0);
|
||||
EVT VT = N->getValueType(0);
|
||||
EVT EVT = cast<VTSDNode>(N->getOperand(1))->getVT();
|
||||
ConstantFPSDNode *N0CFP = dyn_cast<ConstantFPSDNode>(N0);
|
||||
|
||||
// fold (fp_round_inreg c1fp) -> c1fp
|
||||
if (N0CFP && isTypeLegal(EVT)) {
|
||||
SDLoc DL(N);
|
||||
SDValue Round = DAG.getConstantFP(*N0CFP->getConstantFPValue(), DL, EVT);
|
||||
return DAG.getNode(ISD::FP_EXTEND, DL, VT, Round);
|
||||
}
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
SDValue DAGCombiner::visitFP_EXTEND(SDNode *N) {
|
||||
SDValue N0 = N->getOperand(0);
|
||||
EVT VT = N->getValueType(0);
|
||||
|
@ -1013,7 +1013,6 @@ void SelectionDAGLegalize::LegalizeOp(SDNode *Node) {
|
||||
Action = TLI.getOperationAction(Node->getOpcode(),
|
||||
Node->getOperand(0).getValueType());
|
||||
break;
|
||||
case ISD::FP_ROUND_INREG:
|
||||
case ISD::SIGN_EXTEND_INREG: {
|
||||
EVT InnerType = cast<VTSDNode>(Node->getOperand(1))->getVT();
|
||||
Action = TLI.getOperationAction(Node->getOpcode(), InnerType);
|
||||
@ -2862,19 +2861,6 @@ bool SelectionDAGLegalize::ExpandNode(SDNode *Node) {
|
||||
Results.push_back(Tmp1);
|
||||
break;
|
||||
}
|
||||
case ISD::FP_ROUND_INREG: {
|
||||
// The only way we can lower this is to turn it into a TRUNCSTORE,
|
||||
// EXTLOAD pair, targeting a temporary location (a stack slot).
|
||||
|
||||
// NOTE: there is a choice here between constantly creating new stack
|
||||
// slots and always reusing the same one. We currently always create
|
||||
// new ones, as reuse may inhibit scheduling.
|
||||
EVT ExtraVT = cast<VTSDNode>(Node->getOperand(1))->getVT();
|
||||
Tmp1 = EmitStackConvert(Node->getOperand(0), ExtraVT,
|
||||
Node->getValueType(0), dl);
|
||||
Results.push_back(Tmp1);
|
||||
break;
|
||||
}
|
||||
case ISD::UINT_TO_FP:
|
||||
if (TLI.expandUINT_TO_FP(Node, Tmp1, DAG)) {
|
||||
Results.push_back(Tmp1);
|
||||
|
@ -459,10 +459,6 @@ SDValue VectorLegalizer::LegalizeOp(SDValue Op) {
|
||||
Node->getValueType(0), Scale);
|
||||
break;
|
||||
}
|
||||
case ISD::FP_ROUND_INREG:
|
||||
Action = TLI.getOperationAction(Node->getOpcode(),
|
||||
cast<VTSDNode>(Node->getOperand(1))->getVT());
|
||||
break;
|
||||
case ISD::SINT_TO_FP:
|
||||
case ISD::UINT_TO_FP:
|
||||
case ISD::VECREDUCE_ADD:
|
||||
|
@ -52,7 +52,6 @@ void DAGTypeLegalizer::ScalarizeVectorResult(SDNode *N, unsigned ResNo) {
|
||||
case ISD::EXTRACT_SUBVECTOR: R = ScalarizeVecRes_EXTRACT_SUBVECTOR(N); break;
|
||||
case ISD::STRICT_FP_ROUND: R = ScalarizeVecRes_STRICT_FP_ROUND(N); break;
|
||||
case ISD::FP_ROUND: R = ScalarizeVecRes_FP_ROUND(N); break;
|
||||
case ISD::FP_ROUND_INREG: R = ScalarizeVecRes_InregOp(N); break;
|
||||
case ISD::FPOWI: R = ScalarizeVecRes_FPOWI(N); break;
|
||||
case ISD::INSERT_VECTOR_ELT: R = ScalarizeVecRes_INSERT_VECTOR_ELT(N); break;
|
||||
case ISD::LOAD: R = ScalarizeVecRes_LOAD(cast<LoadSDNode>(N));break;
|
||||
@ -852,7 +851,6 @@ void DAGTypeLegalizer::SplitVectorResult(SDNode *N, unsigned ResNo) {
|
||||
case ISD::CONCAT_VECTORS: SplitVecRes_CONCAT_VECTORS(N, Lo, Hi); break;
|
||||
case ISD::EXTRACT_SUBVECTOR: SplitVecRes_EXTRACT_SUBVECTOR(N, Lo, Hi); break;
|
||||
case ISD::INSERT_SUBVECTOR: SplitVecRes_INSERT_SUBVECTOR(N, Lo, Hi); break;
|
||||
case ISD::FP_ROUND_INREG: SplitVecRes_InregOp(N, Lo, Hi); break;
|
||||
case ISD::FPOWI: SplitVecRes_FPOWI(N, Lo, Hi); break;
|
||||
case ISD::FCOPYSIGN: SplitVecRes_FCOPYSIGN(N, Lo, Hi); break;
|
||||
case ISD::INSERT_VECTOR_ELT: SplitVecRes_INSERT_VECTOR_ELT(N, Lo, Hi); break;
|
||||
@ -2708,7 +2706,6 @@ void DAGTypeLegalizer::WidenVectorResult(SDNode *N, unsigned ResNo) {
|
||||
case ISD::BUILD_VECTOR: Res = WidenVecRes_BUILD_VECTOR(N); break;
|
||||
case ISD::CONCAT_VECTORS: Res = WidenVecRes_CONCAT_VECTORS(N); break;
|
||||
case ISD::EXTRACT_SUBVECTOR: Res = WidenVecRes_EXTRACT_SUBVECTOR(N); break;
|
||||
case ISD::FP_ROUND_INREG: Res = WidenVecRes_InregOp(N); break;
|
||||
case ISD::INSERT_VECTOR_ELT: Res = WidenVecRes_INSERT_VECTOR_ELT(N); break;
|
||||
case ISD::LOAD: Res = WidenVecRes_LOAD(N); break;
|
||||
case ISD::SCALAR_TO_VECTOR: Res = WidenVecRes_SCALAR_TO_VECTOR(N); break;
|
||||
|
@ -5154,22 +5154,6 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
|
||||
if (N2C && N2C->isNullValue())
|
||||
return N1;
|
||||
break;
|
||||
case ISD::FP_ROUND_INREG: {
|
||||
EVT EVT = cast<VTSDNode>(N2)->getVT();
|
||||
assert(VT == N1.getValueType() && "Not an inreg round!");
|
||||
assert(VT.isFloatingPoint() && EVT.isFloatingPoint() &&
|
||||
"Cannot FP_ROUND_INREG integer types");
|
||||
assert(EVT.isVector() == VT.isVector() &&
|
||||
"FP_ROUND_INREG type should be vector iff the operand "
|
||||
"type is vector!");
|
||||
assert((!EVT.isVector() ||
|
||||
EVT.getVectorNumElements() == VT.getVectorNumElements()) &&
|
||||
"Vector element counts must match in FP_ROUND_INREG");
|
||||
assert(EVT.bitsLE(VT) && "Not rounding down!");
|
||||
(void)EVT;
|
||||
if (cast<VTSDNode>(N2)->getVT() == VT) return N1; // Not actually rounding.
|
||||
break;
|
||||
}
|
||||
case ISD::FP_ROUND:
|
||||
assert(VT.isFloatingPoint() &&
|
||||
N1.getValueType().isFloatingPoint() &&
|
||||
@ -5380,7 +5364,6 @@ SDValue SelectionDAG::getNode(unsigned Opcode, const SDLoc &DL, EVT VT,
|
||||
std::swap(N1, N2);
|
||||
} else {
|
||||
switch (Opcode) {
|
||||
case ISD::FP_ROUND_INREG:
|
||||
case ISD::SIGN_EXTEND_INREG:
|
||||
case ISD::SUB:
|
||||
return getUNDEF(VT); // fold op(undef, arg2) -> undef
|
||||
@ -9157,8 +9140,7 @@ SDValue SelectionDAG::UnrollVectorOp(SDNode *N, unsigned ResNE) {
|
||||
getShiftAmountOperand(Operands[0].getValueType(),
|
||||
Operands[1])));
|
||||
break;
|
||||
case ISD::SIGN_EXTEND_INREG:
|
||||
case ISD::FP_ROUND_INREG: {
|
||||
case ISD::SIGN_EXTEND_INREG: {
|
||||
EVT ExtVT = cast<VTSDNode>(Operands[1])->getVT().getVectorElementType();
|
||||
Scalars.push_back(getNode(N->getOpcode(), dl, EltVT,
|
||||
Operands[0],
|
||||
|
@ -319,7 +319,6 @@ std::string SDNode::getOperationName(const SelectionDAG *G) const {
|
||||
case ISD::FP_ROUND: return "fp_round";
|
||||
case ISD::STRICT_FP_ROUND: return "strict_fp_round";
|
||||
case ISD::FLT_ROUNDS_: return "flt_rounds";
|
||||
case ISD::FP_ROUND_INREG: return "fp_round_inreg";
|
||||
case ISD::FP_EXTEND: return "fp_extend";
|
||||
case ISD::STRICT_FP_EXTEND: return "strict_fp_extend";
|
||||
|
||||
|
@ -950,7 +950,6 @@ PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
|
||||
setOperationAction(ISD::FP_TO_UINT , MVT::v4f64, Expand);
|
||||
|
||||
setOperationAction(ISD::FP_ROUND , MVT::v4f32, Legal);
|
||||
setOperationAction(ISD::FP_ROUND_INREG , MVT::v4f32, Expand);
|
||||
setOperationAction(ISD::FP_EXTEND, MVT::v4f64, Legal);
|
||||
|
||||
setOperationAction(ISD::FNEG , MVT::v4f64, Legal);
|
||||
|
@ -326,7 +326,6 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
|
||||
setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i16 , Legal);
|
||||
setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i8 , Legal);
|
||||
setOperationAction(ISD::SIGN_EXTEND_INREG, MVT::i1 , Expand);
|
||||
setOperationAction(ISD::FP_ROUND_INREG , MVT::f32 , Expand);
|
||||
|
||||
setOperationAction(ISD::FREM , MVT::f32 , Expand);
|
||||
setOperationAction(ISD::FREM , MVT::f64 , Expand);
|
||||
|
Loading…
Reference in New Issue
Block a user