diff options
| author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-04-20 22:08:46 +0000 | 
|---|---|---|
| committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2012-04-20 22:08:46 +0000 | 
| commit | beb9469d5c687b1924282398f51cb4f3317e96a1 (patch) | |
| tree | cfc77d534221c49acaa863307a660649922d1b61 /llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | |
| parent | 5ecac1a5f51507aa149a5ebf742d51a69ef1e666 (diff) | |
| download | bcm5719-llvm-beb9469d5c687b1924282398f51cb4f3317e96a1.tar.gz bcm5719-llvm-beb9469d5c687b1924282398f51cb4f3317e96a1.zip | |
Register DAGUpdateListeners with SelectionDAG.
Instead of passing listener pointers to RAUW, let SelectionDAG itself
keep a linked list of interested listeners.
This makes it possible to have multiple listeners active at once, like
RAUWUpdateListener was already doing. It also makes it possible to
register listeners up the call stack without controlling all RAUW calls
below.
DAGUpdateListener uses an RAII pattern to add itself to the SelectionDAG
list of active listeners.
llvm-svn: 155248
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 15 | 
1 files changed, 8 insertions, 7 deletions
| diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index a96a99781f4..32973cceb28 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -150,21 +150,21 @@ public:    // Node replacement helpers    void ReplacedNode(SDNode *N) {      if (N->use_empty()) { -      DAG.RemoveDeadNode(N, this); +      DAG.RemoveDeadNode(N);      } else {        ForgetNode(N);      }    }    void ReplaceNode(SDNode *Old, SDNode *New) { -    DAG.ReplaceAllUsesWith(Old, New, this); +    DAG.ReplaceAllUsesWith(Old, New);      ReplacedNode(Old);    }    void ReplaceNode(SDValue Old, SDValue New) { -    DAG.ReplaceAllUsesWith(Old, New, this); +    DAG.ReplaceAllUsesWith(Old, New);      ReplacedNode(Old.getNode());    }    void ReplaceNode(SDNode *Old, const SDValue *New) { -    DAG.ReplaceAllUsesWith(Old, New, this); +    DAG.ReplaceAllUsesWith(Old, New);      ReplacedNode(Old);    }  }; @@ -203,7 +203,8 @@ SelectionDAGLegalize::ShuffleWithNarrowerEltType(EVT NVT, EVT VT,  DebugLoc dl,  }  SelectionDAGLegalize::SelectionDAGLegalize(SelectionDAG &dag) -  : TM(dag.getTarget()), TLI(dag.getTargetLoweringInfo()), +  : SelectionDAG::DAGUpdateListener(dag), +    TM(dag.getTarget()), TLI(dag.getTargetLoweringInfo()),      DAG(dag) {  } @@ -851,7 +852,7 @@ void SelectionDAGLegalize::LegalizeOp(SDNode *Node) {      SDNode *NewNode = DAG.UpdateNodeOperands(Node, Ops.data(), Ops.size());      if (NewNode != Node) { -      DAG.ReplaceAllUsesWith(Node, NewNode, this); +      DAG.ReplaceAllUsesWith(Node, NewNode);        for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i)          DAG.TransferDbgValues(SDValue(Node, i), SDValue(NewNode, i));        ReplacedNode(Node); @@ -873,7 +874,7 @@ void SelectionDAGLegalize::LegalizeOp(SDNode *Node) {              ResultVals.push_back(Tmp1.getValue(i));          }          if (Tmp1.getNode() != Node || Tmp1.getResNo() != 0) { -          DAG.ReplaceAllUsesWith(Node, ResultVals.data(), this); +          DAG.ReplaceAllUsesWith(Node, ResultVals.data());            for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i)              DAG.TransferDbgValues(SDValue(Node, i), ResultVals[i]);            ReplacedNode(Node); | 

