diff options
Diffstat (limited to 'llvm/lib/Target/Mips/MipsSEISelDAGToDAG.cpp')
-rw-r--r-- | llvm/lib/Target/Mips/MipsSEISelDAGToDAG.cpp | 65 |
1 files changed, 33 insertions, 32 deletions
diff --git a/llvm/lib/Target/Mips/MipsSEISelDAGToDAG.cpp b/llvm/lib/Target/Mips/MipsSEISelDAGToDAG.cpp index 5af35487d6c..7de86413de1 100644 --- a/llvm/lib/Target/Mips/MipsSEISelDAGToDAG.cpp +++ b/llvm/lib/Target/Mips/MipsSEISelDAGToDAG.cpp @@ -236,7 +236,7 @@ void MipsSEDAGToDAGISel::processFunctionAfterISel(MachineFunction &MF) { } } -SDNode *MipsSEDAGToDAGISel::selectAddESubE(unsigned MOp, SDValue InFlag, +void MipsSEDAGToDAGISel::selectAddESubE(unsigned MOp, SDValue InFlag, SDValue CmpLHS, SDLoc DL, SDNode *Node) const { unsigned Opc = InFlag.getOpcode(); (void)Opc; @@ -275,8 +275,7 @@ SDNode *MipsSEDAGToDAGISel::selectAddESubE(unsigned MOp, SDValue InFlag, if (!C || C->getZExtValue()) AddCarry = CurDAG->getMachineNode(ADDuOp, DL, VT, SDValue(Carry, 0), RHS); - return CurDAG->SelectNodeTo(Node, MOp, VT, MVT::Glue, LHS, - SDValue(AddCarry, 0)); + CurDAG->SelectNodeTo(Node, MOp, VT, MVT::Glue, LHS, SDValue(AddCarry, 0)); } /// Match frameindex @@ -706,7 +705,7 @@ bool MipsSEDAGToDAGISel::selectVSplatUimmInvPow2(SDValue N, return false; } -std::pair<bool, SDNode*> MipsSEDAGToDAGISel::selectNode(SDNode *Node) { +bool MipsSEDAGToDAGISel::trySelect(SDNode *Node) { unsigned Opcode = Node->getOpcode(); SDLoc DL(Node); @@ -714,16 +713,14 @@ std::pair<bool, SDNode*> MipsSEDAGToDAGISel::selectNode(SDNode *Node) { // Instruction Selection not handled by the auto-generated // tablegen selection should be handled here. /// - SDNode *Result; - switch(Opcode) { default: break; case ISD::SUBE: { SDValue InFlag = Node->getOperand(2); unsigned Opc = Subtarget->isGP64bit() ? Mips::DSUBu : Mips::SUBu; - Result = selectAddESubE(Opc, InFlag, InFlag.getOperand(0), DL, Node); - return std::make_pair(true, Result); + selectAddESubE(Opc, InFlag, InFlag.getOperand(0), DL, Node); + return true; } case ISD::ADDE: { @@ -731,8 +728,8 @@ std::pair<bool, SDNode*> MipsSEDAGToDAGISel::selectNode(SDNode *Node) { break; SDValue InFlag = Node->getOperand(2); unsigned Opc = Subtarget->isGP64bit() ? Mips::DADDu : Mips::ADDu; - Result = selectAddESubE(Opc, InFlag, InFlag.getValue(0), DL, Node); - return std::make_pair(true, Result); + selectAddESubE(Opc, InFlag, InFlag.getValue(0), DL, Node); + return true; } case ISD::ConstantFP: { @@ -741,20 +738,20 @@ std::pair<bool, SDNode*> MipsSEDAGToDAGISel::selectNode(SDNode *Node) { if (Subtarget->isGP64bit()) { SDValue Zero = CurDAG->getCopyFromReg(CurDAG->getEntryNode(), DL, Mips::ZERO_64, MVT::i64); - Result = CurDAG->getMachineNode(Mips::DMTC1, DL, MVT::f64, Zero); + ReplaceNode(Node, + CurDAG->getMachineNode(Mips::DMTC1, DL, MVT::f64, Zero)); } else if (Subtarget->isFP64bit()) { SDValue Zero = CurDAG->getCopyFromReg(CurDAG->getEntryNode(), DL, Mips::ZERO, MVT::i32); - Result = CurDAG->getMachineNode(Mips::BuildPairF64_64, DL, MVT::f64, - Zero, Zero); + ReplaceNode(Node, CurDAG->getMachineNode(Mips::BuildPairF64_64, DL, + MVT::f64, Zero, Zero)); } else { SDValue Zero = CurDAG->getCopyFromReg(CurDAG->getEntryNode(), DL, Mips::ZERO, MVT::i32); - Result = CurDAG->getMachineNode(Mips::BuildPairF64, DL, MVT::f64, Zero, - Zero); + ReplaceNode(Node, CurDAG->getMachineNode(Mips::BuildPairF64, DL, + MVT::f64, Zero, Zero)); } - - return std::make_pair(true, Result); + return true; } break; } @@ -797,7 +794,8 @@ std::pair<bool, SDNode*> MipsSEDAGToDAGISel::selectNode(SDNode *Node) { SDValue(RegOpnd, 0), ImmOpnd); } - return std::make_pair(true, RegOpnd); + ReplaceNode(Node, RegOpnd); + return true; } case ISD::INTRINSIC_W_CHAIN: { @@ -810,7 +808,8 @@ std::pair<bool, SDNode*> MipsSEDAGToDAGISel::selectNode(SDNode *Node) { SDValue RegIdx = Node->getOperand(2); SDValue Reg = CurDAG->getCopyFromReg(ChainIn, DL, getMSACtrlReg(RegIdx), MVT::i32); - return std::make_pair(true, Reg.getNode()); + ReplaceNode(Node, Reg.getNode()); + return true; } } break; @@ -824,10 +823,10 @@ std::pair<bool, SDNode*> MipsSEDAGToDAGISel::selectNode(SDNode *Node) { case Intrinsic::mips_move_v: // Like an assignment but will always produce a move.v even if // unnecessary. - return std::make_pair(true, - CurDAG->getMachineNode(Mips::MOVE_V, DL, - Node->getValueType(0), - Node->getOperand(1))); + ReplaceNode(Node, CurDAG->getMachineNode(Mips::MOVE_V, DL, + Node->getValueType(0), + Node->getOperand(1))); + return true; } break; } @@ -843,7 +842,8 @@ std::pair<bool, SDNode*> MipsSEDAGToDAGISel::selectNode(SDNode *Node) { SDValue Value = Node->getOperand(3); SDValue ChainOut = CurDAG->getCopyToReg(ChainIn, DL, getMSACtrlReg(RegIdx), Value); - return std::make_pair(true, ChainOut.getNode()); + ReplaceNode(Node, ChainOut.getNode()); + return true; } } break; @@ -868,8 +868,8 @@ std::pair<bool, SDNode*> MipsSEDAGToDAGISel::selectNode(SDNode *Node) { SDValue Chain = CurDAG->getCopyToReg(CurDAG->getEntryNode(), DL, DestReg, SDValue(Rdhwr, 0)); SDValue ResNode = CurDAG->getCopyFromReg(Chain, DL, DestReg, PtrVT); - ReplaceUses(SDValue(Node, 0), ResNode); - return std::make_pair(true, ResNode.getNode()); + ReplaceNode(Node, ResNode.getNode()); + return true; } case ISD::BUILD_VECTOR: { @@ -894,16 +894,16 @@ std::pair<bool, SDNode*> MipsSEDAGToDAGISel::selectNode(SDNode *Node) { EVT ViaVecTy; if (!Subtarget->hasMSA() || !BVN->getValueType(0).is128BitVector()) - return std::make_pair(false, nullptr); + return false; if (!BVN->isConstantSplat(SplatValue, SplatUndef, SplatBitSize, HasAnyUndefs, 8, !Subtarget->isLittle())) - return std::make_pair(false, nullptr); + return false; switch (SplatBitSize) { default: - return std::make_pair(false, nullptr); + return false; case 8: LdiOp = Mips::LDI_B; ViaVecTy = MVT::v16i8; @@ -923,7 +923,7 @@ std::pair<bool, SDNode*> MipsSEDAGToDAGISel::selectNode(SDNode *Node) { } if (!SplatValue.isSignedIntN(10)) - return std::make_pair(false, nullptr); + return false; SDValue Imm = CurDAG->getTargetConstant(SplatValue, DL, ViaVecTy.getVectorElementType()); @@ -944,12 +944,13 @@ std::pair<bool, SDNode*> MipsSEDAGToDAGISel::selectNode(SDNode *Node) { MVT::i32)); } - return std::make_pair(true, Res); + ReplaceNode(Node, Res); + return true; } } - return std::make_pair(false, nullptr); + return false; } bool MipsSEDAGToDAGISel:: |