summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2011-03-09 00:48:33 +0000
committerEli Friedman <eli.friedman@gmail.com>2011-03-09 00:48:33 +0000
commitaac35b3fbbc1215671ae3e8656d96be0f8701ea7 (patch)
treeede429f0ef6141f4ce5938e76fea8153321b7df4 /llvm/lib/Transforms
parent4fa0f3040ddb3fec80a5021898e399bc9b9a03ab (diff)
downloadbcm5719-llvm-aac35b3fbbc1215671ae3e8656d96be0f8701ea7.tar.gz
bcm5719-llvm-aac35b3fbbc1215671ae3e8656d96be0f8701ea7.zip
PR9420; an instruction before an unreachable is guaranteed not to have any
reachable uses, but there still might be uses in dead blocks. Use the standard solution of replacing all the uses with undef. This is a rare case because it's very sensitive to phase ordering in SimplifyCFG. llvm-svn: 127299
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Utils/SimplifyCFG.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
index 72fa468db60..09f4fb2e139 100644
--- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -2168,7 +2168,9 @@ bool SimplifyCFGOpt::SimplifyUnreachable(UnreachableInst *UI) {
if (LI->isVolatile())
break;
- // Delete this instruction
+ // Delete this instruction (any uses are guaranteed to be dead)
+ if (!BBI->use_empty())
+ BBI->replaceAllUsesWith(UndefValue::get(BBI->getType()));
BBI->eraseFromParent();
Changed = true;
}
OpenPOWER on IntegriCloud