aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-01-19 19:10:54 +0000
committerChris Lattner <sabre@nondot.org>2005-01-19 19:10:54 +0000
commit1e81b9e5112c40c23ecca9a64b6ab2ce97c8c6d4 (patch)
tree234036519261ad48d23e70b8b8fdfd8d67f6cfd2 /lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
parentec39a45bdb1eca0cfe77be6a05cc43e16f2338eb (diff)
Fold single use token factor nodes into other token factor nodes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19701 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/LegalizeDAG.cpp')
-rw-r--r--lib/CodeGen/SelectionDAG/LegalizeDAG.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
index 2994d4812b..b557892b3b 100644
--- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
@@ -264,8 +264,16 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) {
std::vector<SDOperand> Ops;
bool Changed = false;
for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) {
- Ops.push_back(LegalizeOp(Node->getOperand(i))); // Legalize the operands
- Changed |= Ops[i] != Node->getOperand(i);
+ SDOperand Op = Node->getOperand(i);
+ // Fold single-use TokenFactor nodes into this token factor as we go.
+ if (Op.getOpcode() == ISD::TokenFactor && Op.hasOneUse()) {
+ Changed = true;
+ for (unsigned j = 0, e = Op.getNumOperands(); j != e; ++j)
+ Ops.push_back(LegalizeOp(Op.getOperand(j)));
+ } else {
+ Ops.push_back(LegalizeOp(Op)); // Legalize the operands
+ Changed |= Ops[i] != Op;
+ }
}
if (Changed)
Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Ops);