annotate llvm/test/Transforms/SpeculateAroundPHIs/basic-x86.ll @ 207:2e18cbf3894f

LLVM12
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Jun 2021 06:07:14 +0900
parents 0572611fdcc8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
150
anatofuz
parents:
diff changeset
2 ; Test the basic functionality of speculating around PHI nodes based on reduced
anatofuz
parents:
diff changeset
3 ; cost of the constant operands to the PHI nodes using the x86 cost model.
anatofuz
parents:
diff changeset
4 ;
anatofuz
parents:
diff changeset
5 ; REQUIRES: x86-registered-target
anatofuz
parents:
diff changeset
6 ; RUN: opt -S -passes=spec-phis < %s | FileCheck %s
anatofuz
parents:
diff changeset
7
anatofuz
parents:
diff changeset
8 target triple = "x86_64-unknown-unknown"
anatofuz
parents:
diff changeset
9
anatofuz
parents:
diff changeset
10 define i32 @test_basic(i1 %flag, i32 %arg) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
11 ; CHECK-LABEL: @test_basic(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
12 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
13 ; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[A:%.*]], label [[B:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
14 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
15 ; CHECK-NEXT: [[SUM_0:%.*]] = add i32 [[ARG:%.*]], 7
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
16 ; CHECK-NEXT: br label [[EXIT:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
17 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
18 ; CHECK-NEXT: [[SUM_1:%.*]] = add i32 [[ARG]], 11
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
19 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
20 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
21 ; CHECK-NEXT: [[SUM_PHI:%.*]] = phi i32 [ [[SUM_0]], [[A]] ], [ [[SUM_1]], [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
22 ; CHECK-NEXT: ret i32 [[SUM_PHI]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
23 ;
150
anatofuz
parents:
diff changeset
24 entry:
anatofuz
parents:
diff changeset
25 br i1 %flag, label %a, label %b
anatofuz
parents:
diff changeset
26
anatofuz
parents:
diff changeset
27 a:
anatofuz
parents:
diff changeset
28 br label %exit
anatofuz
parents:
diff changeset
29
anatofuz
parents:
diff changeset
30 b:
anatofuz
parents:
diff changeset
31 br label %exit
anatofuz
parents:
diff changeset
32
anatofuz
parents:
diff changeset
33 exit:
anatofuz
parents:
diff changeset
34 %p = phi i32 [ 7, %a ], [ 11, %b ]
anatofuz
parents:
diff changeset
35 %sum = add i32 %arg, %p
anatofuz
parents:
diff changeset
36 ret i32 %sum
anatofuz
parents:
diff changeset
37 }
anatofuz
parents:
diff changeset
38
anatofuz
parents:
diff changeset
39 ; Check that we handle commuted operands and get the constant onto the RHS.
anatofuz
parents:
diff changeset
40 define i32 @test_commuted(i1 %flag, i32 %arg) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
41 ; CHECK-LABEL: @test_commuted(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
42 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
43 ; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[A:%.*]], label [[B:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
44 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
45 ; CHECK-NEXT: [[SUM_0:%.*]] = add i32 [[ARG:%.*]], 7
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
46 ; CHECK-NEXT: br label [[EXIT:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
47 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
48 ; CHECK-NEXT: [[SUM_1:%.*]] = add i32 [[ARG]], 11
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
49 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
50 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
51 ; CHECK-NEXT: [[SUM_PHI:%.*]] = phi i32 [ [[SUM_0]], [[A]] ], [ [[SUM_1]], [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
52 ; CHECK-NEXT: ret i32 [[SUM_PHI]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
53 ;
150
anatofuz
parents:
diff changeset
54 entry:
anatofuz
parents:
diff changeset
55 br i1 %flag, label %a, label %b
anatofuz
parents:
diff changeset
56
anatofuz
parents:
diff changeset
57 a:
anatofuz
parents:
diff changeset
58 br label %exit
anatofuz
parents:
diff changeset
59
anatofuz
parents:
diff changeset
60 b:
anatofuz
parents:
diff changeset
61 br label %exit
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 exit:
anatofuz
parents:
diff changeset
64 %p = phi i32 [ 7, %a ], [ 11, %b ]
anatofuz
parents:
diff changeset
65 %sum = add i32 %p, %arg
anatofuz
parents:
diff changeset
66 ret i32 %sum
anatofuz
parents:
diff changeset
67 }
anatofuz
parents:
diff changeset
68
anatofuz
parents:
diff changeset
69 define i32 @test_split_crit_edge(i1 %flag, i32 %arg) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
70 ; CHECK-LABEL: @test_split_crit_edge(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
71 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
72 ; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[ENTRY_EXIT_CRIT_EDGE:%.*]], label [[A:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
73 ; CHECK: entry.exit_crit_edge:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
74 ; CHECK-NEXT: [[SUM_0:%.*]] = add i32 [[ARG:%.*]], 7
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
75 ; CHECK-NEXT: br label [[EXIT:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
76 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
77 ; CHECK-NEXT: [[SUM_1:%.*]] = add i32 [[ARG]], 11
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
78 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
79 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
80 ; CHECK-NEXT: [[SUM_PHI:%.*]] = phi i32 [ [[SUM_0]], [[ENTRY_EXIT_CRIT_EDGE]] ], [ [[SUM_1]], [[A]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
81 ; CHECK-NEXT: ret i32 [[SUM_PHI]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
82 ;
150
anatofuz
parents:
diff changeset
83 entry:
anatofuz
parents:
diff changeset
84 br i1 %flag, label %exit, label %a
anatofuz
parents:
diff changeset
85
anatofuz
parents:
diff changeset
86 a:
anatofuz
parents:
diff changeset
87 br label %exit
anatofuz
parents:
diff changeset
88
anatofuz
parents:
diff changeset
89 exit:
anatofuz
parents:
diff changeset
90 %p = phi i32 [ 7, %entry ], [ 11, %a ]
anatofuz
parents:
diff changeset
91 %sum = add i32 %arg, %p
anatofuz
parents:
diff changeset
92 ret i32 %sum
anatofuz
parents:
diff changeset
93 }
anatofuz
parents:
diff changeset
94
anatofuz
parents:
diff changeset
95 define i32 @test_no_spec_dominating_inst(i1 %flag, i32* %ptr) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
96 ; CHECK-LABEL: @test_no_spec_dominating_inst(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
97 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
98 ; CHECK-NEXT: [[LOAD:%.*]] = load i32, i32* [[PTR:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
99 ; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[A:%.*]], label [[B:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
100 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
101 ; CHECK-NEXT: [[SUM_0:%.*]] = add i32 [[LOAD]], 7
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
102 ; CHECK-NEXT: br label [[EXIT:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
103 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
104 ; CHECK-NEXT: [[SUM_1:%.*]] = add i32 [[LOAD]], 11
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
105 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
106 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
107 ; CHECK-NEXT: [[SUM_PHI:%.*]] = phi i32 [ [[SUM_0]], [[A]] ], [ [[SUM_1]], [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
108 ; CHECK-NEXT: ret i32 [[SUM_PHI]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
109 ;
150
anatofuz
parents:
diff changeset
110 entry:
anatofuz
parents:
diff changeset
111 %load = load i32, i32* %ptr
anatofuz
parents:
diff changeset
112 br i1 %flag, label %a, label %b
anatofuz
parents:
diff changeset
113
anatofuz
parents:
diff changeset
114 a:
anatofuz
parents:
diff changeset
115 br label %exit
anatofuz
parents:
diff changeset
116
anatofuz
parents:
diff changeset
117 b:
anatofuz
parents:
diff changeset
118 br label %exit
anatofuz
parents:
diff changeset
119
anatofuz
parents:
diff changeset
120 exit:
anatofuz
parents:
diff changeset
121 %p = phi i32 [ 7, %a ], [ 11, %b ]
anatofuz
parents:
diff changeset
122 %sum = add i32 %load, %p
anatofuz
parents:
diff changeset
123 ret i32 %sum
anatofuz
parents:
diff changeset
124 }
anatofuz
parents:
diff changeset
125
anatofuz
parents:
diff changeset
126 ; We have special logic handling PHI nodes, make sure it doesn't get confused
anatofuz
parents:
diff changeset
127 ; by a dominating PHI.
anatofuz
parents:
diff changeset
128 define i32 @test_no_spec_dominating_phi(i1 %flag1, i1 %flag2, i32 %x, i32 %y) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
129 ; CHECK-LABEL: @test_no_spec_dominating_phi(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
130 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
131 ; CHECK-NEXT: br i1 [[FLAG1:%.*]], label [[X_BLOCK:%.*]], label [[Y_BLOCK:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
132 ; CHECK: x.block:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
133 ; CHECK-NEXT: br label [[MERGE:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
134 ; CHECK: y.block:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
135 ; CHECK-NEXT: br label [[MERGE]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
136 ; CHECK: merge:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
137 ; CHECK-NEXT: [[XY_PHI:%.*]] = phi i32 [ [[X:%.*]], [[X_BLOCK]] ], [ [[Y:%.*]], [[Y_BLOCK]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
138 ; CHECK-NEXT: br i1 [[FLAG2:%.*]], label [[A:%.*]], label [[B:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
139 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
140 ; CHECK-NEXT: [[SUM_0:%.*]] = add i32 [[XY_PHI]], 7
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
141 ; CHECK-NEXT: br label [[EXIT:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
142 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
143 ; CHECK-NEXT: [[SUM_1:%.*]] = add i32 [[XY_PHI]], 11
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
144 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
145 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
146 ; CHECK-NEXT: [[SUM_PHI:%.*]] = phi i32 [ [[SUM_0]], [[A]] ], [ [[SUM_1]], [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
147 ; CHECK-NEXT: ret i32 [[SUM_PHI]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
148 ;
150
anatofuz
parents:
diff changeset
149 entry:
anatofuz
parents:
diff changeset
150 br i1 %flag1, label %x.block, label %y.block
anatofuz
parents:
diff changeset
151
anatofuz
parents:
diff changeset
152 x.block:
anatofuz
parents:
diff changeset
153 br label %merge
anatofuz
parents:
diff changeset
154
anatofuz
parents:
diff changeset
155 y.block:
anatofuz
parents:
diff changeset
156 br label %merge
anatofuz
parents:
diff changeset
157
anatofuz
parents:
diff changeset
158 merge:
anatofuz
parents:
diff changeset
159 %xy.phi = phi i32 [ %x, %x.block ], [ %y, %y.block ]
anatofuz
parents:
diff changeset
160 br i1 %flag2, label %a, label %b
anatofuz
parents:
diff changeset
161
anatofuz
parents:
diff changeset
162 a:
anatofuz
parents:
diff changeset
163 br label %exit
anatofuz
parents:
diff changeset
164
anatofuz
parents:
diff changeset
165 b:
anatofuz
parents:
diff changeset
166 br label %exit
anatofuz
parents:
diff changeset
167
anatofuz
parents:
diff changeset
168 exit:
anatofuz
parents:
diff changeset
169 %p = phi i32 [ 7, %a ], [ 11, %b ]
anatofuz
parents:
diff changeset
170 %sum = add i32 %xy.phi, %p
anatofuz
parents:
diff changeset
171 ret i32 %sum
anatofuz
parents:
diff changeset
172 }
anatofuz
parents:
diff changeset
173
anatofuz
parents:
diff changeset
174 ; Ensure that we will speculate some number of "free" instructions on the given
anatofuz
parents:
diff changeset
175 ; architecture even though they are unrelated to the PHI itself.
anatofuz
parents:
diff changeset
176 define i32 @test_speculate_free_insts(i1 %flag, i64 %arg) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
177 ; CHECK-LABEL: @test_speculate_free_insts(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
178 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
179 ; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[A:%.*]], label [[B:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
180 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
181 ; CHECK-NEXT: [[T1_0:%.*]] = trunc i64 [[ARG:%.*]] to i48
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
182 ; CHECK-NEXT: [[T2_0:%.*]] = trunc i48 [[T1_0]] to i32
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
183 ; CHECK-NEXT: [[SUM_0:%.*]] = add i32 [[T2_0]], 7
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
184 ; CHECK-NEXT: br label [[EXIT:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
185 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
186 ; CHECK-NEXT: [[T1_1:%.*]] = trunc i64 [[ARG]] to i48
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
187 ; CHECK-NEXT: [[T2_1:%.*]] = trunc i48 [[T1_1]] to i32
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
188 ; CHECK-NEXT: [[SUM_1:%.*]] = add i32 [[T2_1]], 11
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
189 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
190 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
191 ; CHECK-NEXT: [[SUM_PHI:%.*]] = phi i32 [ [[SUM_0]], [[A]] ], [ [[SUM_1]], [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
192 ; CHECK-NEXT: ret i32 [[SUM_PHI]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
193 ;
150
anatofuz
parents:
diff changeset
194 entry:
anatofuz
parents:
diff changeset
195 br i1 %flag, label %a, label %b
anatofuz
parents:
diff changeset
196
anatofuz
parents:
diff changeset
197 a:
anatofuz
parents:
diff changeset
198 br label %exit
anatofuz
parents:
diff changeset
199
anatofuz
parents:
diff changeset
200 b:
anatofuz
parents:
diff changeset
201 br label %exit
anatofuz
parents:
diff changeset
202
anatofuz
parents:
diff changeset
203 exit:
anatofuz
parents:
diff changeset
204 %p = phi i32 [ 7, %a ], [ 11, %b ]
anatofuz
parents:
diff changeset
205 %t1 = trunc i64 %arg to i48
anatofuz
parents:
diff changeset
206 %t2 = trunc i48 %t1 to i32
anatofuz
parents:
diff changeset
207 %sum = add i32 %t2, %p
anatofuz
parents:
diff changeset
208 ret i32 %sum
anatofuz
parents:
diff changeset
209 }
anatofuz
parents:
diff changeset
210
anatofuz
parents:
diff changeset
211 define i32 @test_speculate_free_phis(i1 %flag, i32 %arg1, i32 %arg2) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
212 ; CHECK-LABEL: @test_speculate_free_phis(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
213 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
214 ; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[A:%.*]], label [[B:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
215 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
216 ; CHECK-NEXT: [[SUM_0:%.*]] = add i32 [[ARG1:%.*]], 7
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
217 ; CHECK-NEXT: br label [[EXIT:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
218 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
219 ; CHECK-NEXT: [[SUM_1:%.*]] = add i32 [[ARG2:%.*]], 11
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
220 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
221 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
222 ; CHECK-NEXT: [[SUM_PHI:%.*]] = phi i32 [ [[SUM_0]], [[A]] ], [ [[SUM_1]], [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
223 ; CHECK-NEXT: [[P2:%.*]] = phi i32 [ [[ARG1]], [[A]] ], [ [[ARG2]], [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
224 ; CHECK-NEXT: ret i32 [[SUM_PHI]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
225 ;
150
anatofuz
parents:
diff changeset
226 entry:
anatofuz
parents:
diff changeset
227 br i1 %flag, label %a, label %b
anatofuz
parents:
diff changeset
228
anatofuz
parents:
diff changeset
229 a:
anatofuz
parents:
diff changeset
230 br label %exit
anatofuz
parents:
diff changeset
231
anatofuz
parents:
diff changeset
232 b:
anatofuz
parents:
diff changeset
233 br label %exit
anatofuz
parents:
diff changeset
234
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
235 ; We don't DCE the now unused PHI node...
150
anatofuz
parents:
diff changeset
236 exit:
anatofuz
parents:
diff changeset
237 %p1 = phi i32 [ 7, %a ], [ 11, %b ]
anatofuz
parents:
diff changeset
238 %p2 = phi i32 [ %arg1, %a ], [ %arg2, %b ]
anatofuz
parents:
diff changeset
239 %sum = add i32 %p2, %p1
anatofuz
parents:
diff changeset
240 ret i32 %sum
anatofuz
parents:
diff changeset
241 }
anatofuz
parents:
diff changeset
242
anatofuz
parents:
diff changeset
243 ; We shouldn't speculate multiple uses even if each individually looks
anatofuz
parents:
diff changeset
244 ; profitable because of the total cost.
anatofuz
parents:
diff changeset
245 define i32 @test_no_spec_multi_uses(i1 %flag, i32 %arg1, i32 %arg2, i32 %arg3) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
246 ; CHECK-LABEL: @test_no_spec_multi_uses(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
247 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
248 ; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[A:%.*]], label [[B:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
249 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
250 ; CHECK-NEXT: br label [[EXIT:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
251 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
252 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
253 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
254 ; CHECK-NEXT: [[P:%.*]] = phi i32 [ 7, [[A]] ], [ 11, [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
255 ; CHECK-NEXT: [[ADD1:%.*]] = add i32 [[ARG1:%.*]], [[P]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
256 ; CHECK-NEXT: [[ADD2:%.*]] = add i32 [[ARG2:%.*]], [[P]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
257 ; CHECK-NEXT: [[ADD3:%.*]] = add i32 [[ARG3:%.*]], [[P]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
258 ; CHECK-NEXT: [[SUM1:%.*]] = add i32 [[ADD1]], [[ADD2]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
259 ; CHECK-NEXT: [[SUM2:%.*]] = add i32 [[SUM1]], [[ADD3]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
260 ; CHECK-NEXT: ret i32 [[SUM2]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
261 ;
150
anatofuz
parents:
diff changeset
262 entry:
anatofuz
parents:
diff changeset
263 br i1 %flag, label %a, label %b
anatofuz
parents:
diff changeset
264
anatofuz
parents:
diff changeset
265 a:
anatofuz
parents:
diff changeset
266 br label %exit
anatofuz
parents:
diff changeset
267
anatofuz
parents:
diff changeset
268 b:
anatofuz
parents:
diff changeset
269 br label %exit
anatofuz
parents:
diff changeset
270
anatofuz
parents:
diff changeset
271 exit:
anatofuz
parents:
diff changeset
272 %p = phi i32 [ 7, %a ], [ 11, %b ]
anatofuz
parents:
diff changeset
273 %add1 = add i32 %arg1, %p
anatofuz
parents:
diff changeset
274 %add2 = add i32 %arg2, %p
anatofuz
parents:
diff changeset
275 %add3 = add i32 %arg3, %p
anatofuz
parents:
diff changeset
276 %sum1 = add i32 %add1, %add2
anatofuz
parents:
diff changeset
277 %sum2 = add i32 %sum1, %add3
anatofuz
parents:
diff changeset
278 ret i32 %sum2
anatofuz
parents:
diff changeset
279 }
anatofuz
parents:
diff changeset
280
anatofuz
parents:
diff changeset
281 define i32 @test_multi_phis1(i1 %flag, i32 %arg) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
282 ; CHECK-LABEL: @test_multi_phis1(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
283 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
284 ; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[A:%.*]], label [[B:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
285 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
286 ; CHECK-NEXT: [[SUM1_0:%.*]] = add i32 [[ARG:%.*]], 1
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
287 ; CHECK-NEXT: [[SUM2_0:%.*]] = add i32 [[SUM1_0]], 3
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
288 ; CHECK-NEXT: [[SUM3_0:%.*]] = add i32 [[SUM2_0]], 5
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
289 ; CHECK-NEXT: br label [[EXIT:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
290 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
291 ; CHECK-NEXT: [[SUM1_1:%.*]] = add i32 [[ARG]], 2
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
292 ; CHECK-NEXT: [[SUM2_1:%.*]] = add i32 [[SUM1_1]], 4
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
293 ; CHECK-NEXT: [[SUM3_1:%.*]] = add i32 [[SUM2_1]], 6
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
294 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
295 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
296 ; CHECK-NEXT: [[SUM3_PHI:%.*]] = phi i32 [ [[SUM3_0]], [[A]] ], [ [[SUM3_1]], [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
297 ; CHECK-NEXT: ret i32 [[SUM3_PHI]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
298 ;
150
anatofuz
parents:
diff changeset
299 entry:
anatofuz
parents:
diff changeset
300 br i1 %flag, label %a, label %b
anatofuz
parents:
diff changeset
301
anatofuz
parents:
diff changeset
302 a:
anatofuz
parents:
diff changeset
303 br label %exit
anatofuz
parents:
diff changeset
304
anatofuz
parents:
diff changeset
305 b:
anatofuz
parents:
diff changeset
306 br label %exit
anatofuz
parents:
diff changeset
307
anatofuz
parents:
diff changeset
308 exit:
anatofuz
parents:
diff changeset
309 %p1 = phi i32 [ 1, %a ], [ 2, %b ]
anatofuz
parents:
diff changeset
310 %p2 = phi i32 [ 3, %a ], [ 4, %b ]
anatofuz
parents:
diff changeset
311 %p3 = phi i32 [ 5, %a ], [ 6, %b ]
anatofuz
parents:
diff changeset
312 %sum1 = add i32 %arg, %p1
anatofuz
parents:
diff changeset
313 %sum2 = add i32 %sum1, %p2
anatofuz
parents:
diff changeset
314 %sum3 = add i32 %sum2, %p3
anatofuz
parents:
diff changeset
315 ret i32 %sum3
anatofuz
parents:
diff changeset
316 }
anatofuz
parents:
diff changeset
317
anatofuz
parents:
diff changeset
318 ; Check that the order of the PHIs doesn't impact the behavior.
anatofuz
parents:
diff changeset
319 define i32 @test_multi_phis2(i1 %flag, i32 %arg) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
320 ; CHECK-LABEL: @test_multi_phis2(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
321 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
322 ; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[A:%.*]], label [[B:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
323 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
324 ; CHECK-NEXT: [[SUM1_0:%.*]] = add i32 [[ARG:%.*]], 1
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
325 ; CHECK-NEXT: [[SUM2_0:%.*]] = add i32 [[SUM1_0]], 3
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
326 ; CHECK-NEXT: [[SUM3_0:%.*]] = add i32 [[SUM2_0]], 5
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
327 ; CHECK-NEXT: br label [[EXIT:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
328 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
329 ; CHECK-NEXT: [[SUM1_1:%.*]] = add i32 [[ARG]], 2
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
330 ; CHECK-NEXT: [[SUM2_1:%.*]] = add i32 [[SUM1_1]], 4
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
331 ; CHECK-NEXT: [[SUM3_1:%.*]] = add i32 [[SUM2_1]], 6
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
332 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
333 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
334 ; CHECK-NEXT: [[SUM3_PHI:%.*]] = phi i32 [ [[SUM3_0]], [[A]] ], [ [[SUM3_1]], [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
335 ; CHECK-NEXT: ret i32 [[SUM3_PHI]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
336 ;
150
anatofuz
parents:
diff changeset
337 entry:
anatofuz
parents:
diff changeset
338 br i1 %flag, label %a, label %b
anatofuz
parents:
diff changeset
339
anatofuz
parents:
diff changeset
340 a:
anatofuz
parents:
diff changeset
341 br label %exit
anatofuz
parents:
diff changeset
342
anatofuz
parents:
diff changeset
343 b:
anatofuz
parents:
diff changeset
344 br label %exit
anatofuz
parents:
diff changeset
345
anatofuz
parents:
diff changeset
346 exit:
anatofuz
parents:
diff changeset
347 %p3 = phi i32 [ 5, %a ], [ 6, %b ]
anatofuz
parents:
diff changeset
348 %p2 = phi i32 [ 3, %a ], [ 4, %b ]
anatofuz
parents:
diff changeset
349 %p1 = phi i32 [ 1, %a ], [ 2, %b ]
anatofuz
parents:
diff changeset
350 %sum1 = add i32 %arg, %p1
anatofuz
parents:
diff changeset
351 %sum2 = add i32 %sum1, %p2
anatofuz
parents:
diff changeset
352 %sum3 = add i32 %sum2, %p3
anatofuz
parents:
diff changeset
353 ret i32 %sum3
anatofuz
parents:
diff changeset
354 }
anatofuz
parents:
diff changeset
355
anatofuz
parents:
diff changeset
356 define i32 @test_no_spec_indirectbr(i1 %flag, i32 %arg) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
357 ; CHECK-LABEL: @test_no_spec_indirectbr(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
358 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
359 ; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[A:%.*]], label [[B:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
360 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
361 ; CHECK-NEXT: indirectbr i8* undef, [label %exit]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
362 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
363 ; CHECK-NEXT: indirectbr i8* undef, [label %exit]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
364 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
365 ; CHECK-NEXT: [[P:%.*]] = phi i32 [ 7, [[A]] ], [ 11, [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
366 ; CHECK-NEXT: [[SUM:%.*]] = add i32 [[ARG:%.*]], [[P]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
367 ; CHECK-NEXT: ret i32 [[SUM]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
368 ;
150
anatofuz
parents:
diff changeset
369 entry:
anatofuz
parents:
diff changeset
370 br i1 %flag, label %a, label %b
anatofuz
parents:
diff changeset
371
anatofuz
parents:
diff changeset
372 a:
anatofuz
parents:
diff changeset
373 indirectbr i8* undef, [label %exit]
anatofuz
parents:
diff changeset
374
anatofuz
parents:
diff changeset
375 b:
anatofuz
parents:
diff changeset
376 indirectbr i8* undef, [label %exit]
anatofuz
parents:
diff changeset
377
anatofuz
parents:
diff changeset
378 exit:
anatofuz
parents:
diff changeset
379 %p = phi i32 [ 7, %a ], [ 11, %b ]
anatofuz
parents:
diff changeset
380 %sum = add i32 %arg, %p
anatofuz
parents:
diff changeset
381 ret i32 %sum
anatofuz
parents:
diff changeset
382 }
anatofuz
parents:
diff changeset
383
anatofuz
parents:
diff changeset
384 declare void @g()
anatofuz
parents:
diff changeset
385
anatofuz
parents:
diff changeset
386 declare i32 @__gxx_personality_v0(...)
anatofuz
parents:
diff changeset
387
anatofuz
parents:
diff changeset
388 ; FIXME: We should be able to handle this case -- only the exceptional edge is
anatofuz
parents:
diff changeset
389 ; impossible to split.
anatofuz
parents:
diff changeset
390 define i32 @test_no_spec_invoke_continue(i1 %flag, i32 %arg) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
391 ; CHECK-LABEL: @test_no_spec_invoke_continue(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
392 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
393 ; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[A:%.*]], label [[B:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
394 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
395 ; CHECK-NEXT: invoke void @g()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
396 ; CHECK-NEXT: to label [[EXIT:%.*]] unwind label [[LPAD:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
397 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
398 ; CHECK-NEXT: invoke void @g()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
399 ; CHECK-NEXT: to label [[EXIT]] unwind label [[LPAD]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
400 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
401 ; CHECK-NEXT: [[P:%.*]] = phi i32 [ 7, [[A]] ], [ 11, [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
402 ; CHECK-NEXT: [[SUM:%.*]] = add i32 [[ARG:%.*]], [[P]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
403 ; CHECK-NEXT: ret i32 [[SUM]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
404 ; CHECK: lpad:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
405 ; CHECK-NEXT: [[LP:%.*]] = landingpad { i8*, i32 }
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
406 ; CHECK-NEXT: cleanup
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
407 ; CHECK-NEXT: resume { i8*, i32 } undef
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
408 ;
150
anatofuz
parents:
diff changeset
409 entry:
anatofuz
parents:
diff changeset
410 br i1 %flag, label %a, label %b
anatofuz
parents:
diff changeset
411
anatofuz
parents:
diff changeset
412 a:
anatofuz
parents:
diff changeset
413 invoke void @g()
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
414 to label %exit unwind label %lpad
150
anatofuz
parents:
diff changeset
415
anatofuz
parents:
diff changeset
416 b:
anatofuz
parents:
diff changeset
417 invoke void @g()
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
418 to label %exit unwind label %lpad
150
anatofuz
parents:
diff changeset
419
anatofuz
parents:
diff changeset
420 exit:
anatofuz
parents:
diff changeset
421 %p = phi i32 [ 7, %a ], [ 11, %b ]
anatofuz
parents:
diff changeset
422 %sum = add i32 %arg, %p
anatofuz
parents:
diff changeset
423 ret i32 %sum
anatofuz
parents:
diff changeset
424
anatofuz
parents:
diff changeset
425 lpad:
anatofuz
parents:
diff changeset
426 %lp = landingpad { i8*, i32 }
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
427 cleanup
150
anatofuz
parents:
diff changeset
428 resume { i8*, i32 } undef
anatofuz
parents:
diff changeset
429 }
anatofuz
parents:
diff changeset
430
anatofuz
parents:
diff changeset
431 define i32 @test_no_spec_landingpad(i32 %arg, i32* %ptr) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
432 ; CHECK-LABEL: @test_no_spec_landingpad(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
433 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
434 ; CHECK-NEXT: invoke void @g()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
435 ; CHECK-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
436 ; CHECK: invoke.cont:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
437 ; CHECK-NEXT: invoke void @g()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
438 ; CHECK-NEXT: to label [[EXIT:%.*]] unwind label [[LPAD]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
439 ; CHECK: lpad:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
440 ; CHECK-NEXT: [[P:%.*]] = phi i32 [ 7, [[ENTRY:%.*]] ], [ 11, [[INVOKE_CONT]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
441 ; CHECK-NEXT: [[LP:%.*]] = landingpad { i8*, i32 }
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
442 ; CHECK-NEXT: cleanup
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
443 ; CHECK-NEXT: [[SUM:%.*]] = add i32 [[ARG:%.*]], [[P]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
444 ; CHECK-NEXT: store i32 [[SUM]], i32* [[PTR:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
445 ; CHECK-NEXT: resume { i8*, i32 } undef
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
446 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
447 ; CHECK-NEXT: ret i32 0
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
448 ;
150
anatofuz
parents:
diff changeset
449 entry:
anatofuz
parents:
diff changeset
450 invoke void @g()
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
451 to label %invoke.cont unwind label %lpad
150
anatofuz
parents:
diff changeset
452
anatofuz
parents:
diff changeset
453 invoke.cont:
anatofuz
parents:
diff changeset
454 invoke void @g()
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
455 to label %exit unwind label %lpad
150
anatofuz
parents:
diff changeset
456
anatofuz
parents:
diff changeset
457 lpad:
anatofuz
parents:
diff changeset
458 %p = phi i32 [ 7, %entry ], [ 11, %invoke.cont ]
anatofuz
parents:
diff changeset
459 %lp = landingpad { i8*, i32 }
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
460 cleanup
150
anatofuz
parents:
diff changeset
461 %sum = add i32 %arg, %p
anatofuz
parents:
diff changeset
462 store i32 %sum, i32* %ptr
anatofuz
parents:
diff changeset
463 resume { i8*, i32 } undef
anatofuz
parents:
diff changeset
464
anatofuz
parents:
diff changeset
465 exit:
anatofuz
parents:
diff changeset
466 ret i32 0
anatofuz
parents:
diff changeset
467 }
anatofuz
parents:
diff changeset
468
anatofuz
parents:
diff changeset
469 declare i32 @__CxxFrameHandler3(...)
anatofuz
parents:
diff changeset
470
anatofuz
parents:
diff changeset
471 define i32 @test_no_spec_cleanuppad(i32 %arg, i32* %ptr) personality i32 (...)* @__CxxFrameHandler3 {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
472 ; CHECK-LABEL: @test_no_spec_cleanuppad(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
473 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
474 ; CHECK-NEXT: invoke void @g()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
475 ; CHECK-NEXT: to label [[INVOKE_CONT:%.*]] unwind label [[LPAD:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
476 ; CHECK: invoke.cont:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
477 ; CHECK-NEXT: invoke void @g()
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
478 ; CHECK-NEXT: to label [[EXIT:%.*]] unwind label [[LPAD]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
479 ; CHECK: lpad:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
480 ; CHECK-NEXT: [[P:%.*]] = phi i32 [ 7, [[ENTRY:%.*]] ], [ 11, [[INVOKE_CONT]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
481 ; CHECK-NEXT: [[CP:%.*]] = cleanuppad within none []
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
482 ; CHECK-NEXT: [[SUM:%.*]] = add i32 [[ARG:%.*]], [[P]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
483 ; CHECK-NEXT: store i32 [[SUM]], i32* [[PTR:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
484 ; CHECK-NEXT: cleanupret from [[CP]] unwind to caller
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
485 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
486 ; CHECK-NEXT: ret i32 0
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
487 ;
150
anatofuz
parents:
diff changeset
488 entry:
anatofuz
parents:
diff changeset
489 invoke void @g()
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
490 to label %invoke.cont unwind label %lpad
150
anatofuz
parents:
diff changeset
491
anatofuz
parents:
diff changeset
492 invoke.cont:
anatofuz
parents:
diff changeset
493 invoke void @g()
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
494 to label %exit unwind label %lpad
150
anatofuz
parents:
diff changeset
495
anatofuz
parents:
diff changeset
496 lpad:
anatofuz
parents:
diff changeset
497 %p = phi i32 [ 7, %entry ], [ 11, %invoke.cont ]
anatofuz
parents:
diff changeset
498 %cp = cleanuppad within none []
anatofuz
parents:
diff changeset
499 %sum = add i32 %arg, %p
anatofuz
parents:
diff changeset
500 store i32 %sum, i32* %ptr
anatofuz
parents:
diff changeset
501 cleanupret from %cp unwind to caller
anatofuz
parents:
diff changeset
502
anatofuz
parents:
diff changeset
503 exit:
anatofuz
parents:
diff changeset
504 ret i32 0
anatofuz
parents:
diff changeset
505 }
anatofuz
parents:
diff changeset
506
anatofuz
parents:
diff changeset
507 ; Check that we don't fall over when confronted with seemingly reasonable code
anatofuz
parents:
diff changeset
508 ; for us to handle but in an unreachable region and with non-PHI use-def
anatofuz
parents:
diff changeset
509 ; cycles.
anatofuz
parents:
diff changeset
510 define i32 @test_unreachable_non_phi_cycles(i1 %flag, i32 %arg) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
511 ; CHECK-LABEL: @test_unreachable_non_phi_cycles(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
512 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
513 ; CHECK-NEXT: ret i32 42
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
514 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
515 ; CHECK-NEXT: br label [[EXIT:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
516 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
517 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
518 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
519 ; CHECK-NEXT: [[P:%.*]] = phi i32 [ 7, [[A:%.*]] ], [ 11, [[B:%.*]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
520 ; CHECK-NEXT: [[ZEXT:%.*]] = zext i32 [[SUM:%.*]] to i64
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
521 ; CHECK-NEXT: [[TRUNC:%.*]] = trunc i64 [[ZEXT]] to i32
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
522 ; CHECK-NEXT: [[SUM]] = add i32 [[TRUNC]], [[P]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
523 ; CHECK-NEXT: br i1 [[FLAG:%.*]], label [[A]], label [[B]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
524 ;
150
anatofuz
parents:
diff changeset
525 entry:
anatofuz
parents:
diff changeset
526 ret i32 42
anatofuz
parents:
diff changeset
527
anatofuz
parents:
diff changeset
528 a:
anatofuz
parents:
diff changeset
529 br label %exit
anatofuz
parents:
diff changeset
530
anatofuz
parents:
diff changeset
531 b:
anatofuz
parents:
diff changeset
532 br label %exit
anatofuz
parents:
diff changeset
533
anatofuz
parents:
diff changeset
534 exit:
anatofuz
parents:
diff changeset
535 %p = phi i32 [ 7, %a ], [ 11, %b ]
anatofuz
parents:
diff changeset
536 %zext = zext i32 %sum to i64
anatofuz
parents:
diff changeset
537 %trunc = trunc i64 %zext to i32
anatofuz
parents:
diff changeset
538 %sum = add i32 %trunc, %p
anatofuz
parents:
diff changeset
539 br i1 %flag, label %a, label %b
anatofuz
parents:
diff changeset
540 }
anatofuz
parents:
diff changeset
541
anatofuz
parents:
diff changeset
542 ; Check that we don't speculate in the face of an expensive immediate. There
anatofuz
parents:
diff changeset
543 ; are two reasons this should never speculate. First, even a local analysis
anatofuz
parents:
diff changeset
544 ; should fail because it makes some paths (%a) potentially more expensive due
anatofuz
parents:
diff changeset
545 ; to multiple uses of the immediate. Additionally, when we go to speculate the
anatofuz
parents:
diff changeset
546 ; instructions, their cost will also be too high.
anatofuz
parents:
diff changeset
547 ; FIXME: The goal is really to test the first property, but there doesn't
anatofuz
parents:
diff changeset
548 ; happen to be any way to use free-to-speculate instructions here so that it
anatofuz
parents:
diff changeset
549 ; would be the only interesting property.
anatofuz
parents:
diff changeset
550 define i64 @test_expensive_imm(i32 %flag, i64 %arg) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
551 ; CHECK-LABEL: @test_expensive_imm(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
552 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
553 ; CHECK-NEXT: switch i32 [[FLAG:%.*]], label [[A:%.*]] [
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
554 ; CHECK-NEXT: i32 1, label [[B:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
555 ; CHECK-NEXT: i32 2, label [[C:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
556 ; CHECK-NEXT: i32 3, label [[D:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
557 ; CHECK-NEXT: ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
558 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
559 ; CHECK-NEXT: br label [[EXIT:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
560 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
561 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
562 ; CHECK: c:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
563 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
564 ; CHECK: d:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
565 ; CHECK-NEXT: br label [[EXIT]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
566 ; CHECK: exit:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
567 ; CHECK-NEXT: [[P:%.*]] = phi i64 [ 4294967296, [[A]] ], [ 1, [[B]] ], [ 1, [[C]] ], [ 1, [[D]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
568 ; CHECK-NEXT: [[SUM1:%.*]] = add i64 [[ARG:%.*]], [[P]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
569 ; CHECK-NEXT: [[SUM2:%.*]] = add i64 [[SUM1]], [[P]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
570 ; CHECK-NEXT: ret i64 [[SUM2]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
571 ;
150
anatofuz
parents:
diff changeset
572 entry:
anatofuz
parents:
diff changeset
573 switch i32 %flag, label %a [
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
574 i32 1, label %b
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
575 i32 2, label %c
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
576 i32 3, label %d
150
anatofuz
parents:
diff changeset
577 ]
anatofuz
parents:
diff changeset
578
anatofuz
parents:
diff changeset
579 a:
anatofuz
parents:
diff changeset
580 br label %exit
anatofuz
parents:
diff changeset
581
anatofuz
parents:
diff changeset
582 b:
anatofuz
parents:
diff changeset
583 br label %exit
anatofuz
parents:
diff changeset
584
anatofuz
parents:
diff changeset
585 c:
anatofuz
parents:
diff changeset
586 br label %exit
anatofuz
parents:
diff changeset
587
anatofuz
parents:
diff changeset
588 d:
anatofuz
parents:
diff changeset
589 br label %exit
anatofuz
parents:
diff changeset
590
anatofuz
parents:
diff changeset
591 exit:
anatofuz
parents:
diff changeset
592 %p = phi i64 [ 4294967296, %a ], [ 1, %b ], [ 1, %c ], [ 1, %d ]
anatofuz
parents:
diff changeset
593 %sum1 = add i64 %arg, %p
anatofuz
parents:
diff changeset
594 %sum2 = add i64 %sum1, %p
anatofuz
parents:
diff changeset
595 ret i64 %sum2
anatofuz
parents:
diff changeset
596 }
anatofuz
parents:
diff changeset
597
anatofuz
parents:
diff changeset
598 define i32 @test_no_spec_non_postdominating_uses(i1 %flag1, i1 %flag2, i32 %arg) {
173
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
599 ; CHECK-LABEL: @test_no_spec_non_postdominating_uses(
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
600 ; CHECK-NEXT: entry:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
601 ; CHECK-NEXT: br i1 [[FLAG1:%.*]], label [[A:%.*]], label [[B:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
602 ; CHECK: a:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
603 ; CHECK-NEXT: [[SUM1_0:%.*]] = add i32 [[ARG:%.*]], 7
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
604 ; CHECK-NEXT: br label [[MERGE:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
605 ; CHECK: b:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
606 ; CHECK-NEXT: [[SUM1_1:%.*]] = add i32 [[ARG]], 11
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
607 ; CHECK-NEXT: br label [[MERGE]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
608 ; CHECK: merge:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
609 ; CHECK-NEXT: [[SUM1_PHI:%.*]] = phi i32 [ [[SUM1_0]], [[A]] ], [ [[SUM1_1]], [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
610 ; CHECK-NEXT: [[P2:%.*]] = phi i32 [ 13, [[A]] ], [ 42, [[B]] ]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
611 ; CHECK-NEXT: br i1 [[FLAG2:%.*]], label [[EXIT1:%.*]], label [[EXIT2:%.*]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
612 ; CHECK: exit1:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
613 ; CHECK-NEXT: ret i32 [[SUM1_PHI]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
614 ; CHECK: exit2:
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
615 ; CHECK-NEXT: [[SUM2:%.*]] = add i32 [[ARG]], [[P2]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
616 ; CHECK-NEXT: ret i32 [[SUM2]]
0572611fdcc8 reorgnization done
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 150
diff changeset
617 ;
150
anatofuz
parents:
diff changeset
618 entry:
anatofuz
parents:
diff changeset
619 br i1 %flag1, label %a, label %b
anatofuz
parents:
diff changeset
620
anatofuz
parents:
diff changeset
621 a:
anatofuz
parents:
diff changeset
622 br label %merge
anatofuz
parents:
diff changeset
623
anatofuz
parents:
diff changeset
624 b:
anatofuz
parents:
diff changeset
625 br label %merge
anatofuz
parents:
diff changeset
626
anatofuz
parents:
diff changeset
627 merge:
anatofuz
parents:
diff changeset
628 %p1 = phi i32 [ 7, %a ], [ 11, %b ]
anatofuz
parents:
diff changeset
629 %p2 = phi i32 [ 13, %a ], [ 42, %b ]
anatofuz
parents:
diff changeset
630 %sum1 = add i32 %arg, %p1
anatofuz
parents:
diff changeset
631 br i1 %flag2, label %exit1, label %exit2
anatofuz
parents:
diff changeset
632
anatofuz
parents:
diff changeset
633 exit1:
anatofuz
parents:
diff changeset
634 ret i32 %sum1
anatofuz
parents:
diff changeset
635
anatofuz
parents:
diff changeset
636 exit2:
anatofuz
parents:
diff changeset
637 %sum2 = add i32 %arg, %p2
anatofuz
parents:
diff changeset
638 ret i32 %sum2
anatofuz
parents:
diff changeset
639 }