Home | History | Annotate | Download | only in CodeGenObjC

Lines Matching full:next

11   // CHECK-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
12 // CHECK-NEXT: store i32 {{%.*}}, i32* [[X]]
14 // CHECK-NEXT: [[T1:%.*]] = bitcast i32 ()* [[T0]] to i8*
15 // CHECK-NEXT: [[T2:%.*]] = call i8* @objc_retainBlock(i8* [[T1]]) nounwind
16 // CHECK-NEXT: [[T3:%.*]] = bitcast i8* [[T2]] to i32 ()*
17 // CHECK-NEXT: [[T4:%.*]] = bitcast i32 ()* [[T3]] to i8*
18 // CHECK-NEXT: [[T5:%.*]] = call i8* @objc_autoreleaseReturnValue(i8* [[T4]]) nounwind
19 // CHECK-NEXT: [[T6:%.*]] = bitcast i8* [[T5]] to i32 ()*
20 // CHECK-NEXT: ret i32 ()* [[T6]]
27 // CHECK-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
28 // CHECK-NEXT: [[PARM:%.*]] = call i8* @objc_retain(i8* {{%.*}})
29 // CHECK-NEXT: store i8* [[PARM]], i8** [[X]]
30 // CHECK-NEXT: [[SLOTREL:%.*]] = getelementptr inbounds [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
32 // CHECK-NEXT: [[T0:%.*]] = load i8** [[X]],
33 // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retain(i8* [[T0]])
34 // CHECK-NEXT: store i8* [[T1]], i8** [[SLOT]],
35 // CHECK-NEXT: bitcast
36 // CHECK-NEXT: call void @test2_helper(
37 // CHECK-NEXT: [[T0:%.*]] = load i8** [[SLOTREL]]
38 // CHECK-NEXT: call void @objc_release(i8* [[T0]]) nounwind, !clang.imprecise_release
39 // CHECK-NEXT: [[T0:%.*]] = load i8** [[X]]
40 // CHECK-NEXT: call void @objc_release(i8* [[T0]]) nounwind, !clang.imprecise_release
41 // CHECK-NEXT: ret void
52 // CHECK-NEXT: [[STRONG:%.*]] = alloca i8*
53 // CHECK-NEXT: [[TEMP:%.*]] = alloca i8*
54 // CHECK-NEXT: bitcast void (i8**)* {{%.*}} to i8*
55 // CHECK-NEXT: call i8* @objc_retain(
56 // CHECK-NEXT: bitcast i8*
57 // CHECK-NEXT: store void (i8**)* {{%.*}}, void (i8**)** [[SINK]]
58 // CHECK-NEXT: store i8* null, i8** [[STRONG]]
60 // CHECK-NEXT: load void (i8**)** [[SINK]]
61 // CHECK-NEXT: bitcast
62 // CHECK-NEXT: getelementptr
63 // CHECK-NEXT: [[BLOCK:%.*]] = bitcast
64 // CHECK-NEXT: [[T0:%.*]] = load i8** [[STRONG]]
65 // CHECK-NEXT: store i8* [[T0]], i8** [[TEMP]]
66 // CHECK-NEXT: [[F0:%.*]] = load i8**
67 // CHECK-NEXT: [[F1:%.*]] = bitcast i8* [[F0]] to void (i8*, i8**)*
68 // CHECK-NEXT: call void [[F1]](i8* [[BLOCK]], i8** [[TEMP]])
69 // CHECK-NEXT: [[T0:%.*]] = load i8** [[TEMP]]
70 // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retain(i8* [[T0]])
71 // CHECK-NEXT: [[T2:%.*]] = load i8** [[STRONG]]
72 // CHECK-NEXT: store i8* [[T1]], i8** [[STRONG]]
73 // CHECK-NEXT: call void @objc_release(i8* [[T2]])
75 // CHECK-NEXT: [[T0:%.*]] = load i8** [[STRONG]]
76 // CHECK-NEXT: call void @objc_release(i8* [[T0]])
78 // CHECK-NEXT: load void (i8**)** [[SINK]]
79 // CHECK-NEXT: bitcast
80 // CHECK-NEXT: call void @objc_release
81 // CHECK-NEXT: ret void
93 // CHECK-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
96 // CHECK-NEXT: store i32 33554432, i32* [[T0]]
98 // CHECK-NEXT: [[T0:%.*]] = call i8* @test4_source()
99 // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T0]])
100 // CHECK-NEXT: store i8* [[T1]], i8** [[SLOT]]
101 // CHECK-NEXT: [[SLOT:%.*]] = getelementptr inbounds [[BYREF_T]]* [[VAR]], i32 0, i32 6
105 // CHECK-NEXT: store i8* [[T0]], i8**
108 // CHECK-NEXT: call void @_Block_object_dispose(i8* [[T0]], i32 8)
109 // CHECK-NEXT: [[T0:%.*]] = load i8** [[SLOT]]
110 // CHECK-NEXT: call void @objc_release(i8* [[T0]])
111 // CHECK-NEXT: ret void
115 // CHECK-NEXT: load i8**
116 // CHECK-NEXT: bitcast i8* {{%.*}} to [[BYREF_T]]*
117 // CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[BYREF_T]]* {{%.*}}, i32 0, i32 6
118 // CHECK-NEXT: [[T2:%.*]] = load i8** [[T1]]
119 // CHECK-NEXT: store i8* [[T2]], i8** [[T0]]
120 // CHECK-NEXT: store i8* null, i8** [[T1]]
124 // CHECK-NEXT: [[T1:%.*]] = load i8** [[T0]]
125 // CHECK-NEXT: call void @objc_release(i8* [[T1]])
129 // CHECK-NEXT: [[T0:%.*]] = load i8** [[SLOT]], align 8
130 // CHECK-NEXT: store i8* null, i8** [[SLOT]],
131 // CHECK-NEXT: call void @objc_release(i8* [[T0]])
132 // CHECK-NEXT: ret void
149 // CHECK-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
151 // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T0]])
152 // CHECK-NEXT: store i8* [[T1]], i8** [[VAR]],
153 // CHECK-NEXT: call void @objc_release(i8* [[T1]])
157 // CHECK-NEXT: [[T0:%.*]] = load i8** [[VAR]]
158 // CHECK-NEXT: store i8* [[T0]], i8** [[CAPTURE]]
159 // CHECK-NEXT: [[T0:%.*]] = bitcast [[BLOCK_T]]* [[BLOCK]] to
161 // CHECK-NEXT: ret void
172 // CHECK-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
175 // CHECK-NEXT: store i32 33554432, i32* [[T0]]
177 // CHECK-NEXT: [[T0:%.*]] = call i8* @test6_source()
178 // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T0]])
179 // CHECK-NEXT: call i8* @objc_initWeak(i8** [[SLOT]], i8* [[T1]])
180 // CHECK-NEXT: call void @objc_release(i8* [[T1]])
181 // CHECK-NEXT: [[SLOT:%.*]] = getelementptr inbounds [[BYREF_T]]* [[VAR]], i32 0, i32 6
185 // CHECK-NEXT: store i8* [[T0]], i8**
188 // CHECK-NEXT: call void @_Block_object_dispose(i8* [[T0]], i32 8)
189 // CHECK-NEXT: call void @objc_destroyWeak(i8** [[SLOT]])
190 // CHECK-NEXT: ret void
194 // CHECK-NEXT: load i8**
195 // CHECK-NEXT: bitcast i8* {{%.*}} to [[BYREF_T]]*
196 // CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[BYREF_T]]* {{%.*}}, i32 0, i32 6
197 // CHECK-NEXT: call void @objc_moveWeak(i8** [[T0]], i8** [[T1]])
201 // CHECK-NEXT: call void @objc_destroyWeak(i8** [[T0]])
205 // CHECK-NEXT: call i8* @objc_storeWeak(i8** [[SLOT]], i8* null)
206 // CHECK-NEXT: ret void
226 // CHECK-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
228 // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainAutoreleasedReturnValue(i8* [[T0]])
229 // CHECK-NEXT: call i8* @objc_initWeak(i8** [[VAR]], i8* [[T1]])
230 // CHECK-NEXT: call void @objc_release(i8* [[T1]])
234 // CHECK-NEXT: [[T0:%.*]] = call i8* @objc_loadWeak(i8** [[VAR]])
235 // CHECK-NEXT: call i8* @objc_initWeak(i8** [[SLOT]], i8* [[T0]])
237 // CHECK-NEXT: call void @objc_destroyWeak(i8** {{%.*}})
238 // CHECK-NEXT: call void @objc_destroyWeak(i8** [[VAR]])
239 // CHECK-NEXT: ret void
243 // CHECK-NEXT: [[T0:%.*]] = call i8* @objc_loadWeak(i8** [[SLOT]])
244 // CHECK-NEXT: call void @test7_consume(i8* [[T0]])
245 // CHECK-NEXT: ret void
249 // CHECK-NEXT: getelementptr
250 // CHECK-NEXT: call void @objc_copyWeak(
254 // CHECK-NEXT: call void @objc_destroyWeak(
262 // CHECK-NEXT: alloca i8*
263 // CHECK-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
265 // CHECK-NEXT: store
268 // CHECK-NEXT: [[T1:%.*]] = load [[TEST8]]** [[SELF]],
269 // CHECK-NEXT: [[T2:%.*]] = bitcast [[TEST8]]* [[T1]] to i8*
270 // CHECK-NEXT: [[T3:%.*]] = call i8* @objc_retain(i8* [[T2]])
271 // CHECK-NEXT: [[T4:%.*]] = bitcast i8* [[T3]] to [[TEST8]]*
272 // CHECK-NEXT: store [[TEST8]]* [[T4]], [[TEST8]]** [[T0]]
273 // CHECK-NEXT: bitcast [[BLOCK_T]]* [[BLOCK]] to
275 // CHECK-NEXT: [[T1:%.*]] = load [[TEST8]]** [[D0]]
276 // CHECK-NEXT: [[T2:%.*]] = bitcast [[TEST8]]* [[T1]] to i8*
277 // CHECK-NEXT: call void @objc_release(i8* [[T2]])
278 // CHECK-NEXT: ret void
295 // CHECK-NEXT: bitcast i8*
296 // CHECK-NEXT: call i8*
297 // CHECK-NEXT: call i8* @objc_autoreleaseReturnValue
298 // CHECK-NEXT: ret i8*
301 // CHECK-NEXT: call i8* @objc_retain
302 // CHECK-NEXT: ret i8*
315 // CHECK-NEXT: store void ()* null, void ()** [[T0]], align 8
319 // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainBlock(i8* [[T0]])
320 // CHECK-NEXT: [[T2:%.*]] = bitcast i8* [[T1]] to void ()*
321 // CHECK-NEXT: [[T3:%.*]] = getelementptr inbounds [[BYREF_T]]* [[BYREF]], i32 0, i32 1
322 // CHECK-NEXT: [[T4:%.*]] = load [[BYREF_T]]** [[T3]]
323 // CHECK-NEXT: [[T5:%.*]] = getelementptr inbounds [[BYREF_T]]* [[T4]], i32 0, i32 6
324 // CHECK-NEXT: [[T6:%.*]] = load void ()** [[T5]], align 8
325 // CHECK-NEXT: store void ()* {{%.*}}, void ()** [[T5]], align 8
326 // CHECK-NEXT: [[T7:%.*]] = bitcast void ()* [[T6]] to i8*
327 // CHECK-NEXT: call void @objc_release(i8* [[T7]])
330 // CHECK-NEXT: [[SLOT:%.*]] = getelementptr inbounds [[BYREF_T]]* [[BYREF]], i32 0, i32 6
331 // CHECK-NEXT: [[T0:%.*]] = bitcast [[BYREF_T]]* [[BYREF]] to i8*
332 // CHECK-NEXT: call void @_Block_object_dispose(i8* [[T0]], i32 8)
333 // CHECK-NEXT: [[T1:%.*]] = load void ()** [[SLOT]]
334 // CHECK-NEXT: [[T2:%.*]] = bitcast void ()* [[T1]] to i8*
335 // CHECK-NEXT: call void @objc_release(i8* [[T2]])
336 // CHECK-NEXT: ret void
346 // CHECK-NEXT: [[D1:%.*]] = bitcast i8* [[D0]] to [[BYREF_T]]*
347 // CHECK-NEXT: [[D2:%.*]] = getelementptr inbounds [[BYREF_T]]* [[D1]], i32 0, i32 6
348 // CHECK-NEXT: [[S0:%.*]] = load i8** {{%.*}}
349 // CHECK-NEXT: [[S1:%.*]] = bitcast i8* [[S0]] to [[BYREF_T]]*
350 // CHECK-NEXT: [[S2:%.*]] = getelementptr inbounds [[BYREF_T]]* [[S1]], i32 0, i32 6
351 // CHECK-NEXT: [[T0:%.*]] = load void ()** [[S2]], align 8
352 // CHECK-NEXT: [[T1:%.*]] = bitcast void ()* [[T0]] to i8*
353 // CHECK-NEXT: [[T2:%.*]] = call i8* @objc_retainBlock(i8* [[T1]])
354 // CHECK-NEXT: [[T3:%.*]] = bitcast i8* [[T2]] to void ()*
355 // CHECK-NEXT: store void ()* [[T3]], void ()** [[D2]], align 8
356 // CHECK-NEXT: ret void
360 // CHECK-NEXT: [[T1:%.*]] = bitcast i8* [[T0]] to [[BYREF_T]]*
361 // CHECK-NEXT: [[T2:%.*]] = getelementptr inbounds [[BYREF_T]]* [[T1]], i32 0, i32 6
362 // CHECK-NEXT: [[T3:%.*]] = load void ()** [[T2]], align 8
363 // CHECK-NEXT: [[T4:%.*]] = bitcast void ()* [[T3]] to i8*
364 // CHECK-NEXT: call void @objc_release(i8* [[T4]])
365 // CHECK-NEXT: ret void
378 // CHECK-NEXT: store void ()* null, void ()** [[T0]], align 8
380 // CHECK-NEXT: [[SLOT:%.*]] = getelementptr inbounds [[BYREF_T]]* [[BYREF]], i32 0, i32 6
384 // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retainBlock(i8* [[T0]])
385 // CHECK-NEXT: [[T2:%.*]] = bitcast i8* [[T1]] to void ()*
386 // CHECK-NEXT: [[T3:%.*]] = getelementptr inbounds [[BYREF_T]]* [[BYREF]], i32 0, i32 1
387 // CHECK-NEXT: [[T4:%.*]] = load [[BYREF_T]]** [[T3]]
388 // CHECK-NEXT: [[T5:%.*]] = getelementptr inbounds [[BYREF_T]]* [[T4]], i32 0, i32 6
389 // CHECK-NEXT: [[T6:%.*]] = load void ()** [[T5]], align 8
390 // CHECK-NEXT: store void ()* {{%.*}}, void ()** [[T5]], align 8
391 // CHECK-NEXT: [[T7:%.*]] = bitcast void ()* [[T6]] to i8*
392 // CHECK-NEXT: call void @objc_release(i8* [[T7]])
395 // CHECK-NEXT: [[T0:%.*]] = bitcast [[BYREF_T]]* [[BYREF]] to i8*
396 // CHECK-NEXT: call void @_Block_object_dispose(i8* [[T0]], i32 8)
397 // CHECK-NEXT: [[T1:%.*]] = load void ()** [[SLOT]]
398 // CHECK-NEXT: [[T2:%.*]] = bitcast void ()* [[T1]] to i8*
399 // CHECK-NEXT: call void @objc_release(i8* [[T2]])
400 // CHECK-NEXT: ret void
411 // CHECK-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]], align 8
413 // CHECK-NEXT: [[T1:%.*]] = bitcast void ()* [[T0]] to i8*
414 // CHECK-NEXT: [[T2:%.*]] = call i8* @objc_retainBlock(i8* [[T1]])
415 // CHECK-NEXT: [[T3:%.*]] = bitcast i8* [[T2]] to void ()*
416 // CHECK-NEXT: [[T4:%.*]] = bitcast void ()* [[T3]] to i8*
417 // CHECK-NEXT: call void @test11_helper(i8* [[T4]])
418 // CHECK-NEXT: [[T5:%.*]] = bitcast void ()* [[T3]] to i8*
419 // CHECK-NEXT: call void @objc_release(i8* [[T5]])
420 // CHECK-NEXT: ret void
428 // CHECK-NEXT: [[B:%.*]] = alloca i8*, align 8
429 // CHECK-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]], align 8
431 // CHECK-NEXT: [[T1:%.*]] = bitcast void ()* [[T0]] to i8*
432 // CHECK-NEXT: [[T2:%.*]] = call i8* @objc_retainBlock(i8* [[T1]])
433 // CHECK-NEXT: [[T3:%.*]] = bitcast i8* [[T2]] to void ()*
434 // CHECK-NEXT: [[T4:%.*]] = bitcast void ()* [[T3]] to i8*
435 // CHECK-NEXT: store i8* [[T4]], i8** [[B]], align 8
436 // CHECK-NEXT: [[T5:%.*]] = load i8** [[B]]
437 // CHECK-NEXT: call void @objc_release(i8* [[T5]])
438 // CHECK-NEXT: ret void
471 // CHECK-NEXT: [[B:%.*]] = alloca void ()*, align 8
472 // CHECK-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:.*]], align 8
473 // CHECK-NEXT: [[CLEANUP_ACTIVE:%.*]] = alloca i1
474 // CHECK-NEXT: [[T0:%.*]] = call i8* @objc_retain(i8* {{%.*}})
475 // CHECK-NEXT: store i8* [[T0]], i8** [[X]], align 8
476 // CHECK-NEXT: [[CLEANUP_ADDR:%.*]] = getelementptr inbounds [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
477 // CHECK-NEXT: [[T0:%.*]] = load i8** [[X]], align 8
478 // CHECK-NEXT: [[T1:%.*]] = icmp ne i8* [[T0]], null
479 // CHECK-NEXT: store i1 false, i1* [[CLEANUP_ACTIVE]]
480 // CHECK-NEXT: br i1 [[T1]],
484 // CHECK-NEXT: [[T0:%.*]] = load i8** [[X]], align 8
485 // CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retain(i8* [[T0]])
486 // CHECK-NEXT: store i8* [[T1]], i8** [[CAPTURE]], align 8
487 // CHECK-NEXT: store i1 true, i1* [[CLEANUP_ACTIVE]]
488 // CHECK-NEXT: bitcast [[BLOCK_T]]* [[BLOCK]] to void ()*
489 // CHECK-NEXT: br label
492 // CHECK-NEXT: [[T1:%.*]] = bitcast void ()* [[T0]] to i8*
493 // CHECK-NEXT: [[T2:%.*]] = call i8* @objc_retainBlock(i8* [[T1]])
494 // CHECK-NEXT: [[T3:%.*]] = bitcast i8* [[T2]] to void ()*
495 // CHECK-NEXT: store void ()* [[T3]], void ()** [[B]], align 8
496 // CHECK-NEXT: [[T0:%.*]] = load void ()** [[B]], align 8
497 // CHECK-NEXT: call void @test13_use(void ()* [[T0]])
498 // CHECK-NEXT: [[T0:%.*]] = load void ()** [[B]]
499 // CHECK-NEXT: [[T1:%.*]] = bitcast void ()* [[T0]] to i8*
500 // CHECK-NEXT: call void @objc_release(i8* [[T1]])
502 // CHECK-NEXT: [[T0:%.*]] = load i1* [[CLEANUP_ACTIVE]]
503 // CHECK-NEXT: br i1 [[T0]]
505 // CHECK-NEXT: call void @objc_release(i8* [[T0]])
506 // CHECK-NEXT: br label
509 // CHECK-NEXT: call void @objc_release(i8* [[T0]])
510 // CHECK-NEXT: ret void
531 // CHECK-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
532 // CHECK-NEXT: [[SLOTREL:%.*]] = getelementptr inbounds [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
533 // CHECK-NEXT: store void ()* null, void ()** [[BLKVAR]], align 8