mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127299 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e11128dd9d
commit
2adc5b6a17
@ -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;
|
||||
}
|
||||
|
31
test/Transforms/SimplifyCFG/2011-03-08-UnreachableUse.ll
Normal file
31
test/Transforms/SimplifyCFG/2011-03-08-UnreachableUse.ll
Normal file
@ -0,0 +1,31 @@
|
||||
; RUN: opt < %s -simplifycfg -S | FileCheck %s
|
||||
; PR9420
|
||||
|
||||
; Note that the crash in PR9420 test is sensitive to the ordering of
|
||||
; the transformations done by SimplifyCFG, so this test is likely to rot
|
||||
; quickly.
|
||||
|
||||
define noalias i8* @func_29() nounwind {
|
||||
; CHECK: entry:
|
||||
; CHECK-NEXT: unreachable
|
||||
entry:
|
||||
br label %for.cond
|
||||
|
||||
for.cond: ; preds = %for.inc38, %entry
|
||||
%p_34.addr.0 = phi i16 [ 1, %entry ], [ %conv40, %for.inc38 ]
|
||||
br label %for.cond1
|
||||
|
||||
for.cond1: ; preds = %for.inc29, %for.cond
|
||||
%p_32.addr.0 = phi i1 [ true, %for.cond ], [ true, %for.inc29 ]
|
||||
br i1 %p_32.addr.0, label %for.body8, label %for.inc38
|
||||
|
||||
for.body8: ; preds = %for.cond1
|
||||
unreachable
|
||||
|
||||
for.inc29: ; preds = %for.cond17
|
||||
br label %for.cond1
|
||||
|
||||
for.inc38: ; preds = %for.end32
|
||||
%conv40 = add i16 %p_34.addr.0, 1
|
||||
br label %for.cond
|
||||
}
|
Loading…
Reference in New Issue
Block a user