@@ -210,3 +210,74 @@ bb3:
210
210
%8 = tuple()
211
211
return %8 : $()
212
212
}
213
+
214
+ sil @big_func: $@convention(thin) () -> Builtin.Int64 {
215
+ bb0:
216
+ %x0 = integer_literal $Builtin.Int64, 1
217
+ %overflow_check = integer_literal $Builtin.Int1, 0
218
+ %sum1 = builtin "sadd_with_overflow_Int64"(%x0 : $Builtin.Int64, %x0 : $Builtin.Int64, %overflow_check : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
219
+ %x1 = tuple_extract %sum1 : $(Builtin.Int64, Builtin.Int1), 0
220
+ br bb1
221
+
222
+ bb1:
223
+ %sum2 = builtin "sadd_with_overflow_Int64"(%x1 : $Builtin.Int64, %x1 : $Builtin.Int64, %overflow_check : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
224
+ %x2 = tuple_extract %sum2 : $(Builtin.Int64, Builtin.Int1), 0
225
+ br bb2
226
+
227
+ bb2:
228
+ %sum3 = builtin "sadd_with_overflow_Int64"(%x2 : $Builtin.Int64, %x2 : $Builtin.Int64, %overflow_check : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
229
+ %x3 = tuple_extract %sum3 : $(Builtin.Int64, Builtin.Int1), 0
230
+ br bb3
231
+
232
+ bb3:
233
+ %sum4 = builtin "sadd_with_overflow_Int64"(%x3 : $Builtin.Int64, %x3 : $Builtin.Int64, %overflow_check : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
234
+ %x4 = tuple_extract %sum4 : $(Builtin.Int64, Builtin.Int1), 0
235
+ br bb4
236
+
237
+ bb4:
238
+ %sum5 = builtin "sadd_with_overflow_Int64"(%x4 : $Builtin.Int64, %x4 : $Builtin.Int64, %overflow_check : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
239
+ %x5 = tuple_extract %sum5 : $(Builtin.Int64, Builtin.Int1), 0
240
+ br bb5
241
+
242
+ bb5:
243
+ %sum6 = builtin "sadd_with_overflow_Int64"(%x5 : $Builtin.Int64, %x5 : $Builtin.Int64, %overflow_check : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
244
+ %x6 = tuple_extract %sum6 : $(Builtin.Int64, Builtin.Int1), 0
245
+ br bb6
246
+
247
+ bb6:
248
+ return %x6 : $Builtin.Int64
249
+ }
250
+
251
+ // Check that the compiler does not unroll loops containing calls
252
+ // of big inlineable functions.
253
+ //
254
+ // CHECK-LABEL: sil @unroll_with_apply
255
+ // CHECK: apply
256
+ // CHECK: // end sil function 'unroll_with_apply'
257
+ sil @unroll_with_apply : $@convention(thin) () -> () {
258
+ bb0:
259
+ %0 = integer_literal $Builtin.Int64, 0
260
+ %1 = integer_literal $Builtin.Int64, 1
261
+ %2 = integer_literal $Builtin.Int64, 20
262
+ %3 = integer_literal $Builtin.Int1, 1
263
+ %f = function_ref @big_func: $@convention(thin) () -> Builtin.Int64
264
+ br bb1(%0 : $Builtin.Int64)
265
+
266
+ bb1(%4 : $Builtin.Int64):
267
+ %r = apply %f() : $@convention(thin) () -> Builtin.Int64
268
+ br bb2
269
+
270
+ bb2:
271
+ %5 = builtin "sadd_with_overflow_Int64"(%4 : $Builtin.Int64, %1 : $Builtin.Int64, %3 : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
272
+ %6 = tuple_extract %5 : $(Builtin.Int64, Builtin.Int1), 0
273
+ %7 = builtin "cmp_eq_Int64"(%6 : $Builtin.Int64, %2 : $Builtin.Int64) : $Builtin.Int1
274
+ cond_br %7, bb4, bb3
275
+
276
+ bb3:
277
+ br bb1(%6 : $Builtin.Int64)
278
+
279
+ bb4:
280
+ %8 = tuple()
281
+ return %8 : $()
282
+ }
283
+
0 commit comments