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