diff options
author | Chris Lattner <sabre@nondot.org> | 2005-11-09 18:48:57 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-11-09 18:48:57 +0000 |
commit | af3aefa10eb31f27ca43a202f42263ab644e0283 (patch) | |
tree | 017fc8680308c1325f958159f22938c1ed734515 /llvm/lib | |
parent | 619dfaa42b87bedc709c0a4cd00bed54836b2a95 (diff) | |
download | bcm5719-llvm-af3aefa10eb31f27ca43a202f42263ab644e0283.tar.gz bcm5719-llvm-af3aefa10eb31f27ca43a202f42263ab644e0283.zip |
Handle the trivial (but common) two-op case more efficiently
llvm-svn: 24259
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index eb057548391..874bfafab1e 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -633,19 +633,26 @@ SDOperand SelectionDAGLegalize::LegalizeOp(SDOperand Op) { } break; } - case ISD::TokenFactor: { - std::vector<SDOperand> 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<SDOperand> 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: |