; RUN: opt < %s -lcssa -licm -S | FileCheck %s | |
; PR30454 | |
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" | |
target triple = "x86_64-unknown-linux-gnu" | |
declare i8 @bar() | |
; Test that we preserve LCSSA form when removing edges from unreachable blocks. | |
; CHECK-LABEL: @foo | |
define void @foo() { | |
entry: | |
br label %for.cond | |
for.cond: | |
%x = phi i8 [ undef, %entry ], [ %y, %for.latch ] | |
br i1 undef, label %for.latch, label %exit | |
; CHECK: unreachable.bb: | |
; CHECK-NEXT: unreachable | |
unreachable.bb: | |
br i1 undef, label %exit, label %for.latch | |
for.latch: | |
%y = call i8 @bar() | |
br label %for.cond | |
; CHECK: exit: | |
; CHECK-NEXT: %x.lcssa = phi i8 [ %x, %for.cond ] | |
exit: | |
%z = zext i8 %x to i32 | |
ret void | |
} |