[SimplifyCFG] Further improve our ability to remove redundant catchpads
[oota-llvm.git] / test / Transforms / SimplifyCFG / switch-to-br.ll
1 ; RUN: opt %s -simplifycfg -S | FileCheck %s
2
3 declare i32 @f(i32)
4
5 define i32 @basic(i32 %x) {
6 ; CHECK-LABEL: @basic
7 ; CHECK-LABEL: entry:
8 ; CHECK-NEXT:  call i32 @f(i32 0)
9 ; CHECK-NEXT:  ret i32 %0
10
11 entry:
12   switch i32 %x, label %default [
13     i32 5, label %default
14     i32 6, label %default
15     i32 7, label %default
16   ]
17 default:
18   %0 = call i32 @f(i32 0)
19   ret i32 %0
20 }
21
22
23 define i32 @constant() {
24 ; CHECK-LABEL: @constant
25 ; CHECK-LABEL: entry:
26 ; CHECK-NEXT:  call i32 @f(i32 1)
27 ; CHECK-NEXT:  ret i32 %0
28
29 entry:
30   switch i32 42, label %default [
31     i32 41, label %default
32     i32 42, label %a
33     i32 43, label %b
34   ]
35 default:
36   %0 = call i32 @f(i32 0)
37   ret i32 %0
38 a:
39   %1 = call i32 @f(i32 1)
40   ret i32 %1
41 b:
42   %2 = call i32 @f(i32 2)
43   ret i32 %2
44 }
45
46
47 define i32 @unreachable(i32 %x) {
48 ; CHECK-LABEL: @unreachable
49 ; CHECK-LABEL: entry:
50 ; CHECK-NEXT:  call i32 @f(i32 0)
51 ; CHECK-NEXT:  ret i32 %0
52
53 entry:
54   switch i32 %x, label %unreachable [
55     i32 5, label %a
56     i32 6, label %a
57     i32 7, label %a
58   ]
59 unreachable:
60   unreachable
61 a:
62   %0 = call i32 @f(i32 0)
63   ret i32 %0
64 }