mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-28 09:31:03 +00:00
Change UpdateNodeOperands' operand and return value from SDValue to
SDNode *, since it doesn't care about the ResNo value. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106282 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
07587a4500
commit
027657db7c
@ -678,15 +678,15 @@ public:
|
||||
/// already exists. If the resultant node does not exist in the DAG, the
|
||||
/// input node is returned. As a degenerate case, if you specify the same
|
||||
/// input operands as the node already has, the input node is returned.
|
||||
SDValue UpdateNodeOperands(SDValue N, SDValue Op);
|
||||
SDValue UpdateNodeOperands(SDValue N, SDValue Op1, SDValue Op2);
|
||||
SDValue UpdateNodeOperands(SDValue N, SDValue Op1, SDValue Op2,
|
||||
SDNode *UpdateNodeOperands(SDNode *N, SDValue Op);
|
||||
SDNode *UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2);
|
||||
SDNode *UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2,
|
||||
SDValue Op3);
|
||||
SDValue UpdateNodeOperands(SDValue N, SDValue Op1, SDValue Op2,
|
||||
SDNode *UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2,
|
||||
SDValue Op3, SDValue Op4);
|
||||
SDValue UpdateNodeOperands(SDValue N, SDValue Op1, SDValue Op2,
|
||||
SDNode *UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2,
|
||||
SDValue Op3, SDValue Op4, SDValue Op5);
|
||||
SDValue UpdateNodeOperands(SDValue N,
|
||||
SDNode *UpdateNodeOperands(SDNode *N,
|
||||
const SDValue *Ops, unsigned NumOps);
|
||||
|
||||
/// SelectNodeTo - These are used for target selectors to *mutate* the
|
||||
|
@ -927,8 +927,8 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
break;
|
||||
}
|
||||
|
||||
Result = DAG.UpdateNodeOperands(Result.getValue(0), Ops.data(),
|
||||
Ops.size());
|
||||
Result = SDValue(DAG.UpdateNodeOperands(Result.getNode(), Ops.data(),
|
||||
Ops.size()), 0);
|
||||
switch (Action) {
|
||||
case TargetLowering::Legal:
|
||||
for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i)
|
||||
@ -1018,7 +1018,8 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
if (Tmp1 != Node->getOperand(0)) {
|
||||
SmallVector<SDValue, 8> Ops(Node->op_begin(), Node->op_end());
|
||||
Ops[0] = Tmp1;
|
||||
Result = DAG.UpdateNodeOperands(Result, &Ops[0], Ops.size());
|
||||
Result = SDValue(DAG.UpdateNodeOperands(Result.getNode(), &Ops[0], Ops.size()),
|
||||
Result.getResNo());
|
||||
}
|
||||
|
||||
// Remember that the CALLSEQ_START is legalized.
|
||||
@ -1060,7 +1061,9 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
if (Tmp1 != Node->getOperand(0)) {
|
||||
SmallVector<SDValue, 8> Ops(Node->op_begin(), Node->op_end());
|
||||
Ops[0] = Tmp1;
|
||||
Result = DAG.UpdateNodeOperands(Result, &Ops[0], Ops.size());
|
||||
Result = SDValue(DAG.UpdateNodeOperands(Result.getNode(),
|
||||
&Ops[0], Ops.size()),
|
||||
Result.getResNo());
|
||||
}
|
||||
} else {
|
||||
Tmp2 = LegalizeOp(Node->getOperand(Node->getNumOperands()-1));
|
||||
@ -1069,7 +1072,9 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
SmallVector<SDValue, 8> Ops(Node->op_begin(), Node->op_end());
|
||||
Ops[0] = Tmp1;
|
||||
Ops.back() = Tmp2;
|
||||
Result = DAG.UpdateNodeOperands(Result, &Ops[0], Ops.size());
|
||||
Result = SDValue(DAG.UpdateNodeOperands(Result.getNode(),
|
||||
&Ops[0], Ops.size()),
|
||||
Result.getResNo());
|
||||
}
|
||||
}
|
||||
assert(IsLegalizingCall && "Call sequence imbalance between start/end?");
|
||||
@ -1089,7 +1094,9 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
ISD::LoadExtType ExtType = LD->getExtensionType();
|
||||
if (ExtType == ISD::NON_EXTLOAD) {
|
||||
EVT VT = Node->getValueType(0);
|
||||
Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, LD->getOffset());
|
||||
Result = SDValue(DAG.UpdateNodeOperands(Result.getNode(),
|
||||
Tmp1, Tmp2, LD->getOffset()),
|
||||
Result.getResNo());
|
||||
Tmp3 = Result.getValue(0);
|
||||
Tmp4 = Result.getValue(1);
|
||||
|
||||
@ -1269,7 +1276,9 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
isCustom = true;
|
||||
// FALLTHROUGH
|
||||
case TargetLowering::Legal:
|
||||
Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp2, LD->getOffset());
|
||||
Result = SDValue(DAG.UpdateNodeOperands(Result.getNode(),
|
||||
Tmp1, Tmp2, LD->getOffset()),
|
||||
Result.getResNo());
|
||||
Tmp1 = Result.getValue(0);
|
||||
Tmp2 = Result.getValue(1);
|
||||
|
||||
@ -1357,8 +1366,10 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
|
||||
{
|
||||
Tmp3 = LegalizeOp(ST->getValue());
|
||||
Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp3, Tmp2,
|
||||
ST->getOffset());
|
||||
Result = SDValue(DAG.UpdateNodeOperands(Result.getNode(),
|
||||
Tmp1, Tmp3, Tmp2,
|
||||
ST->getOffset()),
|
||||
Result.getResNo());
|
||||
|
||||
EVT VT = Tmp3.getValueType();
|
||||
switch (TLI.getOperationAction(ISD::STORE, VT)) {
|
||||
@ -1461,8 +1472,10 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
} else {
|
||||
if (Tmp1 != ST->getChain() || Tmp3 != ST->getValue() ||
|
||||
Tmp2 != ST->getBasePtr())
|
||||
Result = DAG.UpdateNodeOperands(Result, Tmp1, Tmp3, Tmp2,
|
||||
ST->getOffset());
|
||||
Result = SDValue(DAG.UpdateNodeOperands(Result.getNode(),
|
||||
Tmp1, Tmp3, Tmp2,
|
||||
ST->getOffset()),
|
||||
Result.getResNo());
|
||||
|
||||
switch (TLI.getTruncStoreAction(ST->getValue().getValueType(), StVT)) {
|
||||
default: assert(0 && "This action is not supported yet!");
|
||||
|
@ -698,9 +698,10 @@ SDValue DAGTypeLegalizer::SoftenFloatOp_BR_CC(SDNode *N) {
|
||||
}
|
||||
|
||||
// Update N to have the operands specified.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), N->getOperand(0),
|
||||
return SDValue(DAG.UpdateNodeOperands(N, N->getOperand(0),
|
||||
DAG.getCondCode(CCCode), NewLHS, NewRHS,
|
||||
N->getOperand(4));
|
||||
N->getOperand(4)),
|
||||
0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatOp_FP_TO_SINT(SDNode *N) {
|
||||
@ -739,9 +740,10 @@ SDValue DAGTypeLegalizer::SoftenFloatOp_SELECT_CC(SDNode *N) {
|
||||
}
|
||||
|
||||
// Update N to have the operands specified.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), NewLHS, NewRHS,
|
||||
return SDValue(DAG.UpdateNodeOperands(N, NewLHS, NewRHS,
|
||||
N->getOperand(2), N->getOperand(3),
|
||||
DAG.getCondCode(CCCode));
|
||||
DAG.getCondCode(CCCode)),
|
||||
0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatOp_SETCC(SDNode *N) {
|
||||
@ -757,8 +759,9 @@ SDValue DAGTypeLegalizer::SoftenFloatOp_SETCC(SDNode *N) {
|
||||
}
|
||||
|
||||
// Otherwise, update N to have the operands specified.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), NewLHS, NewRHS,
|
||||
DAG.getCondCode(CCCode));
|
||||
return SDValue(DAG.UpdateNodeOperands(N, NewLHS, NewRHS,
|
||||
DAG.getCondCode(CCCode)),
|
||||
0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::SoftenFloatOp_STORE(SDNode *N, unsigned OpNo) {
|
||||
@ -1294,9 +1297,9 @@ SDValue DAGTypeLegalizer::ExpandFloatOp_BR_CC(SDNode *N) {
|
||||
}
|
||||
|
||||
// Update N to have the operands specified.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), N->getOperand(0),
|
||||
return SDValue(DAG.UpdateNodeOperands(N, N->getOperand(0),
|
||||
DAG.getCondCode(CCCode), NewLHS, NewRHS,
|
||||
N->getOperand(4));
|
||||
N->getOperand(4)), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandFloatOp_FP_ROUND(SDNode *N) {
|
||||
@ -1375,9 +1378,9 @@ SDValue DAGTypeLegalizer::ExpandFloatOp_SELECT_CC(SDNode *N) {
|
||||
}
|
||||
|
||||
// Update N to have the operands specified.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), NewLHS, NewRHS,
|
||||
return SDValue(DAG.UpdateNodeOperands(N, NewLHS, NewRHS,
|
||||
N->getOperand(2), N->getOperand(3),
|
||||
DAG.getCondCode(CCCode));
|
||||
DAG.getCondCode(CCCode)), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandFloatOp_SETCC(SDNode *N) {
|
||||
@ -1393,8 +1396,8 @@ SDValue DAGTypeLegalizer::ExpandFloatOp_SETCC(SDNode *N) {
|
||||
}
|
||||
|
||||
// Otherwise, update N to have the operands specified.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), NewLHS, NewRHS,
|
||||
DAG.getCondCode(CCCode));
|
||||
return SDValue(DAG.UpdateNodeOperands(N, NewLHS, NewRHS,
|
||||
DAG.getCondCode(CCCode)), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandFloatOp_STORE(SDNode *N, unsigned OpNo) {
|
||||
|
@ -725,8 +725,9 @@ SDValue DAGTypeLegalizer::PromoteIntOp_BR_CC(SDNode *N, unsigned OpNo) {
|
||||
|
||||
// The chain (Op#0), CC (#1) and basic block destination (Op#4) are always
|
||||
// legal types.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), N->getOperand(0),
|
||||
N->getOperand(1), LHS, RHS, N->getOperand(4));
|
||||
return SDValue(DAG.UpdateNodeOperands(N, N->getOperand(0),
|
||||
N->getOperand(1), LHS, RHS, N->getOperand(4)),
|
||||
0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_BRCOND(SDNode *N, unsigned OpNo) {
|
||||
@ -737,8 +738,8 @@ SDValue DAGTypeLegalizer::PromoteIntOp_BRCOND(SDNode *N, unsigned OpNo) {
|
||||
SDValue Cond = PromoteTargetBoolean(N->getOperand(1), SVT);
|
||||
|
||||
// The chain (Op#0) and basic block destination (Op#2) are always legal types.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), N->getOperand(0), Cond,
|
||||
N->getOperand(2));
|
||||
return SDValue(DAG.UpdateNodeOperands(N, N->getOperand(0), Cond,
|
||||
N->getOperand(2)), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_BUILD_PAIR(SDNode *N) {
|
||||
@ -773,7 +774,7 @@ SDValue DAGTypeLegalizer::PromoteIntOp_BUILD_VECTOR(SDNode *N) {
|
||||
for (unsigned i = 0; i < NumElts; ++i)
|
||||
NewOps.push_back(GetPromotedInteger(N->getOperand(i)));
|
||||
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), &NewOps[0], NumElts);
|
||||
return SDValue(DAG.UpdateNodeOperands(N, &NewOps[0], NumElts), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_CONVERT_RNDSAT(SDNode *N) {
|
||||
@ -798,17 +799,18 @@ SDValue DAGTypeLegalizer::PromoteIntOp_INSERT_VECTOR_ELT(SDNode *N,
|
||||
assert(N->getOperand(1).getValueType().getSizeInBits() >=
|
||||
N->getValueType(0).getVectorElementType().getSizeInBits() &&
|
||||
"Type of inserted value narrower than vector element type!");
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), N->getOperand(0),
|
||||
return SDValue(DAG.UpdateNodeOperands(N, N->getOperand(0),
|
||||
GetPromotedInteger(N->getOperand(1)),
|
||||
N->getOperand(2));
|
||||
N->getOperand(2)),
|
||||
0);
|
||||
}
|
||||
|
||||
assert(OpNo == 2 && "Different operand and result vector types?");
|
||||
|
||||
// Promote the index.
|
||||
SDValue Idx = ZExtPromotedInteger(N->getOperand(2));
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), N->getOperand(0),
|
||||
N->getOperand(1), Idx);
|
||||
return SDValue(DAG.UpdateNodeOperands(N, N->getOperand(0),
|
||||
N->getOperand(1), Idx), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_MEMBARRIER(SDNode *N) {
|
||||
@ -819,15 +821,14 @@ SDValue DAGTypeLegalizer::PromoteIntOp_MEMBARRIER(SDNode *N) {
|
||||
SDValue Flag = GetPromotedInteger(N->getOperand(i));
|
||||
NewOps[i] = DAG.getZeroExtendInReg(Flag, dl, MVT::i1);
|
||||
}
|
||||
return DAG.UpdateNodeOperands(SDValue (N, 0), NewOps,
|
||||
array_lengthof(NewOps));
|
||||
return SDValue(DAG.UpdateNodeOperands(N, NewOps, array_lengthof(NewOps)), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_SCALAR_TO_VECTOR(SDNode *N) {
|
||||
// Integer SCALAR_TO_VECTOR operands are implicitly truncated, so just promote
|
||||
// the operand in place.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0),
|
||||
GetPromotedInteger(N->getOperand(0)));
|
||||
return SDValue(DAG.UpdateNodeOperands(N,
|
||||
GetPromotedInteger(N->getOperand(0))), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_SELECT(SDNode *N, unsigned OpNo) {
|
||||
@ -837,8 +838,8 @@ SDValue DAGTypeLegalizer::PromoteIntOp_SELECT(SDNode *N, unsigned OpNo) {
|
||||
EVT SVT = TLI.getSetCCResultType(N->getOperand(1).getValueType());
|
||||
SDValue Cond = PromoteTargetBoolean(N->getOperand(0), SVT);
|
||||
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), Cond,
|
||||
N->getOperand(1), N->getOperand(2));
|
||||
return SDValue(DAG.UpdateNodeOperands(N, Cond,
|
||||
N->getOperand(1), N->getOperand(2)), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_SELECT_CC(SDNode *N, unsigned OpNo) {
|
||||
@ -849,8 +850,8 @@ SDValue DAGTypeLegalizer::PromoteIntOp_SELECT_CC(SDNode *N, unsigned OpNo) {
|
||||
PromoteSetCCOperands(LHS, RHS, cast<CondCodeSDNode>(N->getOperand(4))->get());
|
||||
|
||||
// The CC (#4) and the possible return values (#2 and #3) have legal types.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), LHS, RHS, N->getOperand(2),
|
||||
N->getOperand(3), N->getOperand(4));
|
||||
return SDValue(DAG.UpdateNodeOperands(N, LHS, RHS, N->getOperand(2),
|
||||
N->getOperand(3), N->getOperand(4)), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_SETCC(SDNode *N, unsigned OpNo) {
|
||||
@ -861,12 +862,12 @@ SDValue DAGTypeLegalizer::PromoteIntOp_SETCC(SDNode *N, unsigned OpNo) {
|
||||
PromoteSetCCOperands(LHS, RHS, cast<CondCodeSDNode>(N->getOperand(2))->get());
|
||||
|
||||
// The CC (#2) is always legal.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), LHS, RHS, N->getOperand(2));
|
||||
return SDValue(DAG.UpdateNodeOperands(N, LHS, RHS, N->getOperand(2)), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_Shift(SDNode *N) {
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), N->getOperand(0),
|
||||
ZExtPromotedInteger(N->getOperand(1)));
|
||||
return SDValue(DAG.UpdateNodeOperands(N, N->getOperand(0),
|
||||
ZExtPromotedInteger(N->getOperand(1))), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_SIGN_EXTEND(SDNode *N) {
|
||||
@ -878,8 +879,8 @@ SDValue DAGTypeLegalizer::PromoteIntOp_SIGN_EXTEND(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_SINT_TO_FP(SDNode *N) {
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0),
|
||||
SExtPromotedInteger(N->getOperand(0)));
|
||||
return SDValue(DAG.UpdateNodeOperands(N,
|
||||
SExtPromotedInteger(N->getOperand(0))), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_STORE(StoreSDNode *N, unsigned OpNo){
|
||||
@ -905,8 +906,8 @@ SDValue DAGTypeLegalizer::PromoteIntOp_TRUNCATE(SDNode *N) {
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_UINT_TO_FP(SDNode *N) {
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0),
|
||||
ZExtPromotedInteger(N->getOperand(0)));
|
||||
return SDValue(DAG.UpdateNodeOperands(N,
|
||||
ZExtPromotedInteger(N->getOperand(0))), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::PromoteIntOp_ZERO_EXTEND(SDNode *N) {
|
||||
@ -2224,9 +2225,9 @@ SDValue DAGTypeLegalizer::ExpandIntOp_BR_CC(SDNode *N) {
|
||||
}
|
||||
|
||||
// Update N to have the operands specified.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), N->getOperand(0),
|
||||
return SDValue(DAG.UpdateNodeOperands(N, N->getOperand(0),
|
||||
DAG.getCondCode(CCCode), NewLHS, NewRHS,
|
||||
N->getOperand(4));
|
||||
N->getOperand(4)), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandIntOp_SELECT_CC(SDNode *N) {
|
||||
@ -2242,9 +2243,9 @@ SDValue DAGTypeLegalizer::ExpandIntOp_SELECT_CC(SDNode *N) {
|
||||
}
|
||||
|
||||
// Update N to have the operands specified.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), NewLHS, NewRHS,
|
||||
return SDValue(DAG.UpdateNodeOperands(N, NewLHS, NewRHS,
|
||||
N->getOperand(2), N->getOperand(3),
|
||||
DAG.getCondCode(CCCode));
|
||||
DAG.getCondCode(CCCode)), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandIntOp_SETCC(SDNode *N) {
|
||||
@ -2260,8 +2261,8 @@ SDValue DAGTypeLegalizer::ExpandIntOp_SETCC(SDNode *N) {
|
||||
}
|
||||
|
||||
// Otherwise, update N to have the operands specified.
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), NewLHS, NewRHS,
|
||||
DAG.getCondCode(CCCode));
|
||||
return SDValue(DAG.UpdateNodeOperands(N, NewLHS, NewRHS,
|
||||
DAG.getCondCode(CCCode)), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandIntOp_Shift(SDNode *N) {
|
||||
@ -2270,7 +2271,7 @@ SDValue DAGTypeLegalizer::ExpandIntOp_Shift(SDNode *N) {
|
||||
// upper half of the shift amount is zero. Just use the lower half.
|
||||
SDValue Lo, Hi;
|
||||
GetExpandedInteger(N->getOperand(1), Lo, Hi);
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), N->getOperand(0), Lo);
|
||||
return SDValue(DAG.UpdateNodeOperands(N, N->getOperand(0), Lo), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandIntOp_RETURNADDR(SDNode *N) {
|
||||
@ -2279,7 +2280,7 @@ SDValue DAGTypeLegalizer::ExpandIntOp_RETURNADDR(SDNode *N) {
|
||||
// constant to valid type.
|
||||
SDValue Lo, Hi;
|
||||
GetExpandedInteger(N->getOperand(0), Lo, Hi);
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), Lo);
|
||||
return SDValue(DAG.UpdateNodeOperands(N, Lo), 0);
|
||||
}
|
||||
|
||||
SDValue DAGTypeLegalizer::ExpandIntOp_SINT_TO_FP(SDNode *N) {
|
||||
|
@ -492,8 +492,7 @@ SDNode *DAGTypeLegalizer::AnalyzeNewNode(SDNode *N) {
|
||||
|
||||
// Some operands changed - update the node.
|
||||
if (!NewOps.empty()) {
|
||||
SDNode *M = DAG.UpdateNodeOperands(SDValue(N, 0), &NewOps[0],
|
||||
NewOps.size()).getNode();
|
||||
SDNode *M = DAG.UpdateNodeOperands(N, &NewOps[0], NewOps.size());
|
||||
if (M != N) {
|
||||
// The node morphed into a different node. Normally for this to happen
|
||||
// the original node would have to be marked NewNode. However this can
|
||||
|
@ -116,7 +116,7 @@ SDValue VectorLegalizer::LegalizeOp(SDValue Op) {
|
||||
Ops.push_back(LegalizeOp(Node->getOperand(i)));
|
||||
|
||||
SDValue Result =
|
||||
DAG.UpdateNodeOperands(Op.getValue(0), Ops.data(), Ops.size());
|
||||
SDValue(DAG.UpdateNodeOperands(Op.getNode(), Ops.data(), Ops.size()), 0);
|
||||
|
||||
bool HasVectorValue = false;
|
||||
for (SDNode::value_iterator J = Node->value_begin(), E = Node->value_end();
|
||||
|
@ -1087,10 +1087,11 @@ SDValue DAGTypeLegalizer::SplitVecOp_EXTRACT_VECTOR_ELT(SDNode *N) {
|
||||
uint64_t LoElts = Lo.getValueType().getVectorNumElements();
|
||||
|
||||
if (IdxVal < LoElts)
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), Lo, Idx);
|
||||
return DAG.UpdateNodeOperands(SDValue(N, 0), Hi,
|
||||
return SDValue(DAG.UpdateNodeOperands(N, Lo, Idx), 0);
|
||||
return SDValue(DAG.UpdateNodeOperands(N, Hi,
|
||||
DAG.getConstant(IdxVal - LoElts,
|
||||
Idx.getValueType()));
|
||||
Idx.getValueType())),
|
||||
0);
|
||||
}
|
||||
|
||||
// Store the vector to the stack.
|
||||
|
@ -4439,17 +4439,16 @@ SDVTList SelectionDAG::getVTList(const EVT *VTs, unsigned NumVTs) {
|
||||
/// already exists. If the resultant node does not exist in the DAG, the
|
||||
/// input node is returned. As a degenerate case, if you specify the same
|
||||
/// input operands as the node already has, the input node is returned.
|
||||
SDValue SelectionDAG::UpdateNodeOperands(SDValue InN, SDValue Op) {
|
||||
SDNode *N = InN.getNode();
|
||||
SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op) {
|
||||
assert(N->getNumOperands() == 1 && "Update with wrong number of operands");
|
||||
|
||||
// Check to see if there is no change.
|
||||
if (Op == N->getOperand(0)) return InN;
|
||||
if (Op == N->getOperand(0)) return N;
|
||||
|
||||
// See if the modified node already exists.
|
||||
void *InsertPos = 0;
|
||||
if (SDNode *Existing = FindModifiedNodeSlot(N, Op, InsertPos))
|
||||
return SDValue(Existing, InN.getResNo());
|
||||
return Existing;
|
||||
|
||||
// Nope it doesn't. Remove the node from its current place in the maps.
|
||||
if (InsertPos)
|
||||
@ -4461,22 +4460,20 @@ SDValue SelectionDAG::UpdateNodeOperands(SDValue InN, SDValue Op) {
|
||||
|
||||
// If this gets put into a CSE map, add it.
|
||||
if (InsertPos) CSEMap.InsertNode(N, InsertPos);
|
||||
return InN;
|
||||
return N;
|
||||
}
|
||||
|
||||
SDValue SelectionDAG::
|
||||
UpdateNodeOperands(SDValue InN, SDValue Op1, SDValue Op2) {
|
||||
SDNode *N = InN.getNode();
|
||||
SDNode *SelectionDAG::UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2) {
|
||||
assert(N->getNumOperands() == 2 && "Update with wrong number of operands");
|
||||
|
||||
// Check to see if there is no change.
|
||||
if (Op1 == N->getOperand(0) && Op2 == N->getOperand(1))
|
||||
return InN; // No operands changed, just return the input node.
|
||||
return N; // No operands changed, just return the input node.
|
||||
|
||||
// See if the modified node already exists.
|
||||
void *InsertPos = 0;
|
||||
if (SDNode *Existing = FindModifiedNodeSlot(N, Op1, Op2, InsertPos))
|
||||
return SDValue(Existing, InN.getResNo());
|
||||
return Existing;
|
||||
|
||||
// Nope it doesn't. Remove the node from its current place in the maps.
|
||||
if (InsertPos)
|
||||
@ -4491,32 +4488,31 @@ UpdateNodeOperands(SDValue InN, SDValue Op1, SDValue Op2) {
|
||||
|
||||
// If this gets put into a CSE map, add it.
|
||||
if (InsertPos) CSEMap.InsertNode(N, InsertPos);
|
||||
return InN;
|
||||
return N;
|
||||
}
|
||||
|
||||
SDValue SelectionDAG::
|
||||
UpdateNodeOperands(SDValue N, SDValue Op1, SDValue Op2, SDValue Op3) {
|
||||
SDNode *SelectionDAG::
|
||||
UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2, SDValue Op3) {
|
||||
SDValue Ops[] = { Op1, Op2, Op3 };
|
||||
return UpdateNodeOperands(N, Ops, 3);
|
||||
}
|
||||
|
||||
SDValue SelectionDAG::
|
||||
UpdateNodeOperands(SDValue N, SDValue Op1, SDValue Op2,
|
||||
SDNode *SelectionDAG::
|
||||
UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2,
|
||||
SDValue Op3, SDValue Op4) {
|
||||
SDValue Ops[] = { Op1, Op2, Op3, Op4 };
|
||||
return UpdateNodeOperands(N, Ops, 4);
|
||||
}
|
||||
|
||||
SDValue SelectionDAG::
|
||||
UpdateNodeOperands(SDValue N, SDValue Op1, SDValue Op2,
|
||||
SDNode *SelectionDAG::
|
||||
UpdateNodeOperands(SDNode *N, SDValue Op1, SDValue Op2,
|
||||
SDValue Op3, SDValue Op4, SDValue Op5) {
|
||||
SDValue Ops[] = { Op1, Op2, Op3, Op4, Op5 };
|
||||
return UpdateNodeOperands(N, Ops, 5);
|
||||
}
|
||||
|
||||
SDValue SelectionDAG::
|
||||
UpdateNodeOperands(SDValue InN, const SDValue *Ops, unsigned NumOps) {
|
||||
SDNode *N = InN.getNode();
|
||||
SDNode *SelectionDAG::
|
||||
UpdateNodeOperands(SDNode *N, const SDValue *Ops, unsigned NumOps) {
|
||||
assert(N->getNumOperands() == NumOps &&
|
||||
"Update with wrong number of operands");
|
||||
|
||||
@ -4530,12 +4526,12 @@ UpdateNodeOperands(SDValue InN, const SDValue *Ops, unsigned NumOps) {
|
||||
}
|
||||
|
||||
// No operands changed, just return the input node.
|
||||
if (!AnyChange) return InN;
|
||||
if (!AnyChange) return N;
|
||||
|
||||
// See if the modified node already exists.
|
||||
void *InsertPos = 0;
|
||||
if (SDNode *Existing = FindModifiedNodeSlot(N, Ops, NumOps, InsertPos))
|
||||
return SDValue(Existing, InN.getResNo());
|
||||
return Existing;
|
||||
|
||||
// Nope it doesn't. Remove the node from its current place in the maps.
|
||||
if (InsertPos)
|
||||
@ -4549,7 +4545,7 @@ UpdateNodeOperands(SDValue InN, const SDValue *Ops, unsigned NumOps) {
|
||||
|
||||
// If this gets put into a CSE map, add it.
|
||||
if (InsertPos) CSEMap.InsertNode(N, InsertPos);
|
||||
return InN;
|
||||
return N;
|
||||
}
|
||||
|
||||
/// DropOperands - Release the operands and set this node to have
|
||||
|
@ -132,8 +132,8 @@ static void UpdateNodeOperand(SelectionDAG &DAG,
|
||||
SDValue Val) {
|
||||
SmallVector<SDValue, 8> ops(N->op_begin(), N->op_end());
|
||||
ops[Num] = Val;
|
||||
SDValue New = DAG.UpdateNodeOperands(SDValue(N, 0), ops.data(), ops.size());
|
||||
DAG.ReplaceAllUsesWith(N, New.getNode());
|
||||
SDNode *New = DAG.UpdateNodeOperands(N, ops.data(), ops.size());
|
||||
DAG.ReplaceAllUsesWith(N, New);
|
||||
}
|
||||
|
||||
// After instruction selection, insert COPY_TO_REGCLASS nodes to help in
|
||||
|
@ -370,14 +370,14 @@ static void MoveBelowOrigChain(SelectionDAG *CurDAG, SDValue Load,
|
||||
}
|
||||
for (unsigned i = 1, e = OrigChain.getNumOperands(); i != e; ++i)
|
||||
Ops.push_back(OrigChain.getOperand(i));
|
||||
CurDAG->UpdateNodeOperands(OrigChain, &Ops[0], Ops.size());
|
||||
CurDAG->UpdateNodeOperands(Load, Call.getOperand(0),
|
||||
CurDAG->UpdateNodeOperands(OrigChain.getNode(), &Ops[0], Ops.size());
|
||||
CurDAG->UpdateNodeOperands(Load.getNode(), Call.getOperand(0),
|
||||
Load.getOperand(1), Load.getOperand(2));
|
||||
Ops.clear();
|
||||
Ops.push_back(SDValue(Load.getNode(), 1));
|
||||
for (unsigned i = 1, e = Call.getNode()->getNumOperands(); i != e; ++i)
|
||||
Ops.push_back(Call.getOperand(i));
|
||||
CurDAG->UpdateNodeOperands(Call, &Ops[0], Ops.size());
|
||||
CurDAG->UpdateNodeOperands(Call.getNode(), &Ops[0], Ops.size());
|
||||
}
|
||||
|
||||
/// isCalleeLoad - Return true if call address is a load and it can be
|
||||
|
@ -6609,14 +6609,14 @@ SDValue X86TargetLowering::LowerBRCOND(SDValue Op, SelectionDAG &DAG) const {
|
||||
(X86::CondCode)Cond.getOperand(0).getConstantOperandVal(0);
|
||||
CCode = X86::GetOppositeBranchCondition(CCode);
|
||||
CC = DAG.getConstant(CCode, MVT::i8);
|
||||
SDValue User = SDValue(*Op.getNode()->use_begin(), 0);
|
||||
SDNode *User = *Op.getNode()->use_begin();
|
||||
// Look for an unconditional branch following this conditional branch.
|
||||
// We need this because we need to reverse the successors in order
|
||||
// to implement FCMP_OEQ.
|
||||
if (User.getOpcode() == ISD::BR) {
|
||||
SDValue FalseBB = User.getOperand(1);
|
||||
SDValue NewBR =
|
||||
DAG.UpdateNodeOperands(User, User.getOperand(0), Dest);
|
||||
if (User->getOpcode() == ISD::BR) {
|
||||
SDValue FalseBB = User->getOperand(1);
|
||||
SDNode *NewBR =
|
||||
DAG.UpdateNodeOperands(User, User->getOperand(0), Dest);
|
||||
assert(NewBR == User);
|
||||
Dest = FalseBB;
|
||||
|
||||
@ -9871,9 +9871,10 @@ static SDValue PerformMEMBARRIERCombine(SDNode* N, SelectionDAG &DAG) {
|
||||
|
||||
switch (atomic.getOpcode()) {
|
||||
case ISD::ATOMIC_CMP_SWAP:
|
||||
return DAG.UpdateNodeOperands(atomic, fence.getOperand(0),
|
||||
return SDValue(DAG.UpdateNodeOperands(atomic.getNode(),
|
||||
fence.getOperand(0),
|
||||
atomic.getOperand(1), atomic.getOperand(2),
|
||||
atomic.getOperand(3));
|
||||
atomic.getOperand(3)), atomic.getResNo());
|
||||
case ISD::ATOMIC_SWAP:
|
||||
case ISD::ATOMIC_LOAD_ADD:
|
||||
case ISD::ATOMIC_LOAD_SUB:
|
||||
@ -9885,8 +9886,10 @@ static SDValue PerformMEMBARRIERCombine(SDNode* N, SelectionDAG &DAG) {
|
||||
case ISD::ATOMIC_LOAD_MAX:
|
||||
case ISD::ATOMIC_LOAD_UMIN:
|
||||
case ISD::ATOMIC_LOAD_UMAX:
|
||||
return DAG.UpdateNodeOperands(atomic, fence.getOperand(0),
|
||||
atomic.getOperand(1), atomic.getOperand(2));
|
||||
return SDValue(DAG.UpdateNodeOperands(atomic.getNode(),
|
||||
fence.getOperand(0),
|
||||
atomic.getOperand(1), atomic.getOperand(2)),
|
||||
atomic.getResNo());
|
||||
default:
|
||||
return SDValue();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user