mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-23 14:25:07 +00:00
Make ISelPosition a local variable.
Now that multiple DAGUpdateListeners can be active at the same time, ISelPosition can become a local variable in DoInstructionSelection. We simply register an ISelUpdater with CurDAG while ISelPosition exists. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155249 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -172,49 +172,21 @@ protected:
|
||||
///
|
||||
unsigned DAGSize;
|
||||
|
||||
/// ISelPosition - Node iterator marking the current position of
|
||||
/// instruction selection as it procedes through the topologically-sorted
|
||||
/// node list.
|
||||
SelectionDAG::allnodes_iterator ISelPosition;
|
||||
|
||||
|
||||
/// ISelUpdater - helper class to handle updates of the
|
||||
/// instruction selection graph.
|
||||
class ISelUpdater : public SelectionDAG::DAGUpdateListener {
|
||||
virtual void anchor();
|
||||
SelectionDAG::allnodes_iterator &ISelPosition;
|
||||
public:
|
||||
ISelUpdater(SelectionDAG &DAG, SelectionDAG::allnodes_iterator &isp)
|
||||
: SelectionDAG::DAGUpdateListener(DAG), ISelPosition(isp) {}
|
||||
|
||||
/// NodeDeleted - Handle nodes deleted from the graph. If the
|
||||
/// node being deleted is the current ISelPosition node, update
|
||||
/// ISelPosition.
|
||||
///
|
||||
virtual void NodeDeleted(SDNode *N, SDNode *E) {
|
||||
if (ISelPosition == SelectionDAG::allnodes_iterator(N))
|
||||
++ISelPosition;
|
||||
}
|
||||
};
|
||||
|
||||
/// ReplaceUses - replace all uses of the old node F with the use
|
||||
/// of the new node T.
|
||||
void ReplaceUses(SDValue F, SDValue T) {
|
||||
ISelUpdater ISU(*CurDAG, ISelPosition);
|
||||
CurDAG->ReplaceAllUsesOfValueWith(F, T);
|
||||
}
|
||||
|
||||
/// ReplaceUses - replace all uses of the old nodes F with the use
|
||||
/// of the new nodes T.
|
||||
void ReplaceUses(const SDValue *F, const SDValue *T, unsigned Num) {
|
||||
ISelUpdater ISU(*CurDAG, ISelPosition);
|
||||
CurDAG->ReplaceAllUsesOfValuesWith(F, T, Num);
|
||||
}
|
||||
|
||||
/// ReplaceUses - replace all uses of the old node F with the use
|
||||
/// of the new node T.
|
||||
void ReplaceUses(SDNode *F, SDNode *T) {
|
||||
ISelUpdater ISU(*CurDAG, ISelPosition);
|
||||
CurDAG->ReplaceAllUsesWith(F, T);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user