mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-10 08:40:41 +00:00
I don't see how NodeUpdated can be called with a
ReadyToProcess node - add an assertion to check this. Add an assertion to NodeDeleted that checks that processed/ready nodes are indeed not deleted. It is because they are never deleted that none of the maps can have a deleted node as the source of a mapping. It does however seem to be possible in theory to have a deleted value as the target of a mapping, however this has not yet been spotted in the wild. Still mulling on what to do about this. [The theoretical situation is this: a node A is expanded/promoted/whatever to a newly created node B. Thus A->B is added to a map. When the subtree rooted at B is legalized it is conceivable that B is deleted due to RAUW on a node somewhere above it]. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46705 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
204e84e138
commit
6cb7e6d36b
@ -220,22 +220,27 @@ void DAGTypeLegalizer::MarkNewNodes(SDNode *N) {
|
||||
namespace {
|
||||
/// NodeUpdateListener - This class is a DAGUpdateListener that listens for
|
||||
/// updates to nodes and recomputes their ready state.
|
||||
class VISIBILITY_HIDDEN NodeUpdateListener :
|
||||
class VISIBILITY_HIDDEN NodeUpdateListener :
|
||||
public SelectionDAG::DAGUpdateListener {
|
||||
DAGTypeLegalizer &DTL;
|
||||
public:
|
||||
NodeUpdateListener(DAGTypeLegalizer &dtl) : DTL(dtl) {}
|
||||
|
||||
|
||||
virtual void NodeDeleted(SDNode *N) {
|
||||
// Ignore deletes.
|
||||
assert(N->getNodeId() != DAGTypeLegalizer::Processed &&
|
||||
N->getNodeId() != DAGTypeLegalizer::ReadyToProcess &&
|
||||
"RAUW deleted processed node!");
|
||||
}
|
||||
|
||||
|
||||
virtual void NodeUpdated(SDNode *N) {
|
||||
// Node updates can mean pretty much anything. It is possible that an
|
||||
// operand was set to something already processed (f.e.) in which case
|
||||
// this node could become ready. Recompute its flags.
|
||||
if (N->getNodeId() != DAGTypeLegalizer::ReadyToProcess)
|
||||
DTL.ReanalyzeNodeFlags(N);
|
||||
assert(N->getNodeId() != DAGTypeLegalizer::Processed &&
|
||||
N->getNodeId() != DAGTypeLegalizer::ReadyToProcess &&
|
||||
"RAUW updated processed node!");
|
||||
DTL.ReanalyzeNodeFlags(N);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user