annotate test/Transforms/SimplifyCFG/switch_thread.ll @ 146:3fc4d5c3e21e

set tail call flag for code segment in CGCAll
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 23 Dec 2018 19:23:36 +0900
parents 1172e4bd9c6f
children c2174574ed3a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
1 ; RUN: opt < %s -simplifycfg -S | FileCheck %s
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 ; Test that we can thread a simple known condition through switch statements.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 declare void @foo1()
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 declare void @foo2()
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 declare void @DEAD()
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 define void @test1(i32 %V) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 switch i32 %V, label %A [
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 i32 4, label %T
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 i32 17, label %Done
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 i32 1234, label %A
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 ]
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 ;; V == 4 if we get here.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 T: ; preds = %0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 call void @foo1( )
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 ;; This switch is always statically determined.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 switch i32 %V, label %A2 [
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 i32 4, label %B
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 i32 17, label %C
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 i32 42, label %C
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 ]
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 A2: ; preds = %T
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 call void @DEAD( )
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 call void @DEAD( )
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 ;; always true
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 %cond2 = icmp eq i32 %V, 4 ; <i1> [#uses=1]
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 br i1 %cond2, label %Done, label %C
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 A: ; preds = %0, %0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 call void @foo1( )
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 ;; always true
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 %cond = icmp ne i32 %V, 4 ; <i1> [#uses=1]
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 br i1 %cond, label %Done, label %C
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 Done: ; preds = %B, %A, %A2, %0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 ret void
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 B: ; preds = %T
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 call void @foo2( )
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 ;; always true
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 %cond3 = icmp eq i32 %V, 4 ; <i1> [#uses=1]
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 br i1 %cond3, label %Done, label %C
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 C: ; preds = %B, %A, %A2, %T, %T
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 call void @DEAD( )
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 ret void
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
47
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
48 ; CHECK-LABEL: @test1(
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
49 ; CHECK-NEXT: switch i32 %V, label %A [
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
50 ; CHECK-NEXT: i32 4, label %T
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
51 ; CHECK-NEXT: i32 17, label %Done
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
52 ; CHECK-NEXT: ]
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
53 ; CHECK: T:
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
54 ; CHECK-NEXT: call void @foo1()
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
55 ; CHECK-NEXT: call void @foo2()
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
56 ; CHECK-NEXT: br label %Done
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
57 ; CHECK: A:
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
58 ; CHECK-NEXT: call void @foo1()
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
59 ; CHECK-NEXT: br label %Done
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
60 ; CHECK: Done:
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
61 ; CHECK-NEXT: ret void
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 define void @test2(i32 %V) {
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 switch i32 %V, label %A [
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 i32 4, label %T
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 i32 17, label %D
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 i32 1234, label %E
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 ]
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 ;; V != 4, 17, 1234 here.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 A: ; preds = %0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 call void @foo1( )
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 ;; This switch is always statically determined.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 switch i32 %V, label %E [
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 i32 4, label %C
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 i32 17, label %C
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 i32 42, label %D
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 ]
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 ;; unreacahble.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 C: ; preds = %A, %A
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 call void @DEAD( )
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 ret void
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 T: ; preds = %0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 call void @foo1( )
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 call void @foo1( )
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 ret void
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 D: ; preds = %A, %0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 call void @foo1( )
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 ret void
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 E: ; preds = %A, %0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 ret void
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
92
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
93 ; CHECK-LABEL: @test2(
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
94 ; CHECK-NEXT: switch i32 %V, label %A [
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
95 ; CHECK-NEXT: i32 4, label %T
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
96 ; CHECK-NEXT: i32 17, label %D
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
97 ; CHECK-NEXT: i32 1234, label %E
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
98 ; CHECK-NEXT: ]
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
99 ; CHECK: A:
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
100 ; CHECK-NEXT: call void @foo1()
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
101 ; CHECK-NEXT: [[COND:%.*]] = icmp eq i32 %V, 42
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
102 ; CHECK-NEXT: br i1 [[COND]], label %D, label %E
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
103 ; CHECK: T:
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
104 ; CHECK-NEXT: call void @foo1()
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
105 ; CHECK-NEXT: call void @foo1()
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
106 ; CHECK-NEXT: ret void
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
107 ; CHECK: D:
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
108 ; CHECK-NEXT: call void @foo1()
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
109 ; CHECK-NEXT: ret void
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
110 ; CHECK: E:
1172e4bd9c6f update 4.0.0
mir3636
parents: 0
diff changeset
111 ; CHECK-NEXT: ret void
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113