aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
diff options
context:
space:
mode:
authorCarlos Alberto Enciso <carlos.alberto.enciso@gmail.com>2018-10-25 09:58:59 +0000
committerCarlos Alberto Enciso <carlos.alberto.enciso@gmail.com>2018-10-25 09:58:59 +0000
commit9a24e1a7cd0e7d24f0eaad8096617fdbfbc67fda (patch)
tree430d7a048fee7551702315272f200109c3f0a542 /llvm/lib/Transforms/Utils/SimplifyCFG.cpp
parentd87196488715e363d2689a0f3950546ba6df1791 (diff)
downloadllvm-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.cpp22
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.