1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -mtriple=thumbv8m.main < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -two-entry-phi-node-folding-threshold=4 | FileCheck %s --check-prefixes=CHECK-TWO-FOLD-4,CHECK-V8M-TWO-FOLD-4
3 ; RUN: opt -mtriple=armv8a < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -two-entry-phi-node-folding-threshold=4 | FileCheck %s --check-prefixes=CHECK-TWO-FOLD-4,CHECK-V8A-TWO-FOLD-4
4 ; RUN: opt -mtriple=thumbv8m.main < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -two-entry-phi-node-folding-threshold=5 | FileCheck %s --check-prefixes=CHECK-TWO-FOLD-5,CHECK-V8M-TWO-FOLD-5
5 ; RUN: opt -mtriple=armv8a < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -two-entry-phi-node-folding-threshold=5 | FileCheck %s --check-prefixes=CHECK-TWO-FOLD-5,CHECK-V8A-TWO-FOLD-5
6 ; RUN: opt -mtriple=thumbv8m.main < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -two-entry-phi-node-folding-threshold=6 | FileCheck %s --check-prefixes=CHECK-TWO-FOLD-6,CHECK-V8M-TWO-FOLD-6
7 ; RUN: opt -mtriple=armv8a < %s -passes=simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S -two-entry-phi-node-folding-threshold=6 | FileCheck %s --check-prefixes=CHECK-TWO-FOLD-6,CHECK-V8A-TWO-FOLD-6
9 define i32 @test_i32(i1 %a, i1 %b, i32 %i, i32 %j, i32 %k) {
10 ; CHECK-TWO-FOLD-4-LABEL: @test_i32(
11 ; CHECK-TWO-FOLD-4-NEXT: entry:
12 ; CHECK-TWO-FOLD-4-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
13 ; CHECK-TWO-FOLD-4: O:
14 ; CHECK-TWO-FOLD-4-NEXT: [[IAJ:%.*]] = add i32 [[I:%.*]], [[J:%.*]]
15 ; CHECK-TWO-FOLD-4-NEXT: [[IAJAK:%.*]] = add i32 [[IAJ]], [[K:%.*]]
16 ; CHECK-TWO-FOLD-4-NEXT: [[IXJ:%.*]] = xor i32 [[I]], [[J]]
17 ; CHECK-TWO-FOLD-4-NEXT: [[IXJXK:%.*]] = xor i32 [[IXJ]], [[K]]
18 ; CHECK-TWO-FOLD-4-NEXT: [[WP:%.*]] = select i1 [[B:%.*]], i32 [[IAJAK]], i32 [[IXJXK]]
19 ; CHECK-TWO-FOLD-4-NEXT: [[WP2:%.*]] = add i32 [[WP]], [[WP]]
20 ; CHECK-TWO-FOLD-4-NEXT: br label [[M]]
21 ; CHECK-TWO-FOLD-4: M:
22 ; CHECK-TWO-FOLD-4-NEXT: [[W:%.*]] = phi i32 [ [[WP2]], [[O]] ], [ 2, [[ENTRY:%.*]] ]
23 ; CHECK-TWO-FOLD-4-NEXT: [[R:%.*]] = add i32 [[W]], 1
24 ; CHECK-TWO-FOLD-4-NEXT: ret i32 [[R]]
26 ; CHECK-TWO-FOLD-5-LABEL: @test_i32(
27 ; CHECK-TWO-FOLD-5-NEXT: entry:
28 ; CHECK-TWO-FOLD-5-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
29 ; CHECK-TWO-FOLD-5: O:
30 ; CHECK-TWO-FOLD-5-NEXT: [[IAJ:%.*]] = add i32 [[I:%.*]], [[J:%.*]]
31 ; CHECK-TWO-FOLD-5-NEXT: [[IAJAK:%.*]] = add i32 [[IAJ]], [[K:%.*]]
32 ; CHECK-TWO-FOLD-5-NEXT: [[IXJ:%.*]] = xor i32 [[I]], [[J]]
33 ; CHECK-TWO-FOLD-5-NEXT: [[IXJXK:%.*]] = xor i32 [[IXJ]], [[K]]
34 ; CHECK-TWO-FOLD-5-NEXT: [[WP:%.*]] = select i1 [[B:%.*]], i32 [[IAJAK]], i32 [[IXJXK]]
35 ; CHECK-TWO-FOLD-5-NEXT: [[WP2:%.*]] = add i32 [[WP]], [[WP]]
36 ; CHECK-TWO-FOLD-5-NEXT: br label [[M]]
37 ; CHECK-TWO-FOLD-5: M:
38 ; CHECK-TWO-FOLD-5-NEXT: [[W:%.*]] = phi i32 [ [[WP2]], [[O]] ], [ 2, [[ENTRY:%.*]] ]
39 ; CHECK-TWO-FOLD-5-NEXT: [[R:%.*]] = add i32 [[W]], 1
40 ; CHECK-TWO-FOLD-5-NEXT: ret i32 [[R]]
42 ; CHECK-TWO-FOLD-6-LABEL: @test_i32(
43 ; CHECK-TWO-FOLD-6-NEXT: entry:
44 ; CHECK-TWO-FOLD-6-NEXT: [[IAJ:%.*]] = add i32 [[I:%.*]], [[J:%.*]]
45 ; CHECK-TWO-FOLD-6-NEXT: [[IAJAK:%.*]] = add i32 [[IAJ]], [[K:%.*]]
46 ; CHECK-TWO-FOLD-6-NEXT: [[IXJ:%.*]] = xor i32 [[I]], [[J]]
47 ; CHECK-TWO-FOLD-6-NEXT: [[IXJXK:%.*]] = xor i32 [[IXJ]], [[K]]
48 ; CHECK-TWO-FOLD-6-NEXT: [[WP:%.*]] = select i1 [[B:%.*]], i32 [[IAJAK]], i32 [[IXJXK]]
49 ; CHECK-TWO-FOLD-6-NEXT: [[WP2:%.*]] = add i32 [[WP]], [[WP]]
50 ; CHECK-TWO-FOLD-6-NEXT: [[W:%.*]] = select i1 [[A:%.*]], i32 2, i32 [[WP2]]
51 ; CHECK-TWO-FOLD-6-NEXT: [[R:%.*]] = add i32 [[W]], 1
52 ; CHECK-TWO-FOLD-6-NEXT: ret i32 [[R]]
55 br i1 %a, label %M, label %O
57 br i1 %b, label %P, label %Q
60 %iajak = add i32 %iaj, %k
64 %ixjxk = xor i32 %ixj, %k
67 %Wp = phi i32 [ %iajak, %P ], [ %ixjxk, %Q ]
68 %Wp2 = add i32 %Wp, %Wp
71 %W = phi i32 [ %Wp2, %N ], [ 2, %entry ]
76 define i32 @test_i32_minsize(i1 %a, i1 %b, i32 %i, i32 %j, i32 %k) #0 {
77 ; CHECK-TWO-FOLD-4-LABEL: @test_i32_minsize(
78 ; CHECK-TWO-FOLD-4-NEXT: entry:
79 ; CHECK-TWO-FOLD-4-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
80 ; CHECK-TWO-FOLD-4: O:
81 ; CHECK-TWO-FOLD-4-NEXT: [[IAJ:%.*]] = add i32 [[I:%.*]], [[J:%.*]]
82 ; CHECK-TWO-FOLD-4-NEXT: [[IAJAK:%.*]] = add i32 [[IAJ]], [[K:%.*]]
83 ; CHECK-TWO-FOLD-4-NEXT: [[IXJ:%.*]] = xor i32 [[I]], [[J]]
84 ; CHECK-TWO-FOLD-4-NEXT: [[IXJXK:%.*]] = xor i32 [[IXJ]], [[K]]
85 ; CHECK-TWO-FOLD-4-NEXT: [[WP:%.*]] = select i1 [[B:%.*]], i32 [[IAJAK]], i32 [[IXJXK]]
86 ; CHECK-TWO-FOLD-4-NEXT: [[WP2:%.*]] = add i32 [[WP]], [[WP]]
87 ; CHECK-TWO-FOLD-4-NEXT: br label [[M]]
88 ; CHECK-TWO-FOLD-4: M:
89 ; CHECK-TWO-FOLD-4-NEXT: [[W:%.*]] = phi i32 [ [[WP2]], [[O]] ], [ 2, [[ENTRY:%.*]] ]
90 ; CHECK-TWO-FOLD-4-NEXT: [[R:%.*]] = add i32 [[W]], 1
91 ; CHECK-TWO-FOLD-4-NEXT: ret i32 [[R]]
93 ; CHECK-TWO-FOLD-5-LABEL: @test_i32_minsize(
94 ; CHECK-TWO-FOLD-5-NEXT: entry:
95 ; CHECK-TWO-FOLD-5-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
96 ; CHECK-TWO-FOLD-5: O:
97 ; CHECK-TWO-FOLD-5-NEXT: [[IAJ:%.*]] = add i32 [[I:%.*]], [[J:%.*]]
98 ; CHECK-TWO-FOLD-5-NEXT: [[IAJAK:%.*]] = add i32 [[IAJ]], [[K:%.*]]
99 ; CHECK-TWO-FOLD-5-NEXT: [[IXJ:%.*]] = xor i32 [[I]], [[J]]
100 ; CHECK-TWO-FOLD-5-NEXT: [[IXJXK:%.*]] = xor i32 [[IXJ]], [[K]]
101 ; CHECK-TWO-FOLD-5-NEXT: [[WP:%.*]] = select i1 [[B:%.*]], i32 [[IAJAK]], i32 [[IXJXK]]
102 ; CHECK-TWO-FOLD-5-NEXT: [[WP2:%.*]] = add i32 [[WP]], [[WP]]
103 ; CHECK-TWO-FOLD-5-NEXT: br label [[M]]
104 ; CHECK-TWO-FOLD-5: M:
105 ; CHECK-TWO-FOLD-5-NEXT: [[W:%.*]] = phi i32 [ [[WP2]], [[O]] ], [ 2, [[ENTRY:%.*]] ]
106 ; CHECK-TWO-FOLD-5-NEXT: [[R:%.*]] = add i32 [[W]], 1
107 ; CHECK-TWO-FOLD-5-NEXT: ret i32 [[R]]
109 ; CHECK-TWO-FOLD-6-LABEL: @test_i32_minsize(
110 ; CHECK-TWO-FOLD-6-NEXT: entry:
111 ; CHECK-TWO-FOLD-6-NEXT: [[IAJ:%.*]] = add i32 [[I:%.*]], [[J:%.*]]
112 ; CHECK-TWO-FOLD-6-NEXT: [[IAJAK:%.*]] = add i32 [[IAJ]], [[K:%.*]]
113 ; CHECK-TWO-FOLD-6-NEXT: [[IXJ:%.*]] = xor i32 [[I]], [[J]]
114 ; CHECK-TWO-FOLD-6-NEXT: [[IXJXK:%.*]] = xor i32 [[IXJ]], [[K]]
115 ; CHECK-TWO-FOLD-6-NEXT: [[WP:%.*]] = select i1 [[B:%.*]], i32 [[IAJAK]], i32 [[IXJXK]]
116 ; CHECK-TWO-FOLD-6-NEXT: [[WP2:%.*]] = add i32 [[WP]], [[WP]]
117 ; CHECK-TWO-FOLD-6-NEXT: [[W:%.*]] = select i1 [[A:%.*]], i32 2, i32 [[WP2]]
118 ; CHECK-TWO-FOLD-6-NEXT: [[R:%.*]] = add i32 [[W]], 1
119 ; CHECK-TWO-FOLD-6-NEXT: ret i32 [[R]]
122 br i1 %a, label %M, label %O
124 br i1 %b, label %P, label %Q
126 %iaj = add i32 %i, %j
127 %iajak = add i32 %iaj, %k
130 %ixj = xor i32 %i, %j
131 %ixjxk = xor i32 %ixj, %k
134 %Wp = phi i32 [ %iajak, %P ], [ %ixjxk, %Q ]
135 %Wp2 = add i32 %Wp, %Wp
138 %W = phi i32 [ %Wp2, %N ], [ 2, %entry ]
143 define i64 @test_i64(i1 %a, i1 %b, i64 %i, i64 %j, i64 %k) {
144 ; CHECK-V8M-TWO-FOLD-4-LABEL: @test_i64(
145 ; CHECK-V8M-TWO-FOLD-4-NEXT: entry:
146 ; CHECK-V8M-TWO-FOLD-4-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
147 ; CHECK-V8M-TWO-FOLD-4: O:
148 ; CHECK-V8M-TWO-FOLD-4-NEXT: br i1 [[B:%.*]], label [[P:%.*]], label [[Q:%.*]]
149 ; CHECK-V8M-TWO-FOLD-4: P:
150 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[IAJ:%.*]] = add i64 [[I:%.*]], [[J:%.*]]
151 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[IAJAK:%.*]] = add i64 [[IAJ]], [[K:%.*]]
152 ; CHECK-V8M-TWO-FOLD-4-NEXT: br label [[N:%.*]]
153 ; CHECK-V8M-TWO-FOLD-4: Q:
154 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[IXJ:%.*]] = xor i64 [[I]], [[J]]
155 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[IXJXK:%.*]] = xor i64 [[IXJ]], [[K]]
156 ; CHECK-V8M-TWO-FOLD-4-NEXT: br label [[N]]
157 ; CHECK-V8M-TWO-FOLD-4: N:
158 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[WP:%.*]] = phi i64 [ [[IAJAK]], [[P]] ], [ [[IXJXK]], [[Q]] ]
159 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[WP2:%.*]] = add i64 [[WP]], [[WP]]
160 ; CHECK-V8M-TWO-FOLD-4-NEXT: br label [[M]]
161 ; CHECK-V8M-TWO-FOLD-4: M:
162 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[W:%.*]] = phi i64 [ [[WP2]], [[N]] ], [ 2, [[ENTRY:%.*]] ]
163 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[R:%.*]] = add i64 [[W]], 1
164 ; CHECK-V8M-TWO-FOLD-4-NEXT: ret i64 [[R]]
166 ; CHECK-V8A-TWO-FOLD-4-LABEL: @test_i64(
167 ; CHECK-V8A-TWO-FOLD-4-NEXT: entry:
168 ; CHECK-V8A-TWO-FOLD-4-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
169 ; CHECK-V8A-TWO-FOLD-4: O:
170 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[IAJ:%.*]] = add i64 [[I:%.*]], [[J:%.*]]
171 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[IAJAK:%.*]] = add i64 [[IAJ]], [[K:%.*]]
172 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[IXJ:%.*]] = xor i64 [[I]], [[J]]
173 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[IXJXK:%.*]] = xor i64 [[IXJ]], [[K]]
174 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[WP:%.*]] = select i1 [[B:%.*]], i64 [[IAJAK]], i64 [[IXJXK]]
175 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[WP2:%.*]] = add i64 [[WP]], [[WP]]
176 ; CHECK-V8A-TWO-FOLD-4-NEXT: br label [[M]]
177 ; CHECK-V8A-TWO-FOLD-4: M:
178 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[W:%.*]] = phi i64 [ [[WP2]], [[O]] ], [ 2, [[ENTRY:%.*]] ]
179 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[R:%.*]] = add i64 [[W]], 1
180 ; CHECK-V8A-TWO-FOLD-4-NEXT: ret i64 [[R]]
182 ; CHECK-V8M-TWO-FOLD-5-LABEL: @test_i64(
183 ; CHECK-V8M-TWO-FOLD-5-NEXT: entry:
184 ; CHECK-V8M-TWO-FOLD-5-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
185 ; CHECK-V8M-TWO-FOLD-5: O:
186 ; CHECK-V8M-TWO-FOLD-5-NEXT: br i1 [[B:%.*]], label [[P:%.*]], label [[Q:%.*]]
187 ; CHECK-V8M-TWO-FOLD-5: P:
188 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[IAJ:%.*]] = add i64 [[I:%.*]], [[J:%.*]]
189 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[IAJAK:%.*]] = add i64 [[IAJ]], [[K:%.*]]
190 ; CHECK-V8M-TWO-FOLD-5-NEXT: br label [[N:%.*]]
191 ; CHECK-V8M-TWO-FOLD-5: Q:
192 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[IXJ:%.*]] = xor i64 [[I]], [[J]]
193 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[IXJXK:%.*]] = xor i64 [[IXJ]], [[K]]
194 ; CHECK-V8M-TWO-FOLD-5-NEXT: br label [[N]]
195 ; CHECK-V8M-TWO-FOLD-5: N:
196 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[WP:%.*]] = phi i64 [ [[IAJAK]], [[P]] ], [ [[IXJXK]], [[Q]] ]
197 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[WP2:%.*]] = add i64 [[WP]], [[WP]]
198 ; CHECK-V8M-TWO-FOLD-5-NEXT: br label [[M]]
199 ; CHECK-V8M-TWO-FOLD-5: M:
200 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[W:%.*]] = phi i64 [ [[WP2]], [[N]] ], [ 2, [[ENTRY:%.*]] ]
201 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[R:%.*]] = add i64 [[W]], 1
202 ; CHECK-V8M-TWO-FOLD-5-NEXT: ret i64 [[R]]
204 ; CHECK-V8A-TWO-FOLD-5-LABEL: @test_i64(
205 ; CHECK-V8A-TWO-FOLD-5-NEXT: entry:
206 ; CHECK-V8A-TWO-FOLD-5-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
207 ; CHECK-V8A-TWO-FOLD-5: O:
208 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[IAJ:%.*]] = add i64 [[I:%.*]], [[J:%.*]]
209 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[IAJAK:%.*]] = add i64 [[IAJ]], [[K:%.*]]
210 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[IXJ:%.*]] = xor i64 [[I]], [[J]]
211 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[IXJXK:%.*]] = xor i64 [[IXJ]], [[K]]
212 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[WP:%.*]] = select i1 [[B:%.*]], i64 [[IAJAK]], i64 [[IXJXK]]
213 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[WP2:%.*]] = add i64 [[WP]], [[WP]]
214 ; CHECK-V8A-TWO-FOLD-5-NEXT: br label [[M]]
215 ; CHECK-V8A-TWO-FOLD-5: M:
216 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[W:%.*]] = phi i64 [ [[WP2]], [[O]] ], [ 2, [[ENTRY:%.*]] ]
217 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[R:%.*]] = add i64 [[W]], 1
218 ; CHECK-V8A-TWO-FOLD-5-NEXT: ret i64 [[R]]
220 ; CHECK-V8M-TWO-FOLD-6-LABEL: @test_i64(
221 ; CHECK-V8M-TWO-FOLD-6-NEXT: entry:
222 ; CHECK-V8M-TWO-FOLD-6-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
223 ; CHECK-V8M-TWO-FOLD-6: O:
224 ; CHECK-V8M-TWO-FOLD-6-NEXT: br i1 [[B:%.*]], label [[P:%.*]], label [[Q:%.*]]
225 ; CHECK-V8M-TWO-FOLD-6: P:
226 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[IAJ:%.*]] = add i64 [[I:%.*]], [[J:%.*]]
227 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[IAJAK:%.*]] = add i64 [[IAJ]], [[K:%.*]]
228 ; CHECK-V8M-TWO-FOLD-6-NEXT: br label [[N:%.*]]
229 ; CHECK-V8M-TWO-FOLD-6: Q:
230 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[IXJ:%.*]] = xor i64 [[I]], [[J]]
231 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[IXJXK:%.*]] = xor i64 [[IXJ]], [[K]]
232 ; CHECK-V8M-TWO-FOLD-6-NEXT: br label [[N]]
233 ; CHECK-V8M-TWO-FOLD-6: N:
234 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[WP:%.*]] = phi i64 [ [[IAJAK]], [[P]] ], [ [[IXJXK]], [[Q]] ]
235 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[WP2:%.*]] = add i64 [[WP]], [[WP]]
236 ; CHECK-V8M-TWO-FOLD-6-NEXT: br label [[M]]
237 ; CHECK-V8M-TWO-FOLD-6: M:
238 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[W:%.*]] = phi i64 [ [[WP2]], [[N]] ], [ 2, [[ENTRY:%.*]] ]
239 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[R:%.*]] = add i64 [[W]], 1
240 ; CHECK-V8M-TWO-FOLD-6-NEXT: ret i64 [[R]]
242 ; CHECK-V8A-TWO-FOLD-6-LABEL: @test_i64(
243 ; CHECK-V8A-TWO-FOLD-6-NEXT: entry:
244 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[IAJ:%.*]] = add i64 [[I:%.*]], [[J:%.*]]
245 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[IAJAK:%.*]] = add i64 [[IAJ]], [[K:%.*]]
246 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[IXJ:%.*]] = xor i64 [[I]], [[J]]
247 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[IXJXK:%.*]] = xor i64 [[IXJ]], [[K]]
248 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[WP:%.*]] = select i1 [[B:%.*]], i64 [[IAJAK]], i64 [[IXJXK]]
249 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[WP2:%.*]] = add i64 [[WP]], [[WP]]
250 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[W:%.*]] = select i1 [[A:%.*]], i64 2, i64 [[WP2]]
251 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[R:%.*]] = add i64 [[W]], 1
252 ; CHECK-V8A-TWO-FOLD-6-NEXT: ret i64 [[R]]
255 br i1 %a, label %M, label %O
257 br i1 %b, label %P, label %Q
259 %iaj = add i64 %i, %j
260 %iajak = add i64 %iaj, %k
263 %ixj = xor i64 %i, %j
264 %ixjxk = xor i64 %ixj, %k
267 %Wp = phi i64 [ %iajak, %P ], [ %ixjxk, %Q ]
268 %Wp2 = add i64 %Wp, %Wp
271 %W = phi i64 [ %Wp2, %N ], [ 2, %entry ]
276 define i64 @test_i64_minsize(i1 %a, i1 %b, i64 %i, i64 %j, i64 %k) #0 {
277 ; CHECK-V8M-TWO-FOLD-4-LABEL: @test_i64_minsize(
278 ; CHECK-V8M-TWO-FOLD-4-NEXT: entry:
279 ; CHECK-V8M-TWO-FOLD-4-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
280 ; CHECK-V8M-TWO-FOLD-4: O:
281 ; CHECK-V8M-TWO-FOLD-4-NEXT: br i1 [[B:%.*]], label [[P:%.*]], label [[Q:%.*]]
282 ; CHECK-V8M-TWO-FOLD-4: P:
283 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[IAJ:%.*]] = add i64 [[I:%.*]], [[J:%.*]]
284 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[IAJAK:%.*]] = add i64 [[IAJ]], [[K:%.*]]
285 ; CHECK-V8M-TWO-FOLD-4-NEXT: br label [[N:%.*]]
286 ; CHECK-V8M-TWO-FOLD-4: Q:
287 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[IXJ:%.*]] = xor i64 [[I]], [[J]]
288 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[IXJXK:%.*]] = xor i64 [[IXJ]], [[K]]
289 ; CHECK-V8M-TWO-FOLD-4-NEXT: br label [[N]]
290 ; CHECK-V8M-TWO-FOLD-4: N:
291 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[WP:%.*]] = phi i64 [ [[IAJAK]], [[P]] ], [ [[IXJXK]], [[Q]] ]
292 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[WP2:%.*]] = add i64 [[WP]], [[WP]]
293 ; CHECK-V8M-TWO-FOLD-4-NEXT: br label [[M]]
294 ; CHECK-V8M-TWO-FOLD-4: M:
295 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[W:%.*]] = phi i64 [ [[WP2]], [[N]] ], [ 2, [[ENTRY:%.*]] ]
296 ; CHECK-V8M-TWO-FOLD-4-NEXT: [[R:%.*]] = add i64 [[W]], 1
297 ; CHECK-V8M-TWO-FOLD-4-NEXT: ret i64 [[R]]
299 ; CHECK-V8A-TWO-FOLD-4-LABEL: @test_i64_minsize(
300 ; CHECK-V8A-TWO-FOLD-4-NEXT: entry:
301 ; CHECK-V8A-TWO-FOLD-4-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
302 ; CHECK-V8A-TWO-FOLD-4: O:
303 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[IAJ:%.*]] = add i64 [[I:%.*]], [[J:%.*]]
304 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[IAJAK:%.*]] = add i64 [[IAJ]], [[K:%.*]]
305 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[IXJ:%.*]] = xor i64 [[I]], [[J]]
306 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[IXJXK:%.*]] = xor i64 [[IXJ]], [[K]]
307 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[WP:%.*]] = select i1 [[B:%.*]], i64 [[IAJAK]], i64 [[IXJXK]]
308 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[WP2:%.*]] = add i64 [[WP]], [[WP]]
309 ; CHECK-V8A-TWO-FOLD-4-NEXT: br label [[M]]
310 ; CHECK-V8A-TWO-FOLD-4: M:
311 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[W:%.*]] = phi i64 [ [[WP2]], [[O]] ], [ 2, [[ENTRY:%.*]] ]
312 ; CHECK-V8A-TWO-FOLD-4-NEXT: [[R:%.*]] = add i64 [[W]], 1
313 ; CHECK-V8A-TWO-FOLD-4-NEXT: ret i64 [[R]]
315 ; CHECK-V8M-TWO-FOLD-5-LABEL: @test_i64_minsize(
316 ; CHECK-V8M-TWO-FOLD-5-NEXT: entry:
317 ; CHECK-V8M-TWO-FOLD-5-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
318 ; CHECK-V8M-TWO-FOLD-5: O:
319 ; CHECK-V8M-TWO-FOLD-5-NEXT: br i1 [[B:%.*]], label [[P:%.*]], label [[Q:%.*]]
320 ; CHECK-V8M-TWO-FOLD-5: P:
321 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[IAJ:%.*]] = add i64 [[I:%.*]], [[J:%.*]]
322 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[IAJAK:%.*]] = add i64 [[IAJ]], [[K:%.*]]
323 ; CHECK-V8M-TWO-FOLD-5-NEXT: br label [[N:%.*]]
324 ; CHECK-V8M-TWO-FOLD-5: Q:
325 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[IXJ:%.*]] = xor i64 [[I]], [[J]]
326 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[IXJXK:%.*]] = xor i64 [[IXJ]], [[K]]
327 ; CHECK-V8M-TWO-FOLD-5-NEXT: br label [[N]]
328 ; CHECK-V8M-TWO-FOLD-5: N:
329 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[WP:%.*]] = phi i64 [ [[IAJAK]], [[P]] ], [ [[IXJXK]], [[Q]] ]
330 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[WP2:%.*]] = add i64 [[WP]], [[WP]]
331 ; CHECK-V8M-TWO-FOLD-5-NEXT: br label [[M]]
332 ; CHECK-V8M-TWO-FOLD-5: M:
333 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[W:%.*]] = phi i64 [ [[WP2]], [[N]] ], [ 2, [[ENTRY:%.*]] ]
334 ; CHECK-V8M-TWO-FOLD-5-NEXT: [[R:%.*]] = add i64 [[W]], 1
335 ; CHECK-V8M-TWO-FOLD-5-NEXT: ret i64 [[R]]
337 ; CHECK-V8A-TWO-FOLD-5-LABEL: @test_i64_minsize(
338 ; CHECK-V8A-TWO-FOLD-5-NEXT: entry:
339 ; CHECK-V8A-TWO-FOLD-5-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
340 ; CHECK-V8A-TWO-FOLD-5: O:
341 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[IAJ:%.*]] = add i64 [[I:%.*]], [[J:%.*]]
342 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[IAJAK:%.*]] = add i64 [[IAJ]], [[K:%.*]]
343 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[IXJ:%.*]] = xor i64 [[I]], [[J]]
344 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[IXJXK:%.*]] = xor i64 [[IXJ]], [[K]]
345 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[WP:%.*]] = select i1 [[B:%.*]], i64 [[IAJAK]], i64 [[IXJXK]]
346 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[WP2:%.*]] = add i64 [[WP]], [[WP]]
347 ; CHECK-V8A-TWO-FOLD-5-NEXT: br label [[M]]
348 ; CHECK-V8A-TWO-FOLD-5: M:
349 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[W:%.*]] = phi i64 [ [[WP2]], [[O]] ], [ 2, [[ENTRY:%.*]] ]
350 ; CHECK-V8A-TWO-FOLD-5-NEXT: [[R:%.*]] = add i64 [[W]], 1
351 ; CHECK-V8A-TWO-FOLD-5-NEXT: ret i64 [[R]]
353 ; CHECK-V8M-TWO-FOLD-6-LABEL: @test_i64_minsize(
354 ; CHECK-V8M-TWO-FOLD-6-NEXT: entry:
355 ; CHECK-V8M-TWO-FOLD-6-NEXT: br i1 [[A:%.*]], label [[M:%.*]], label [[O:%.*]]
356 ; CHECK-V8M-TWO-FOLD-6: O:
357 ; CHECK-V8M-TWO-FOLD-6-NEXT: br i1 [[B:%.*]], label [[P:%.*]], label [[Q:%.*]]
358 ; CHECK-V8M-TWO-FOLD-6: P:
359 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[IAJ:%.*]] = add i64 [[I:%.*]], [[J:%.*]]
360 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[IAJAK:%.*]] = add i64 [[IAJ]], [[K:%.*]]
361 ; CHECK-V8M-TWO-FOLD-6-NEXT: br label [[N:%.*]]
362 ; CHECK-V8M-TWO-FOLD-6: Q:
363 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[IXJ:%.*]] = xor i64 [[I]], [[J]]
364 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[IXJXK:%.*]] = xor i64 [[IXJ]], [[K]]
365 ; CHECK-V8M-TWO-FOLD-6-NEXT: br label [[N]]
366 ; CHECK-V8M-TWO-FOLD-6: N:
367 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[WP:%.*]] = phi i64 [ [[IAJAK]], [[P]] ], [ [[IXJXK]], [[Q]] ]
368 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[WP2:%.*]] = add i64 [[WP]], [[WP]]
369 ; CHECK-V8M-TWO-FOLD-6-NEXT: br label [[M]]
370 ; CHECK-V8M-TWO-FOLD-6: M:
371 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[W:%.*]] = phi i64 [ [[WP2]], [[N]] ], [ 2, [[ENTRY:%.*]] ]
372 ; CHECK-V8M-TWO-FOLD-6-NEXT: [[R:%.*]] = add i64 [[W]], 1
373 ; CHECK-V8M-TWO-FOLD-6-NEXT: ret i64 [[R]]
375 ; CHECK-V8A-TWO-FOLD-6-LABEL: @test_i64_minsize(
376 ; CHECK-V8A-TWO-FOLD-6-NEXT: entry:
377 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[IAJ:%.*]] = add i64 [[I:%.*]], [[J:%.*]]
378 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[IAJAK:%.*]] = add i64 [[IAJ]], [[K:%.*]]
379 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[IXJ:%.*]] = xor i64 [[I]], [[J]]
380 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[IXJXK:%.*]] = xor i64 [[IXJ]], [[K]]
381 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[WP:%.*]] = select i1 [[B:%.*]], i64 [[IAJAK]], i64 [[IXJXK]]
382 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[WP2:%.*]] = add i64 [[WP]], [[WP]]
383 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[W:%.*]] = select i1 [[A:%.*]], i64 2, i64 [[WP2]]
384 ; CHECK-V8A-TWO-FOLD-6-NEXT: [[R:%.*]] = add i64 [[W]], 1
385 ; CHECK-V8A-TWO-FOLD-6-NEXT: ret i64 [[R]]
388 br i1 %a, label %M, label %O
390 br i1 %b, label %P, label %Q
392 %iaj = add i64 %i, %j
393 %iajak = add i64 %iaj, %k
396 %ixj = xor i64 %i, %j
397 %ixjxk = xor i64 %ixj, %k
400 %Wp = phi i64 [ %iajak, %P ], [ %ixjxk, %Q ]
401 %Wp2 = add i64 %Wp, %Wp
404 %W = phi i64 [ %Wp2, %N ], [ 2, %entry ]
409 attributes #0 = { minsize optsize }