mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-19 06:31:18 +00:00
Do not emit getTargetNode() and SelectNodeTo() which takes more than 3
SDOperand arguments. Use the variants which take an array and number instead. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29906 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
694481ee01
commit
f037ca6245
@ -2583,7 +2583,7 @@ public:
|
|||||||
"(N.getOperand(N.getNumOperands()-1).getValueType() == MVT::Flag);");
|
"(N.getOperand(N.getNumOperands()-1).getValueType() == MVT::Flag);");
|
||||||
}
|
}
|
||||||
if (HasVarOps)
|
if (HasVarOps)
|
||||||
emitCode("SmallVector<SDOperand, 8> Ops;");
|
emitCode("SmallVector<SDOperand, 8> Ops" + utostr(OpcNo) + ";");
|
||||||
|
|
||||||
// How many results is this pattern expected to produce?
|
// How many results is this pattern expected to produce?
|
||||||
unsigned PatResults = 0;
|
unsigned PatResults = 0;
|
||||||
@ -2607,15 +2607,17 @@ public:
|
|||||||
if (NodeHasInFlag || HasImpInputs)
|
if (NodeHasInFlag || HasImpInputs)
|
||||||
EmitInFlagSelectCode(Pattern, "N", ChainEmitted,
|
EmitInFlagSelectCode(Pattern, "N", ChainEmitted,
|
||||||
InFlagDecled, ResNodeDecled, true);
|
InFlagDecled, ResNodeDecled, true);
|
||||||
if (NodeHasOptInFlag) {
|
if (NodeHasOptInFlag || NodeHasInFlag || HasImpInputs) {
|
||||||
if (!InFlagDecled) {
|
if (!InFlagDecled) {
|
||||||
emitCode("SDOperand InFlag(0, 0);");
|
emitCode("SDOperand InFlag(0, 0);");
|
||||||
InFlagDecled = true;
|
InFlagDecled = true;
|
||||||
}
|
}
|
||||||
emitCode("if (HasInFlag) {");
|
if (NodeHasOptInFlag) {
|
||||||
emitCode(" InFlag = N.getOperand(N.getNumOperands()-1);");
|
emitCode("if (HasInFlag) {");
|
||||||
emitCode(" AddToISelQueue(InFlag);");
|
emitCode(" InFlag = N.getOperand(N.getNumOperands()-1);");
|
||||||
emitCode("}");
|
emitCode(" AddToISelQueue(InFlag);");
|
||||||
|
emitCode("}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned NumResults = Inst.getNumResults();
|
unsigned NumResults = Inst.getNumResults();
|
||||||
@ -2635,7 +2637,9 @@ public:
|
|||||||
else
|
else
|
||||||
Code2 = NodeName + " = ";
|
Code2 = NodeName + " = ";
|
||||||
}
|
}
|
||||||
|
|
||||||
Code = "CurDAG->getTargetNode(Opc" + utostr(OpcNo);
|
Code = "CurDAG->getTargetNode(Opc" + utostr(OpcNo);
|
||||||
|
unsigned OpsNo = OpcNo;
|
||||||
emitOpcode(II.Namespace + "::" + II.TheDef->getName());
|
emitOpcode(II.Namespace + "::" + II.TheDef->getName());
|
||||||
|
|
||||||
// Output order: results, chain, flags
|
// Output order: results, chain, flags
|
||||||
@ -2650,12 +2654,10 @@ public:
|
|||||||
Code += ", MVT::Flag";
|
Code += ", MVT::Flag";
|
||||||
|
|
||||||
// Inputs.
|
// Inputs.
|
||||||
for (unsigned i = 0, e = AllOps.size(); i != e; ++i) {
|
if (HasVarOps) {
|
||||||
std::string OpName = AllOps[i];
|
for (unsigned i = 0, e = AllOps.size(); i != e; ++i)
|
||||||
if (HasVarOps)
|
emitCode("Ops" + utostr(OpsNo) + ".push_back(" + AllOps[i] + ");");
|
||||||
emitCode("Ops.push_back(" + OpName + ");");
|
AllOps.clear();
|
||||||
else
|
|
||||||
Code += ", " + OpName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasVarOps) {
|
if (HasVarOps) {
|
||||||
@ -2669,40 +2671,51 @@ public:
|
|||||||
emitCode("for (unsigned i = 2, e = N.getNumOperands(); "
|
emitCode("for (unsigned i = 2, e = N.getNumOperands(); "
|
||||||
"i != e; ++i) {");
|
"i != e; ++i) {");
|
||||||
emitCode(" AddToISelQueue(N.getOperand(i));");
|
emitCode(" AddToISelQueue(N.getOperand(i));");
|
||||||
emitCode(" Ops.push_back(N.getOperand(i));");
|
emitCode(" Ops" + utostr(OpsNo) + ".push_back(N.getOperand(i));");
|
||||||
emitCode("}");
|
emitCode("}");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NodeHasChain) {
|
if (NodeHasChain) {
|
||||||
if (HasVarOps)
|
if (HasVarOps)
|
||||||
emitCode("Ops.push_back(" + ChainName + ");");
|
emitCode("Ops" + utostr(OpsNo) + ".push_back(" + ChainName + ");");
|
||||||
else
|
else
|
||||||
Code += ", " + ChainName;
|
AllOps.push_back(ChainName);
|
||||||
}
|
|
||||||
if (NodeHasInFlag || HasImpInputs) {
|
|
||||||
if (!InFlagDecled) {
|
|
||||||
emitCode("SDOperand InFlag(0, 0);");
|
|
||||||
InFlagDecled = true;
|
|
||||||
}
|
|
||||||
if (HasVarOps) {
|
|
||||||
emitCode("Ops.push_back(InFlag);");
|
|
||||||
} else
|
|
||||||
Code += ", InFlag";
|
|
||||||
} else if (NodeHasOptInFlag && HasVarOps) {
|
|
||||||
if (!InFlagDecled) {
|
|
||||||
emitCode("SDOperand InFlag(0, 0);");
|
|
||||||
InFlagDecled = true;
|
|
||||||
}
|
|
||||||
emitCode("if (HasInFlag)");
|
|
||||||
emitCode(" Ops.push_back(InFlag);");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasVarOps)
|
if (HasVarOps) {
|
||||||
Code += ", &Ops[0], Ops.size()";
|
if (NodeHasInFlag || HasImpInputs)
|
||||||
else if (NodeHasOptInFlag) {
|
emitCode("Ops" + utostr(OpsNo) + ".push_back(InFlag);");
|
||||||
Code = "HasInFlag ? " + Code + ", InFlag) : " + Code;
|
else if (NodeHasOptInFlag) {
|
||||||
}
|
emitCode("if (HasInFlag)");
|
||||||
|
emitCode(" Ops" + utostr(OpsNo) + ".push_back(InFlag);");
|
||||||
|
}
|
||||||
|
Code += ", &Ops" + utostr(OpsNo) + "[0], Ops" + utostr(OpsNo) +
|
||||||
|
".size()";
|
||||||
|
} else if (NodeHasInFlag || NodeHasOptInFlag || HasImpInputs)
|
||||||
|
AllOps.push_back("InFlag");
|
||||||
|
|
||||||
|
unsigned NumOps = AllOps.size();
|
||||||
|
if (NumOps) {
|
||||||
|
if (!NodeHasOptInFlag && NumOps < 4) {
|
||||||
|
for (unsigned i = 0; i != NumOps; ++i)
|
||||||
|
Code += ", " + AllOps[i];
|
||||||
|
} else {
|
||||||
|
std::string OpsCode = "SDOperand Ops" + utostr(OpsNo) + "[] = { ";
|
||||||
|
for (unsigned i = 0; i != NumOps; ++i) {
|
||||||
|
OpsCode += AllOps[i];
|
||||||
|
if (i != NumOps-1)
|
||||||
|
OpsCode += ", ";
|
||||||
|
}
|
||||||
|
emitCode(OpsCode + " };");
|
||||||
|
Code += ", Ops" + utostr(OpsNo) + ", ";
|
||||||
|
if (NodeHasOptInFlag) {
|
||||||
|
Code += "HasInFlag ? ";
|
||||||
|
Code += utostr(NumOps) + " : " + utostr(NumOps-1);
|
||||||
|
} else
|
||||||
|
Code += utostr(NumOps);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!isRoot)
|
if (!isRoot)
|
||||||
Code += "), 0";
|
Code += "), 0";
|
||||||
emitCode(Code2 + Code + ");");
|
emitCode(Code2 + Code + ");");
|
||||||
@ -2761,9 +2774,8 @@ public:
|
|||||||
emitCode("ReplaceUses(SDOperand(N.Val, " +
|
emitCode("ReplaceUses(SDOperand(N.Val, " +
|
||||||
utostr(PatResults) + "), SDOperand(" + ChainName + ".Val, " +
|
utostr(PatResults) + "), SDOperand(" + ChainName + ".Val, " +
|
||||||
ChainName + ".ResNo" + "));");
|
ChainName + ".ResNo" + "));");
|
||||||
} else {
|
} else
|
||||||
RetSelected = true;
|
RetSelected = true;
|
||||||
}
|
|
||||||
|
|
||||||
// User does not expect the instruction would produce a chain!
|
// User does not expect the instruction would produce a chain!
|
||||||
if ((!InputHasChain && NodeHasChain) && NodeHasOutFlag) {
|
if ((!InputHasChain && NodeHasChain) && NodeHasOutFlag) {
|
||||||
@ -2792,10 +2804,27 @@ public:
|
|||||||
Code += ", VT" + utostr(VTNo);
|
Code += ", VT" + utostr(VTNo);
|
||||||
if (NodeHasOutFlag)
|
if (NodeHasOutFlag)
|
||||||
Code += ", MVT::Flag";
|
Code += ", MVT::Flag";
|
||||||
for (unsigned i = 0, e = AllOps.size(); i != e; ++i)
|
|
||||||
Code += ", " + AllOps[i];
|
if (NodeHasInFlag || NodeHasOptInFlag || HasImpInputs)
|
||||||
if (NodeHasInFlag || HasImpInputs)
|
AllOps.push_back("InFlag");
|
||||||
Code += ", InFlag";
|
|
||||||
|
unsigned NumOps = AllOps.size();
|
||||||
|
if (NumOps) {
|
||||||
|
if (!NodeHasOptInFlag && NumOps < 4) {
|
||||||
|
for (unsigned i = 0; i != NumOps; ++i)
|
||||||
|
Code += ", " + AllOps[i];
|
||||||
|
} else {
|
||||||
|
std::string OpsCode = "SDOperand Ops" + utostr(OpcNo) + "[] = { ";
|
||||||
|
for (unsigned i = 0; i != NumOps; ++i) {
|
||||||
|
OpsCode += AllOps[i];
|
||||||
|
if (i != NumOps-1)
|
||||||
|
OpsCode += ", ";
|
||||||
|
}
|
||||||
|
emitCode(OpsCode + " };");
|
||||||
|
Code += ", Ops" + utostr(OpcNo) + ", ";
|
||||||
|
Code += utostr(NumOps);
|
||||||
|
}
|
||||||
|
}
|
||||||
emitCode(Code + ");");
|
emitCode(Code + ");");
|
||||||
emitOpcode(II.Namespace + "::" + II.TheDef->getName());
|
emitOpcode(II.Namespace + "::" + II.TheDef->getName());
|
||||||
if (N->getTypeNum(0) != MVT::isVoid)
|
if (N->getTypeNum(0) != MVT::isVoid)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user