• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt -S -basicaa -objc-arc < %s | FileCheck %s
2; rdar://11434915
3
4; Delete the weak calls and replace them with just the net retain.
5
6;      CHECK: define void @test0(i8* %p) {
7; CHECK-NEXT: call i8* @objc_retain(i8* %p)
8; CHECK-NEXT: ret void
9
10define void @test0(i8* %p) {
11  %weakBlock = alloca i8*, align 8
12  %tmp7 = call i8* @objc_initWeak(i8** %weakBlock, i8* %p) nounwind
13  %tmp26 = call i8* @objc_loadWeakRetained(i8** %weakBlock) nounwind
14  call void @objc_destroyWeak(i8** %weakBlock) nounwind
15  ret void
16}
17
18;      CHECK: define i8* @test1(i8* %p) {
19; CHECK-NEXT: call i8* @objc_retain(i8* %p)
20; CHECK-NEXT: ret i8* %p
21
22define i8* @test1(i8* %p) {
23  %weakBlock = alloca i8*, align 8
24  %tmp7 = call i8* @objc_initWeak(i8** %weakBlock, i8* %p) nounwind
25  %tmp26 = call i8* @objc_loadWeakRetained(i8** %weakBlock) nounwind
26  call void @objc_destroyWeak(i8** %weakBlock) nounwind
27  ret i8* %tmp26
28}
29
30;      CHECK: define i8* @test2(i8* %p, i8* %q) {
31; CHECK-NEXT: call i8* @objc_retain(i8* %q)
32; CHECK-NEXT: ret i8* %q
33
34define i8* @test2(i8* %p, i8* %q) {
35  %weakBlock = alloca i8*, align 8
36  %tmp7 = call i8* @objc_initWeak(i8** %weakBlock, i8* %p) nounwind
37  %tmp19 = call i8* @objc_storeWeak(i8** %weakBlock, i8* %q) nounwind
38  %tmp26 = call i8* @objc_loadWeakRetained(i8** %weakBlock) nounwind
39  call void @objc_destroyWeak(i8** %weakBlock) nounwind
40  ret i8* %tmp26
41}
42
43declare i8* @objc_initWeak(i8**, i8*)
44declare void @objc_destroyWeak(i8**)
45declare i8* @objc_loadWeakRetained(i8**)
46declare i8* @objc_storeWeak(i8** %weakBlock, i8* %q)
47