| ; RUN: opt -passes="default<O1>" %s -S | FileCheck %s |
| ; REQUIRES: asserts |
| |
| declare void @bar() |
| declare void @baz(ptr) |
| |
| ; CHECK-LABEL: @foo1() |
| define void @foo1() { |
| entry: |
| %tag = alloca i32, align 4 |
| call void @baz(ptr %tag) |
| %tmp = load i32, ptr %tag, align 4 |
| switch i32 %tmp, label %sw.bb799 [ |
| i32 10, label %sw.bb239 |
| ] |
| |
| sw.bb239: |
| call void @foo2() |
| br label %cleanup871 |
| |
| sw.bb799: |
| call void @foo3(i32 undef) |
| br label %cleanup871 |
| |
| cleanup871: |
| call void @bar() |
| unreachable |
| } |
| |
| define void @foo2() { |
| call void @foo4() |
| unreachable |
| } |
| |
| define void @foo3(i32 %ptr) { |
| call void @foo1() |
| unreachable |
| } |
| |
| define void @foo4() { |
| entry: |
| %tag = alloca i32, align 4 |
| call void @baz(ptr %tag) |
| %tmp = load i32, ptr %tag, align 4 |
| switch i32 %tmp, label %sw.bb442 [ |
| i32 16, label %sw.bb352 |
| ] |
| |
| sw.bb352: |
| call void @foo3(i32 undef) |
| unreachable |
| |
| sw.bb442: |
| call void @foo2() |
| unreachable |
| } |
| |