summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2017-08-22 16:28:07 +0000
committerJonas Devlieghere <jonas@devlieghere.com>2017-08-22 16:28:07 +0000
commita680a8f5f85f217a353ae0d5a90efc672faf1d01 (patch)
treeaafdb3492e5ae3c46ea91e68e021263796bb9746 /llvm/lib/CodeGen/SelectionDAG
parent0ab50f6d68f61f5497561ddf26a48d10582501a3 (diff)
downloadbcm5719-llvm-a680a8f5f85f217a353ae0d5a90efc672faf1d01.tar.gz
bcm5719-llvm-a680a8f5f85f217a353ae0d5a90efc672faf1d01.zip
[Debug info] Add new DbgValues after looping over DAG
I was contacted by Jesper Antonsson from Ericsson who ran into problems with r311181 in their test suites with for an out-of-tree target. Because of the latter I don't have a reproducer, but we definitely don't want to modify the data structure on which we are iterating inside the loop. llvm-svn: 311466
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
index 7bef90d01a0..9321a956fbd 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
@@ -834,6 +834,7 @@ static void transferDbgValues(SelectionDAG &DAG, DIBuilder &DIB, SDValue From,
SDNode *ToNode = To.getNode();
assert(FromNode != ToNode);
+ SmallVector<SDDbgValue *, 2> ClonedDVs;
for (SDDbgValue *Dbg : DAG.GetDbgValues(FromNode)) {
if (Dbg->getKind() != SDDbgValue::SDNODE)
break;
@@ -846,12 +847,15 @@ static void transferDbgValues(SelectionDAG &DAG, DIBuilder &DIB, SDValue From,
DAG.getDbgValue(Var, Fragment, ToNode, To.getResNo(), Dbg->isIndirect(),
Dbg->getDebugLoc(), Dbg->getOrder());
Dbg->setIsInvalidated();
- DAG.AddDbgValue(Clone, ToNode, false);
+ ClonedDVs.push_back(Clone);
// Add the expression to the metadata graph so isn't lost in MIR dumps.
const Module *M = DAG.getMachineFunction().getMMI().getModule();
M->getNamedMetadata("llvm.dbg.mir")->addOperand(Fragment);
}
+
+ for (SDDbgValue *Dbg : ClonedDVs)
+ DAG.AddDbgValue(Dbg, ToNode, false);
}
void DAGTypeLegalizer::SetExpandedInteger(SDValue Op, SDValue Lo,
OpenPOWER on IntegriCloud