llvm/test/Transforms/SimplifyCFG/2011-03-08-UnreachableUse.ll
Eli Friedman 2adc5b6a17 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
2011-03-09 00:48:33 +00:00

32 lines
1006 B
LLVM

; 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
}