mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-09 01:38:03 +00:00
Move SDNode order propagation to SDNodeOrdering, which also fixes a missed
case of order propagation during isel. Thanks Owen for the suggestion! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177525 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
06091513c2
commit
fa963a885c
@ -619,17 +619,6 @@ void DAGTypeLegalizer::RemapValue(SDValue &N) {
|
||||
}
|
||||
}
|
||||
|
||||
/// PropagateOrdering - Propagate SDNode ordering information from \p Old to
|
||||
/// \p New. Generally, this just means copying the ordering value, but if the
|
||||
/// new node is actually a recycled node with a lower ordering already, then
|
||||
/// we do not want to propagate the new (higher) ordering.
|
||||
void DAGTypeLegalizer::PropagateOrdering(SDNode *Old, SDNode *New) {
|
||||
unsigned OldOrder = DAG.GetOrdering(Old);
|
||||
unsigned NewOrder = DAG.GetOrdering(New);
|
||||
if (NewOrder == 0 || (NewOrder > 0 && OldOrder < NewOrder))
|
||||
DAG.AssignOrdering(New, OldOrder);
|
||||
}
|
||||
|
||||
namespace {
|
||||
/// NodeUpdateListener - This class is a DAGUpdateListener that listens for
|
||||
/// updates to nodes and recomputes their ready state.
|
||||
@ -748,7 +737,7 @@ void DAGTypeLegalizer::SetPromotedInteger(SDValue Op, SDValue Result) {
|
||||
OpEntry = Result;
|
||||
|
||||
// Propagate node ordering
|
||||
PropagateOrdering(Op.getNode(), Result.getNode());
|
||||
DAG.AssignOrdering(Result.getNode(), DAG.GetOrdering(Op.getNode()));
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::SetSoftenedFloat(SDValue Op, SDValue Result) {
|
||||
@ -762,7 +751,7 @@ void DAGTypeLegalizer::SetSoftenedFloat(SDValue Op, SDValue Result) {
|
||||
OpEntry = Result;
|
||||
|
||||
// Propagate node ordering
|
||||
PropagateOrdering(Op.getNode(), Result.getNode());
|
||||
DAG.AssignOrdering(Result.getNode(), DAG.GetOrdering(Op.getNode()));
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::SetScalarizedVector(SDValue Op, SDValue Result) {
|
||||
@ -779,7 +768,7 @@ void DAGTypeLegalizer::SetScalarizedVector(SDValue Op, SDValue Result) {
|
||||
OpEntry = Result;
|
||||
|
||||
// Propagate node ordering
|
||||
PropagateOrdering(Op.getNode(), Result.getNode());
|
||||
DAG.AssignOrdering(Result.getNode(), DAG.GetOrdering(Op.getNode()));
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::GetExpandedInteger(SDValue Op, SDValue &Lo,
|
||||
@ -809,8 +798,8 @@ void DAGTypeLegalizer::SetExpandedInteger(SDValue Op, SDValue Lo,
|
||||
Entry.second = Hi;
|
||||
|
||||
// Propagate ordering
|
||||
PropagateOrdering(Op.getNode(), Lo.getNode());
|
||||
PropagateOrdering(Op.getNode(), Hi.getNode());
|
||||
DAG.AssignOrdering(Lo.getNode(), DAG.GetOrdering(Op.getNode()));
|
||||
DAG.AssignOrdering(Hi.getNode(), DAG.GetOrdering(Op.getNode()));
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::GetExpandedFloat(SDValue Op, SDValue &Lo,
|
||||
@ -840,8 +829,8 @@ void DAGTypeLegalizer::SetExpandedFloat(SDValue Op, SDValue Lo,
|
||||
Entry.second = Hi;
|
||||
|
||||
// Propagate ordering
|
||||
PropagateOrdering(Op.getNode(), Lo.getNode());
|
||||
PropagateOrdering(Op.getNode(), Hi.getNode());
|
||||
DAG.AssignOrdering(Lo.getNode(), DAG.GetOrdering(Op.getNode()));
|
||||
DAG.AssignOrdering(Hi.getNode(), DAG.GetOrdering(Op.getNode()));
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::GetSplitVector(SDValue Op, SDValue &Lo,
|
||||
@ -873,8 +862,8 @@ void DAGTypeLegalizer::SetSplitVector(SDValue Op, SDValue Lo,
|
||||
Entry.second = Hi;
|
||||
|
||||
// Propagate ordering
|
||||
PropagateOrdering(Op.getNode(), Lo.getNode());
|
||||
PropagateOrdering(Op.getNode(), Hi.getNode());
|
||||
DAG.AssignOrdering(Lo.getNode(), DAG.GetOrdering(Op.getNode()));
|
||||
DAG.AssignOrdering(Hi.getNode(), DAG.GetOrdering(Op.getNode()));
|
||||
}
|
||||
|
||||
void DAGTypeLegalizer::SetWidenedVector(SDValue Op, SDValue Result) {
|
||||
@ -888,7 +877,7 @@ void DAGTypeLegalizer::SetWidenedVector(SDValue Op, SDValue Result) {
|
||||
OpEntry = Result;
|
||||
|
||||
// Propagate node ordering
|
||||
PropagateOrdering(Op.getNode(), Result.getNode());
|
||||
DAG.AssignOrdering(Result.getNode(), DAG.GetOrdering(Op.getNode()));
|
||||
}
|
||||
|
||||
|
||||
|
@ -143,7 +143,6 @@ private:
|
||||
void ExpungeNode(SDNode *N);
|
||||
void PerformExpensiveChecks();
|
||||
void RemapValue(SDValue &N);
|
||||
void PropagateOrdering(SDNode *Old, SDNode *New);
|
||||
|
||||
// Common routines.
|
||||
SDValue BitConvertToInteger(SDValue Op);
|
||||
|
@ -34,7 +34,9 @@ public:
|
||||
SDNodeOrdering() {}
|
||||
|
||||
void add(const SDNode *Node, unsigned O) {
|
||||
OrderMap[Node] = O;
|
||||
unsigned OldOrder = getOrder(Node);
|
||||
if (OldOrder == 0 || (OldOrder > 0 && O < OldOrder))
|
||||
OrderMap[Node] = O;
|
||||
}
|
||||
void remove(const SDNode *Node) {
|
||||
DenseMap<const SDNode*, unsigned>::iterator Itr = OrderMap.find(Node);
|
||||
|
@ -786,7 +786,9 @@ void SelectionDAGISel::DoInstructionSelection() {
|
||||
continue;
|
||||
// Replace node.
|
||||
if (ResNode) {
|
||||
// Propagate ordering
|
||||
CurDAG->AssignOrdering(ResNode, CurDAG->GetOrdering(Node));
|
||||
|
||||
ReplaceUses(Node, ResNode);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user