Convert SelectionDAG::MorphNodeTo to use ArrayRef.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207378 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Craig Topper
2014-04-27 19:21:16 +00:00
parent 1aa05f3844
commit f564ea31f0
6 changed files with 18 additions and 15 deletions

View File

@ -862,7 +862,7 @@ public:
/// MorphNodeTo - This *mutates* the specified node to have the specified /// MorphNodeTo - This *mutates* the specified node to have the specified
/// return type, opcode, and operands. /// return type, opcode, and operands.
SDNode *MorphNodeTo(SDNode *N, unsigned Opc, SDVTList VTs, SDNode *MorphNodeTo(SDNode *N, unsigned Opc, SDVTList VTs,
const SDValue *Ops, unsigned NumOps); ArrayRef<SDValue> Ops);
/// getMachineNode - These are used for target selectors to create a new node /// getMachineNode - These are used for target selectors to create a new node
/// with specified return type(s), MachineInstr opcode, and operands. /// with specified return type(s), MachineInstr opcode, and operands.

View File

@ -153,7 +153,7 @@ static void CloneNodeWithValues(SDNode *N, SelectionDAG *DAG,
End = MN->memoperands_end(); End = MN->memoperands_end();
} }
DAG->MorphNodeTo(N, N->getOpcode(), VTList, &Ops[0], Ops.size()); DAG->MorphNodeTo(N, N->getOpcode(), VTList, Ops);
// Reset the memory references // Reset the memory references
if (MN) if (MN)

View File

@ -5301,7 +5301,7 @@ SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc, SDNode *SelectionDAG::SelectNodeTo(SDNode *N, unsigned MachineOpc,
SDVTList VTs,ArrayRef<SDValue> Ops) { SDVTList VTs,ArrayRef<SDValue> Ops) {
N = MorphNodeTo(N, ~MachineOpc, VTs, Ops.data(), Ops.size()); N = MorphNodeTo(N, ~MachineOpc, VTs, Ops);
// Reset the NodeID to -1. // Reset the NodeID to -1.
N->setNodeId(-1); N->setNodeId(-1);
return N; return N;
@ -5338,13 +5338,13 @@ SDNode *SelectionDAG::UpdadeSDLocOnMergedSDNode(SDNode *N, SDLoc OLoc) {
/// the node's users. /// the node's users.
/// ///
SDNode *SelectionDAG::MorphNodeTo(SDNode *N, unsigned Opc, SDNode *SelectionDAG::MorphNodeTo(SDNode *N, unsigned Opc,
SDVTList VTs, const SDValue *Ops, SDVTList VTs, ArrayRef<SDValue> Ops) {
unsigned NumOps) { unsigned NumOps = Ops.size();
// If an identical node already exists, use it. // If an identical node already exists, use it.
void *IP = nullptr; void *IP = nullptr;
if (VTs.VTs[VTs.NumVTs-1] != MVT::Glue) { if (VTs.VTs[VTs.NumVTs-1] != MVT::Glue) {
FoldingSetNodeID ID; FoldingSetNodeID ID;
AddNodeIDNode(ID, Opc, VTs, Ops, NumOps); AddNodeIDNode(ID, Opc, VTs, Ops.data(), NumOps);
if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP)) if (SDNode *ON = CSEMap.FindNodeOrInsertPos(ID, IP))
return UpdadeSDLocOnMergedSDNode(ON, SDLoc(N)); return UpdadeSDLocOnMergedSDNode(ON, SDLoc(N));
} }
@ -5381,22 +5381,22 @@ SDNode *SelectionDAG::MorphNodeTo(SDNode *N, unsigned Opc,
// remainder of the current SelectionDAG iteration, so we can allocate // remainder of the current SelectionDAG iteration, so we can allocate
// the operands directly out of a pool with no recycling metadata. // the operands directly out of a pool with no recycling metadata.
MN->InitOperands(OperandAllocator.Allocate<SDUse>(NumOps), MN->InitOperands(OperandAllocator.Allocate<SDUse>(NumOps),
Ops, NumOps); Ops.data(), NumOps);
else else
MN->InitOperands(MN->LocalOperands, Ops, NumOps); MN->InitOperands(MN->LocalOperands, Ops.data(), NumOps);
MN->OperandsNeedDelete = false; MN->OperandsNeedDelete = false;
} else } else
MN->InitOperands(MN->OperandList, Ops, NumOps); MN->InitOperands(MN->OperandList, Ops.data(), NumOps);
} else { } else {
// If NumOps is larger than the # of operands we currently have, reallocate // If NumOps is larger than the # of operands we currently have, reallocate
// the operand list. // the operand list.
if (NumOps > N->NumOperands) { if (NumOps > N->NumOperands) {
if (N->OperandsNeedDelete) if (N->OperandsNeedDelete)
delete[] N->OperandList; delete[] N->OperandList;
N->InitOperands(new SDUse[NumOps], Ops, NumOps); N->InitOperands(new SDUse[NumOps], Ops.data(), NumOps);
N->OperandsNeedDelete = true; N->OperandsNeedDelete = true;
} else } else
N->InitOperands(N->OperandList, Ops, NumOps); N->InitOperands(N->OperandList, Ops.data(), NumOps);
} }
// Delete any nodes that are still dead after adding the uses for the // Delete any nodes that are still dead after adding the uses for the

