Mercurial > hg > CbC > CbC_llvm
diff test/Transforms/ObjCARC/allocas.ll @ 147:c2174574ed3a
LLVM 10
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 14 Aug 2019 16:55:33 +0900 |
parents | 803732b1fca8 |
children |
line wrap: on
line diff
--- a/test/Transforms/ObjCARC/allocas.ll Sat Feb 17 09:57:20 2018 +0900 +++ b/test/Transforms/ObjCARC/allocas.ll Wed Aug 14 16:55:33 2019 +0900 @@ -1,13 +1,13 @@ ; RUN: opt -objc-arc -S < %s | FileCheck %s -declare i8* @objc_retain(i8*) -declare i8* @objc_retainAutoreleasedReturnValue(i8*) -declare void @objc_release(i8*) -declare i8* @objc_autorelease(i8*) -declare i8* @objc_autoreleaseReturnValue(i8*) -declare void @objc_autoreleasePoolPop(i8*) -declare i8* @objc_autoreleasePoolPush() -declare i8* @objc_retainBlock(i8*) +declare i8* @llvm.objc.retain(i8*) +declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) +declare void @llvm.objc.release(i8*) +declare i8* @llvm.objc.autorelease(i8*) +declare i8* @llvm.objc.autoreleaseReturnValue(i8*) +declare void @llvm.objc.autoreleasePoolPop(i8*) +declare i8* @llvm.objc.autoreleasePoolPush() +declare i8* @llvm.objc.retainBlock(i8*) declare i8* @objc_retainedObject(i8*) declare i8* @objc_unretainedObject(i8*) @@ -25,7 +25,7 @@ declare void @llvm.dbg.value(metadata, metadata, metadata) -declare i8* @objc_msgSend(i8*, i8*, ...) +declare i8* @llvm.objc.msgSend(i8*, i8*, ...) ; In the presence of allocas, unconditionally remove retain/release pairs only @@ -44,77 +44,77 @@ ; rdar://13750319 ; CHECK: define void @test1a(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_release(i8* %y) -; CHECK: @objc_release(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.release(i8* %y) +; CHECK: @llvm.objc.release(i8* %x) ; CHECK: ret void ; CHECK: } define void @test1a(i8* %x) { entry: %A = alloca i8* - tail call i8* @objc_retain(i8* %x) - tail call i8* @objc_retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) store i8* %x, i8** %A, align 8 %y = load i8*, i8** %A call void @use_alloca(i8** %A) - call void @objc_release(i8* %y), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %y), !clang.imprecise_release !0 call void @use_pointer(i8* %x) - call void @objc_release(i8* %x), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x), !clang.imprecise_release !0 ret void } ; CHECK: define void @test1b(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_release(i8* %y) -; CHECK: @objc_release(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.release(i8* %y) +; CHECK: @llvm.objc.release(i8* %x) ; CHECK: ret void ; CHECK: } define void @test1b(i8* %x) { entry: %A = alloca i8* %gep = getelementptr i8*, i8** %A, i32 0 - tail call i8* @objc_retain(i8* %x) - tail call i8* @objc_retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) store i8* %x, i8** %gep, align 8 %y = load i8*, i8** %A call void @use_alloca(i8** %A) - call void @objc_release(i8* %y), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %y), !clang.imprecise_release !0 call void @use_pointer(i8* %x) - call void @objc_release(i8* %x), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x), !clang.imprecise_release !0 ret void } ; CHECK: define void @test1c(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_release(i8* %y) -; CHECK: @objc_release(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.release(i8* %y) +; CHECK: @llvm.objc.release(i8* %x) ; CHECK: ret void ; CHECK: } define void @test1c(i8* %x) { entry: %A = alloca i8*, i32 3 %gep = getelementptr i8*, i8** %A, i32 2 - tail call i8* @objc_retain(i8* %x) - tail call i8* @objc_retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) store i8* %x, i8** %gep, align 8 %y = load i8*, i8** %gep call void @use_alloca(i8** %A) - call void @objc_release(i8* %y), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %y), !clang.imprecise_release !0 call void @use_pointer(i8* %x) - call void @objc_release(i8* %x), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x), !clang.imprecise_release !0 ret void } ; CHECK: define void @test1d(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_release(i8* %y) -; CHECK: @objc_release(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.release(i8* %y) +; CHECK: @llvm.objc.release(i8* %x) ; CHECK: ret void ; CHECK: } define void @test1d(i8* %x) { @@ -132,22 +132,22 @@ exit: %A = phi i8** [ %allocaA, %use_allocaA ], [ %allocaB, %use_allocaB ] %gep = getelementptr i8*, i8** %A, i32 0 - tail call i8* @objc_retain(i8* %x) - tail call i8* @objc_retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) store i8* %x, i8** %gep, align 8 %y = load i8*, i8** %gep call void @use_alloca(i8** %A) - call void @objc_release(i8* %y), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %y), !clang.imprecise_release !0 call void @use_pointer(i8* %x) - call void @objc_release(i8* %x), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x), !clang.imprecise_release !0 ret void } ; CHECK: define void @test1e(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_release(i8* %y) -; CHECK: @objc_release(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.release(i8* %y) +; CHECK: @llvm.objc.release(i8* %x) ; CHECK: ret void ; CHECK: } define void @test1e(i8* %x) { @@ -165,22 +165,22 @@ exit: %A = phi i8** [ %allocaA, %use_allocaA ], [ %allocaB, %use_allocaB ] %gep = getelementptr i8*, i8** %A, i32 2 - tail call i8* @objc_retain(i8* %x) - tail call i8* @objc_retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) store i8* %x, i8** %gep, align 8 %y = load i8*, i8** %gep call void @use_alloca(i8** %A) - call void @objc_release(i8* %y), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %y), !clang.imprecise_release !0 call void @use_pointer(i8* %x) - call void @objc_release(i8* %x), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x), !clang.imprecise_release !0 ret void } ; CHECK: define void @test1f(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_release(i8* %y) -; CHECK: @objc_release(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.release(i8* %y) +; CHECK: @llvm.objc.release(i8* %x) ; CHECK: ret void ; CHECK: } define void @test1f(i8* %x) { @@ -188,14 +188,14 @@ %allocaOne = alloca i8* %allocaTwo = alloca i8* %A = select i1 undef, i8** %allocaOne, i8** %allocaTwo - tail call i8* @objc_retain(i8* %x) - tail call i8* @objc_retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) store i8* %x, i8** %A, align 8 %y = load i8*, i8** %A call void @use_alloca(i8** %A) - call void @objc_release(i8* %y), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %y), !clang.imprecise_release !0 call void @use_pointer(i8* %x) - call void @objc_release(i8* %x), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x), !clang.imprecise_release !0 ret void } @@ -204,10 +204,10 @@ ; CHECK: define void @test2a(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_release(i8* %y) -; CHECK: @objc_release(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.release(i8* %y) +; CHECK: @llvm.objc.release(i8* %x) ; CHECK: ret void ; CHECK: } define void @test2a(i8* %x) { @@ -224,20 +224,20 @@ br label %bb3 bb3: - tail call i8* @objc_retain(i8* %x) - tail call i8* @objc_retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) call void @use_alloca(i8** %A) - call void @objc_release(i8* %y), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %y), !clang.imprecise_release !0 call void @use_pointer(i8* %x) - call void @objc_release(i8* %x), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x), !clang.imprecise_release !0 ret void } ; CHECK: define void @test2b(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_release(i8* %y) -; CHECK: @objc_release(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.release(i8* %y) +; CHECK: @llvm.objc.release(i8* %x) ; CHECK: ret void ; CHECK: } define void @test2b(i8* %x) { @@ -256,20 +256,20 @@ br label %bb3 bb3: - tail call i8* @objc_retain(i8* %x) - tail call i8* @objc_retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) call void @use_alloca(i8** %A) - call void @objc_release(i8* %y), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %y), !clang.imprecise_release !0 call void @use_pointer(i8* %x) - call void @objc_release(i8* %x), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x), !clang.imprecise_release !0 ret void } ; CHECK: define void @test2c(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_release(i8* %y) -; CHECK: @objc_release(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.release(i8* %y) +; CHECK: @llvm.objc.release(i8* %x) ; CHECK: ret void ; CHECK: } define void @test2c(i8* %x) { @@ -279,7 +279,7 @@ store i8* %x, i8** %gep1, align 8 %gep2 = getelementptr i8*, i8** %A, i32 2 %y = load i8*, i8** %gep2 - tail call i8* @objc_retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) br label %bb1 bb1: @@ -289,24 +289,24 @@ br label %bb3 bb3: - tail call i8* @objc_retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) call void @use_alloca(i8** %A) - call void @objc_release(i8* %y), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %y), !clang.imprecise_release !0 call void @use_pointer(i8* %x) - call void @objc_release(i8* %x), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x), !clang.imprecise_release !0 ret void } ; CHECK: define void @test2d(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_release(i8* %y) -; CHECK: @objc_release(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.release(i8* %y) +; CHECK: @llvm.objc.release(i8* %x) ; CHECK: ret void ; CHECK: } define void @test2d(i8* %x) { entry: - tail call i8* @objc_retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) br label %bb1 bb1: @@ -328,11 +328,11 @@ bb3: %A = phi i8** [ %Abb1, %bb1 ], [ %Abb2, %bb2 ] %y = phi i8* [ %ybb1, %bb1 ], [ %ybb2, %bb2 ] - tail call i8* @objc_retain(i8* %x) + tail call i8* @llvm.objc.retain(i8* %x) call void @use_alloca(i8** %A) - call void @objc_release(i8* %y), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %y), !clang.imprecise_release !0 call void @use_pointer(i8* %x) - call void @objc_release(i8* %x), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x), !clang.imprecise_release !0 ret void } @@ -344,21 +344,21 @@ ; CHECK: define void @test3a() { ; CHECK: entry: -; CHECK: @objc_retainAutoreleasedReturnValue -; CHECK: @objc_retain -; CHECK: @objc_retain -; CHECK: @objc_retain -; CHECK: @objc_retain +; CHECK: @llvm.objc.retainAutoreleasedReturnValue +; CHECK: @llvm.objc.retain +; CHECK: @llvm.objc.retain +; CHECK: @llvm.objc.retain +; CHECK: @llvm.objc.retain ; CHECK: arraydestroy.body: -; CHECK: @objc_release -; CHECK-NOT: @objc_release +; CHECK: @llvm.objc.release +; CHECK-NOT: @llvm.objc.release ; CHECK: arraydestroy.done: -; CHECK-NOT: @objc_release +; CHECK-NOT: @llvm.objc.release ; CHECK: arraydestroy.body1: -; CHECK: @objc_release -; CHECK-NOT: @objc_release +; CHECK: @llvm.objc.release +; CHECK-NOT: @llvm.objc.release ; CHECK: arraydestroy.done1: -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: ret void ; CHECK: } define void @test3a() { @@ -367,22 +367,22 @@ %objs = alloca [2 x i8*], align 16 %call1 = call i8* @returner() - %tmp0 = tail call i8* @objc_retainAutoreleasedReturnValue(i8* %call1) + %tmp0 = tail call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* %call1) %objs.begin = getelementptr inbounds [2 x i8*], [2 x i8*]* %objs, i64 0, i64 0 - tail call i8* @objc_retain(i8* %call1) + tail call i8* @llvm.objc.retain(i8* %call1) store i8* %call1, i8** %objs.begin, align 8 %objs.elt = getelementptr inbounds [2 x i8*], [2 x i8*]* %objs, i64 0, i64 1 - tail call i8* @objc_retain(i8* %call1) + tail call i8* @llvm.objc.retain(i8* %call1) store i8* %call1, i8** %objs.elt %call2 = call i8* @returner1() %call3 = call i8* @returner2() %keys.begin = getelementptr inbounds [2 x i8*], [2 x i8*]* %keys, i64 0, i64 0 - tail call i8* @objc_retain(i8* %call2) + tail call i8* @llvm.objc.retain(i8* %call2) store i8* %call2, i8** %keys.begin, align 8 %keys.elt = getelementptr inbounds [2 x i8*], [2 x i8*]* %keys, i64 0, i64 1 - tail call i8* @objc_retain(i8* %call3) + tail call i8* @llvm.objc.retain(i8* %call3) store i8* %call3, i8** %keys.elt %gep = getelementptr inbounds [2 x i8*], [2 x i8*]* %objs, i64 0, i64 2 @@ -392,7 +392,7 @@ %arraydestroy.elementPast = phi i8** [ %gep, %entry ], [ %arraydestroy.element, %arraydestroy.body ] %arraydestroy.element = getelementptr inbounds i8*, i8** %arraydestroy.elementPast, i64 -1 %destroy_tmp = load i8*, i8** %arraydestroy.element, align 8 - call void @objc_release(i8* %destroy_tmp), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %destroy_tmp), !clang.imprecise_release !0 %objs_ptr = getelementptr inbounds [2 x i8*], [2 x i8*]* %objs, i64 0, i64 0 %arraydestroy.cmp = icmp eq i8** %arraydestroy.element, %objs_ptr br i1 %arraydestroy.cmp, label %arraydestroy.done, label %arraydestroy.body @@ -405,13 +405,13 @@ %arraydestroy.elementPast1 = phi i8** [ %gep1, %arraydestroy.done ], [ %arraydestroy.element1, %arraydestroy.body1 ] %arraydestroy.element1 = getelementptr inbounds i8*, i8** %arraydestroy.elementPast1, i64 -1 %destroy_tmp1 = load i8*, i8** %arraydestroy.element1, align 8 - call void @objc_release(i8* %destroy_tmp1), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %destroy_tmp1), !clang.imprecise_release !0 %keys_ptr = getelementptr inbounds [2 x i8*], [2 x i8*]* %keys, i64 0, i64 0 %arraydestroy.cmp1 = icmp eq i8** %arraydestroy.element1, %keys_ptr br i1 %arraydestroy.cmp1, label %arraydestroy.done1, label %arraydestroy.body1 arraydestroy.done1: - call void @objc_release(i8* %call1), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %call1), !clang.imprecise_release !0 ret void } @@ -422,21 +422,21 @@ ; CHECK: define void @test3b() { ; CHECK: entry: -; CHECK: @objc_retainAutoreleasedReturnValue -; CHECK: @objc_retain -; CHECK: @objc_retain -; CHECK: @objc_retain -; CHECK: @objc_retain +; CHECK: @llvm.objc.retainAutoreleasedReturnValue +; CHECK: @llvm.objc.retain +; CHECK: @llvm.objc.retain +; CHECK: @llvm.objc.retain +; CHECK: @llvm.objc.retain ; CHECK: arraydestroy.body: -; CHECK: @objc_release -; CHECK-NOT: @objc_release +; CHECK: @llvm.objc.release +; CHECK-NOT: @llvm.objc.release ; CHECK: arraydestroy.done: -; CHECK-NOT: @objc_release +; CHECK-NOT: @llvm.objc.release ; CHECK: arraydestroy.body1: -; CHECK: @objc_release -; CHECK-NOT: @objc_release +; CHECK: @llvm.objc.release +; CHECK-NOT: @llvm.objc.release ; CHECK: arraydestroy.done1: -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: ret void ; CHECK: } define void @test3b() { @@ -445,23 +445,23 @@ %objs = alloca [2 x i8*], align 16 %call1 = call i8* @returner() - %tmp0 = tail call i8* @objc_retainAutoreleasedReturnValue(i8* %call1) - %tmp1 = tail call i8* @objc_retain(i8* %call1) + %tmp0 = tail call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* %call1) + %tmp1 = tail call i8* @llvm.objc.retain(i8* %call1) %objs.begin = getelementptr inbounds [2 x i8*], [2 x i8*]* %objs, i64 0, i64 0 - tail call i8* @objc_retain(i8* %call1) + tail call i8* @llvm.objc.retain(i8* %call1) store i8* %call1, i8** %objs.begin, align 8 %objs.elt = getelementptr inbounds [2 x i8*], [2 x i8*]* %objs, i64 0, i64 1 - tail call i8* @objc_retain(i8* %call1) + tail call i8* @llvm.objc.retain(i8* %call1) store i8* %call1, i8** %objs.elt %call2 = call i8* @returner1() %call3 = call i8* @returner2() %keys.begin = getelementptr inbounds [2 x i8*], [2 x i8*]* %keys, i64 0, i64 0 - tail call i8* @objc_retain(i8* %call2) + tail call i8* @llvm.objc.retain(i8* %call2) store i8* %call2, i8** %keys.begin, align 8 %keys.elt = getelementptr inbounds [2 x i8*], [2 x i8*]* %keys, i64 0, i64 1 - tail call i8* @objc_retain(i8* %call3) + tail call i8* @llvm.objc.retain(i8* %call3) store i8* %call3, i8** %keys.elt %gep = getelementptr inbounds [2 x i8*], [2 x i8*]* %objs, i64 0, i64 2 @@ -471,7 +471,7 @@ %arraydestroy.elementPast = phi i8** [ %gep, %entry ], [ %arraydestroy.element, %arraydestroy.body ] %arraydestroy.element = getelementptr inbounds i8*, i8** %arraydestroy.elementPast, i64 -1 %destroy_tmp = load i8*, i8** %arraydestroy.element, align 8 - call void @objc_release(i8* %destroy_tmp), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %destroy_tmp), !clang.imprecise_release !0 %objs_ptr = getelementptr inbounds [2 x i8*], [2 x i8*]* %objs, i64 0, i64 0 %arraydestroy.cmp = icmp eq i8** %arraydestroy.element, %objs_ptr br i1 %arraydestroy.cmp, label %arraydestroy.done, label %arraydestroy.body @@ -484,14 +484,14 @@ %arraydestroy.elementPast1 = phi i8** [ %gep1, %arraydestroy.done ], [ %arraydestroy.element1, %arraydestroy.body1 ] %arraydestroy.element1 = getelementptr inbounds i8*, i8** %arraydestroy.elementPast1, i64 -1 %destroy_tmp1 = load i8*, i8** %arraydestroy.element1, align 8 - call void @objc_release(i8* %destroy_tmp1), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %destroy_tmp1), !clang.imprecise_release !0 %keys_ptr = getelementptr inbounds [2 x i8*], [2 x i8*]* %keys, i64 0, i64 0 %arraydestroy.cmp1 = icmp eq i8** %arraydestroy.element1, %keys_ptr br i1 %arraydestroy.cmp1, label %arraydestroy.done1, label %arraydestroy.body1 arraydestroy.done1: - call void @objc_release(i8* %call1), !clang.imprecise_release !0 - call void @objc_release(i8* %call1), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %call1), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %call1), !clang.imprecise_release !0 ret void }