diff options
| author | Jonas Devlieghere <jonas@devlieghere.com> | 2017-08-22 16:28:07 +0000 |
|---|---|---|
| committer | Jonas Devlieghere <jonas@devlieghere.com> | 2017-08-22 16:28:07 +0000 |
| commit | a680a8f5f85f217a353ae0d5a90efc672faf1d01 (patch) | |
| tree | aafdb3492e5ae3c46ea91e68e021263796bb9746 /llvm/lib/CodeGen/SelectionDAG | |
| parent | 0ab50f6d68f61f5497561ddf26a48d10582501a3 (diff) | |
| download | bcm5719-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.cpp | 6 |
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, |

