@@ -6639,19 +6639,26 @@ void SelectionDAG::TransferDbgValues(SDValue From, SDValue To) {
6639
6639
SDNode *FromNode = From.getNode ();
6640
6640
SDNode *ToNode = To.getNode ();
6641
6641
ArrayRef<SDDbgValue *> DVs = GetDbgValues (FromNode);
6642
+ SmallVector<SDDbgValue *, 2 > ClonedDVs;
6642
6643
for (ArrayRef<SDDbgValue *>::iterator I = DVs.begin (), E = DVs.end ();
6643
6644
I != E; ++I) {
6644
6645
SDDbgValue *Dbg = *I;
6645
6646
// Only add Dbgvalues attached to same ResNo.
6646
6647
if (Dbg->getKind () == SDDbgValue::SDNODE &&
6647
- Dbg->getResNo () == From.getResNo ()) {
6648
+ Dbg->getSDNode () == From.getNode () &&
6649
+ Dbg->getResNo () == From.getResNo () && !Dbg->isInvalidated ()) {
6650
+ assert (FromNode != ToNode &&
6651
+ " Should not transfer Debug Values intranode" );
6648
6652
SDDbgValue *Clone =
6649
6653
getDbgValue (Dbg->getVariable (), Dbg->getExpression (), ToNode,
6650
6654
To.getResNo (), Dbg->isIndirect (), Dbg->getOffset (),
6651
6655
Dbg->getDebugLoc (), Dbg->getOrder ());
6652
- AddDbgValue (Clone, ToNode, false );
6656
+ ClonedDVs.push_back (Clone);
6657
+ Dbg->setIsInvalidated ();
6653
6658
}
6654
6659
}
6660
+ for (SDDbgValue *I : ClonedDVs)
6661
+ AddDbgValue (I, ToNode, false );
6655
6662
}
6656
6663
6657
6664
// ===----------------------------------------------------------------------===//
0 commit comments