From: Chris Lattner Date: Wed, 9 Nov 2005 18:48:57 +0000 (+0000) Subject: Handle the trivial (but common) two-op case more efficiently X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=040c11c24e9f6c172eaf680e135d9bb466c284b2;p=oota-llvm.git Handle the trivial (but common) two-op case more efficiently git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24259 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index eb057548391..874bfafab1e 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -633,19 +633,26 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) { } break; } - case ISD::TokenFactor: { - std::vector Ops; - bool Changed = false; - // Legalize the operands - for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) { - SDOperand Op = Node->getOperand(i); - Ops.push_back(LegalizeOp(Op)); - Changed |= Ops[i] != Op; + case ISD::TokenFactor: + if (Node->getNumOperands() == 2) { + bool Changed = false; + SDOperand Op0 = LegalizeOp(Node->getOperand(0)); + SDOperand Op1 = LegalizeOp(Node->getOperand(1)); + if (Op0 != Node->getOperand(0) || Op1 != Node->getOperand(1)) + Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Op0, Op1); + } else { + std::vector Ops; + bool Changed = false; + // Legalize the operands. + for (unsigned i = 0, e = Node->getNumOperands(); i != e; ++i) { + SDOperand Op = Node->getOperand(i); + Ops.push_back(LegalizeOp(Op)); + Changed |= Ops[i] != Op; + } + if (Changed) + Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Ops); } - if (Changed) - Result = DAG.getNode(ISD::TokenFactor, MVT::Other, Ops); break; - } case ISD::CALLSEQ_START: case ISD::CALLSEQ_END: