Implement PR5795 by merging duplicated return blocks. This could go further
[oota-llvm.git] / test / Transforms / SimplifyCFG / basictest.ll
1 ; Test CFG simplify removal of branch instructions.
2 ;
3 ; RUN: opt < %s -simplifycfg -S | FileCheck %s
4
5 define void @test1() {
6         br label %BB1
7 BB1:            ; preds = %0
8         ret void
9 ; CHECK: @test1
10 ; CHECK-NEXT: ret void
11 }
12
13 define void @test2() {
14         ret void
15 BB1:            ; No predecessors!
16         ret void
17 ; CHECK: @test2
18 ; CHECK-NEXT: ret void
19 ; CHECK-NEXT: }
20 }
21
22 define void @test3(i1 %T) {
23         br i1 %T, label %BB1, label %BB1
24 BB1:            ; preds = %0, %0
25         ret void
26 ; CHECK: @test3
27 ; CHECK-NEXT: ret void
28 }
29
30
31 define void @test4() {
32   br label %return
33 return:
34   ret void
35 ; CHECK: @test4
36 ; CHECK-NEXT: ret void
37 }
38 @test4g = global i8* blockaddress(@test4, %return)
39
40
41 ; PR5795
42 define void @test5(i32 %A) {
43   switch i32 %A, label %return [
44     i32 2, label %bb
45     i32 10, label %bb1
46   ]
47
48 bb:                                               ; preds = %entry
49   ret void
50
51 bb1:                                              ; preds = %entry
52   ret void
53
54 return:                                           ; preds = %entry
55   ret void
56 ; CHECK: @test5
57 ; CHECK-NEXT: bb:
58 ; CHECK-NEXT: ret void
59 }