View File

@ -2106,7 +2106,8 @@ MorphNode(SDNode *Node, unsigned TargetOpc, SDVTList VTList,
// Call the underlying SelectionDAG routine to do the transmogrification. Note // Call the underlying SelectionDAG routine to do the transmogrification. Note
// that this deletes operands of the old node that become dead. // that this deletes operands of the old node that become dead.
SDNode *Res = CurDAG->MorphNodeTo(Node, ~TargetOpc, VTList, Ops, NumOps); SDNode *Res = CurDAG->MorphNodeTo(Node, ~TargetOpc, VTList,
ArrayRef<SDValue>(Ops, NumOps));
// MorphNodeTo can operate in two ways: if an existing node with the // MorphNodeTo can operate in two ways: if an existing node with the
// specified operands exists, it can just return it. Otherwise, it // specified operands exists, it can just return it. Otherwise, it

View File

@ -488,7 +488,8 @@ static SDValue performANDCombine(SDNode *N, SelectionDAG &DAG,
Log2 == ExtendTySize) { Log2 == ExtendTySize) {
SDValue Ops[] = { Op0->getOperand(0), Op0->getOperand(1), Op0Op2 }; SDValue Ops[] = { Op0->getOperand(0), Op0->getOperand(1), Op0Op2 };
DAG.MorphNodeTo(Op0.getNode(), MipsISD::VEXTRACT_ZEXT_ELT, DAG.MorphNodeTo(Op0.getNode(), MipsISD::VEXTRACT_ZEXT_ELT,
Op0->getVTList(), Ops, Op0->getNumOperands()); Op0->getVTList(),
ArrayRef<SDValue>(Ops, Op0->getNumOperands()));
return Op0; return Op0;
} }
} }
@ -832,7 +833,8 @@ static SDValue performSRACombine(SDNode *N, SelectionDAG &DAG,
SDValue Ops[] = { Op0Op0->getOperand(0), Op0Op0->getOperand(1), SDValue Ops[] = { Op0Op0->getOperand(0), Op0Op0->getOperand(1),
Op0Op0->getOperand(2) }; Op0Op0->getOperand(2) };
DAG.MorphNodeTo(Op0Op0.getNode(), MipsISD::VEXTRACT_SEXT_ELT, DAG.MorphNodeTo(Op0Op0.getNode(), MipsISD::VEXTRACT_SEXT_ELT,
Op0Op0->getVTList(), Ops, Op0Op0->getNumOperands()); Op0Op0->getVTList(),
ArrayRef<SDValue>(Ops, Op0Op0->getNumOperands()));
return Op0Op0; return Op0Op0;
} }
} }

View File

@ -751,7 +751,7 @@ SDValue SITargetLowering::LowerBRCOND(SDValue BRCOND,
BR->getOperand(0), BR->getOperand(0),
BRCOND.getOperand(2) BRCOND.getOperand(2)
}; };
DAG.MorphNodeTo(BR, ISD::BR, BR->getVTList(), Ops, 2); DAG.MorphNodeTo(BR, ISD::BR, BR->getVTList(), Ops);
} }
SDValue Chain = SDValue(Result, Result->getNumValues() - 1); SDValue Chain = SDValue(Result, Result->getNumValues() - 1);