diff options
author | Carlos Alberto Enciso <carlos.alberto.enciso@gmail.com> | 2018-10-25 09:58:59 +0000 |
---|---|---|
committer | Carlos Alberto Enciso <carlos.alberto.enciso@gmail.com> | 2018-10-25 09:58:59 +0000 |
commit | 9a24e1a7cd0e7d24f0eaad8096617fdbfbc67fda (patch) | |
tree | 430d7a048fee7551702315272f200109c3f0a542 /llvm/lib/Transforms/Utils/SimplifyCFG.cpp | |
parent | d87196488715e363d2689a0f3950546ba6df1791 (diff) | |
download | llvm-9a24e1a7cd0e7d24f0eaad8096617fdbfbc67fda.zip llvm-9a24e1a7cd0e7d24f0eaad8096617fdbfbc67fda.tar.gz llvm-9a24e1a7cd0e7d24f0eaad8096617fdbfbc67fda.tar.bz2 |
[DebugInfo][Dexter] Unreachable line stepped onto after SimplifyCFG.
When SimplifyCFG changes the PHI node into a select instruction, the debug line records becomes ambiguous. It causes the debugger to display unreachable source lines.
Differential Revision: https://reviews.llvm.org/D53287
llvm-svn: 345250
Diffstat (limited to 'llvm/lib/Transforms/Utils/SimplifyCFG.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 22 |
1 files changed, 4 insertions, 18 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index 8dad617..dd0d441 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -2375,24 +2375,10 @@ static bool FoldTwoEntryPHINode(PHINode *PN, const TargetTransformInfo &TTI, // Move all 'aggressive' instructions, which are defined in the // conditional parts of the if's up to the dominating block. - if (IfBlock1) { - for (auto &I : *IfBlock1) { - I.dropUnknownNonDebugMetadata(); - dropDebugUsers(I); - } - DomBlock->getInstList().splice(InsertPt->getIterator(), - IfBlock1->getInstList(), IfBlock1->begin(), - IfBlock1->getTerminator()->getIterator()); - } - if (IfBlock2) { - for (auto &I : *IfBlock2) { - I.dropUnknownNonDebugMetadata(); - dropDebugUsers(I); - } - DomBlock->getInstList().splice(InsertPt->getIterator(), - IfBlock2->getInstList(), IfBlock2->begin(), - IfBlock2->getTerminator()->getIterator()); - } + if (IfBlock1) + hoistAllInstructionsInto(DomBlock, InsertPt, IfBlock1); + if (IfBlock2) + hoistAllInstructionsInto(DomBlock, InsertPt, IfBlock2); while (PHINode *PN = dyn_cast<PHINode>(BB->begin())) { // Change the PHI node into a select instruction. |