ExpungeNode is only needed for new nodes! This
fixes CodeGen/PowerPC/2008-06-19-LegalizerCrash.ll when using the new LegalizeTypes infrastructure. llvm-svn: 52903
This commit is contained in:
parent
54dd81ced9
commit
9e08148f29
|
@ -364,16 +364,19 @@ void DAGTypeLegalizer::RemapNode(SDOperand &N) {
|
|||
}
|
||||
}
|
||||
|
||||
/// ExpungeNode - If this is a deleted value that was kept around to speed up
|
||||
/// remapping, remove it globally now. The only map that can have a deleted
|
||||
/// node as a source is ReplacedNodes. Other maps can have deleted nodes as
|
||||
/// targets, but since their looked-up values are always immediately remapped
|
||||
/// using RemapNode, resulting in a not-deleted node, this is harmless as long
|
||||
/// as ReplacedNodes/RemapNode always performs correct mappings. The mapping
|
||||
/// will always be correct as long as ExpungeNode is called on the source when
|
||||
/// adding a new node to ReplacedNodes, and called on the target when adding
|
||||
/// a new node to any map.
|
||||
/// ExpungeNode - If this is a reincarnation of a deleted value that was kept
|
||||
/// around to speed up remapping, remove it from all maps now. The only map
|
||||
/// that can have a deleted node as a source is ReplacedNodes. Other maps can
|
||||
/// have deleted nodes as targets, but since their looked-up values are always
|
||||
/// immediately remapped using RemapNode, resulting in a not-deleted node, this
|
||||
/// is harmless as long as ReplacedNodes/RemapNode always performs correct
|
||||
/// mappings. The mapping will always be correct as long as ExpungeNode is
|
||||
/// called on the source when adding a new node to ReplacedNodes, and called on
|
||||
/// the target when adding a new node to any map.
|
||||
void DAGTypeLegalizer::ExpungeNode(SDOperand N) {
|
||||
if (N.Val->getNodeId() != NewNode)
|
||||
return;
|
||||
|
||||
SDOperand Replacement = N;
|
||||
RemapNode(Replacement);
|
||||
if (Replacement != N) {
|
||||
|
|
Loading…
Reference in New Issue