Lines Matching +full:release +full:- +full:version
1 ; RUN: opt -passes=objc-arc -S < %s | FileCheck %s
10 ; release call when there are debug instructions.
13 ; CHECK: call void @llvm.objc.release(ptr %x)
22 tail call void @llvm.objc.release(ptr %x)
26 ; ARC optimizer shouldn't move the release call, which is a precise release call
29 ; CHECK-LABEL: define void @test2(
31 ; CHECK: call void @llvm.objc.release(
38 tail call void @llvm.objc.release(ptr %v0)
43 ; Previously, ARC optimizer would move the release past the retain.
47 ; call void @llvm.objc.release(ptr %obj) #1, !clang.imprecise_release !2
51 ; Ideally, the retain/release pairs in BB if.then should be removed.
54 ; CHECK-LABEL: @test3(
55 ; CHECK-NEXT: [[TMP2:%.*]] = tail call ptr @llvm.objc.retain(ptr [[OBJ:%.*]])
56 ; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
58 ; CHECK-NEXT: call void @readOnlyFunc(ptr [[OBJ]], ptr null)
59 ; CHECK-NEXT: [[TMP1:%.*]] = add i32 1, 2
60 ; CHECK-NEXT: call void @alterRefCount()
61 ; CHECK-NEXT: br label [[JOIN:%.*]]
63 ; CHECK-NEXT: call void @alterRefCount()
64 ; CHECK-NEXT: call void @use(ptr [[OBJ]])
65 ; CHECK-NEXT: br label [[JOIN]]
67 ; CHECK-NEXT: call void @llvm.objc.release(ptr [[OBJ]]) {{.*}}, !clang.imprecise_release !2
68 ; CHECK-NEXT: ret void
85 call void @llvm.objc.release(ptr %obj), !clang.imprecise_release !9
90 ; CHECK-LABEL: @test4(
91 ; CHECK-NEXT: [[TMP3:%.*]] = tail call ptr @llvm.objc.retain(ptr [[OBJ0:%.*]])
92 ; CHECK-NEXT: [[TMP2:%.*]] = tail call ptr @llvm.objc.retain(ptr [[OBJ1:%.*]])
93 ; CHECK-NEXT: br i1 [[COND:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
95 ; CHECK-NEXT: call void @readOnlyFunc(ptr [[OBJ0]], ptr [[OBJ1]])
96 ; CHECK-NEXT: [[TMP1:%.*]] = add i32 1, 2
97 ; CHECK-NEXT: call void @alterRefCount()
98 ; CHECK-NEXT: br label [[JOIN:%.*]]
100 ; CHECK-NEXT: call void @alterRefCount()
101 ; CHECK-NEXT: call void @use(ptr [[OBJ0]])
102 ; CHECK-NEXT: call void @use(ptr [[OBJ1]])
103 ; CHECK-NEXT: br label [[JOIN]]
105 ; CHECK-NEXT: call void @llvm.objc.release(ptr [[OBJ0]]) {{.*}}, !clang.imprecise_release !2
106 ; CHECK-NEXT: call void @llvm.objc.release(ptr [[OBJ1]]) {{.*}}, !clang.imprecise_release !2
107 ; CHECK-NEXT: ret void
126 call void @llvm.objc.release(ptr %obj0), !clang.imprecise_release !9
127 call void @llvm.objc.release(ptr %obj1), !clang.imprecise_release !9
131 ; In this test, insertion points for the retain and release calls that could be
135 ; CHECK-LABEL: @test5(
136 ; CHECK-NEXT: [[V0:%.*]] = tail call ptr @llvm.objc.retain(ptr [[OBJ:%.*]])
137 ; CHECK-NEXT: br i1 [[COND0:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
139 ; CHECK-NEXT: call void @readOnlyFunc(ptr [[OBJ]], ptr null)
140 ; CHECK-NEXT: br i1 [[COND1:%.*]], label [[IF_THEN2:%.*]], label [[IF_ELSE2:%.*]]
142 ; CHECK-NEXT: br label [[BB1:%.*]]
144 ; CHECK-NEXT: br label [[BB1]]
146 ; CHECK-NEXT: [[TMP1:%.*]] = add i32 1, 2
147 ; CHECK-NEXT: call void @alterRefCount()
148 ; CHECK-NEXT: br label [[JOIN:%.*]]
150 ; CHECK-NEXT: call void @alterRefCount()
151 ; CHECK-NEXT: call void @use(ptr [[OBJ]])
152 ; CHECK-NEXT: br label [[JOIN]]
154 ; CHECK-NEXT: call void @llvm.objc.release(ptr [[OBJ]])
155 ; CHECK-NEXT: ret void
181 call void @llvm.objc.release(ptr %obj), !clang.imprecise_release !9
187 declare void @llvm.objc.release(ptr) local_unnamed_addr
193 !0 = !{i32 2, !"Dwarf Version", i32 4}
194 !1 = !{i32 2, !"Debug Info Version", i32 3}