From 55562fa99ae63c3458a41d1b43da827de0542ea3 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 19 Jan 2005 19:10:54 +0000 Subject: Fold single use token factor nodes into other token factor nodes. llvm-svn: 19701 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp') diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 2994d4812b8..b557892b3b3 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -264,8 +264,16 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) { std::vector 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); -- cgit v1.2.3