From 274062c172bbdf70b8f717875ecf0dabb176c6e5 Mon Sep 17 00:00:00 2001 From: Jim Laskey Date: Fri, 13 Oct 2006 23:32:28 +0000 Subject: [PATCH] Reduce the workload by not adding chain users to work list. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30948 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 42 ++++++++++++++++-------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 06a1f0dd21a..bb8fc4559ce 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -85,7 +85,8 @@ namespace { WorkList.push_back(N); } - SDOperand CombineTo(SDNode *N, const SDOperand *To, unsigned NumTo) { + SDOperand CombineTo(SDNode *N, const SDOperand *To, unsigned NumTo, + bool AddTo = true) { assert(N->getNumValues() == NumTo && "Broken CombineTo call!"); ++NodesCombined; DEBUG(std::cerr << "\nReplacing.1 "; N->dump(); @@ -94,10 +95,12 @@ namespace { std::vector NowDead; DAG.ReplaceAllUsesWith(N, To, &NowDead); - // Push the new nodes and any users onto the worklist - for (unsigned i = 0, e = NumTo; i != e; ++i) { - AddToWorkList(To[i].Val); - AddUsersToWorkList(To[i].Val); + if (AddTo) { + // Push the new nodes and any users onto the worklist + for (unsigned i = 0, e = NumTo; i != e; ++i) { + AddToWorkList(To[i].Val); + AddUsersToWorkList(To[i].Val); + } } // Nodes can be reintroduced into the worklist. Make sure we do not @@ -111,13 +114,14 @@ namespace { return SDOperand(N, 0); } - SDOperand CombineTo(SDNode *N, SDOperand Res) { - return CombineTo(N, &Res, 1); + SDOperand CombineTo(SDNode *N, SDOperand Res, bool AddTo = true) { + return CombineTo(N, &Res, 1, AddTo); } - SDOperand CombineTo(SDNode *N, SDOperand Res0, SDOperand Res1) { + SDOperand CombineTo(SDNode *N, SDOperand Res0, SDOperand Res1, + bool AddTo = true) { SDOperand To[] = { Res0, Res1 }; - return CombineTo(N, To, 2); + return CombineTo(N, To, 2, AddTo); } private: @@ -602,6 +606,9 @@ SDOperand DAGCombiner::visitTokenFactor(SDNode *N) { // New and improved token factor. Result = DAG.getNode(ISD::TokenFactor, MVT::Other, &Ops[0], Ops.size()); } + + // Don't add users to work list. + return CombineTo(N, Result, false); } return Result; @@ -2717,8 +2724,9 @@ SDOperand DAGCombiner::visitLOAD(SDNode *N) { SDOperand Token = DAG.getNode(ISD::TokenFactor, MVT::Other, Chain, ReplLoad.getValue(1)); - // Replace uses with load result and token factor. - return CombineTo(N, ReplLoad.getValue(0), Token); + // Replace uses with load result and token factor. Don't add users + // to work list. + return CombineTo(N, ReplLoad.getValue(0), Token, false); } } @@ -2745,7 +2753,11 @@ SDOperand DAGCombiner::visitSTORE(SDNode *N) { ST->getSrcValueOffset(), ST->getStoredVT()); // Create token to keep both nodes around. - return DAG.getNode(ISD::TokenFactor, MVT::Other, Chain, ReplTStore); + SDOperand Token = + DAG.getNode(ISD::TokenFactor, MVT::Other, Chain, ReplTStore); + + // Don't add users to work list. + return CombineTo(N, Token, false); } } @@ -2796,7 +2808,11 @@ SDOperand DAGCombiner::visitSTORE(SDNode *N) { SDOperand ReplStore = DAG.getStore(BetterChain, Value, Ptr, ST->getSrcValue(), ST->getSrcValueOffset()); // Create token to keep both nodes around. - return DAG.getNode(ISD::TokenFactor, MVT::Other, Chain, ReplStore); + SDOperand Token = + DAG.getNode(ISD::TokenFactor, MVT::Other, Chain, ReplStore); + + // Don't add users to work list. + return CombineTo(N, Token, false); } }