diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2011-03-09 00:48:33 +0000 |
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2011-03-09 00:48:33 +0000 |
| commit | aac35b3fbbc1215671ae3e8656d96be0f8701ea7 (patch) | |
| tree | ede429f0ef6141f4ce5938e76fea8153321b7df4 /llvm/lib/Transforms/Utils/SimplifyCFG.cpp | |
| parent | 4fa0f3040ddb3fec80a5021898e399bc9b9a03ab (diff) | |
| download | llvm-aac35b3fbbc1215671ae3e8656d96be0f8701ea7.zip llvm-aac35b3fbbc1215671ae3e8656d96be0f8701ea7.tar.gz llvm-aac35b3fbbc1215671ae3e8656d96be0f8701ea7.tar.bz2 | |
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/Utils/SimplifyCFG.cpp')
| -rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index 72fa468..09f4fb2 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; } |
