diff options
author | Pete Cooper <peter_cooper@apple.com> | 2018-12-18 20:32:49 +0000 |
---|---|---|
committer | Pete Cooper <peter_cooper@apple.com> | 2018-12-18 20:32:49 +0000 |
commit | be4f5711073613115c036206db0d9a45fd0632ab (patch) | |
tree | c6abfb8491cb76ee11f26515ef05293f4b9eaf67 /llvm/test/Transforms/ObjCARC/basic.ll | |
parent | 36a03526e99cc8861bb2fefc3d1336a2e3d894cf (diff) | |
download | bcm5719-llvm-be4f5711073613115c036206db0d9a45fd0632ab.tar.gz bcm5719-llvm-be4f5711073613115c036206db0d9a45fd0632ab.zip |
Change the objc ARC optimizer to use the new objc.* intrinsics
We're moving ARC optimisation and ARC emission in clang away from runtime methods
and towards intrinsics. This is the part which actually uses the intrinsics in the ARC
optimizer when both analyzing the existing calls and emitting new ones.
Differential Revision: https://reviews.llvm.org/D55348
Reviewers: ahatanak
llvm-svn: 349534
Diffstat (limited to 'llvm/test/Transforms/ObjCARC/basic.ll')
-rw-r--r-- | llvm/test/Transforms/ObjCARC/basic.ll | 1286 |
1 files changed, 643 insertions, 643 deletions
diff --git a/llvm/test/Transforms/ObjCARC/basic.ll b/llvm/test/Transforms/ObjCARC/basic.ll index 70b83b93138..6524dad4ae3 100644 --- a/llvm/test/Transforms/ObjCARC/basic.ll +++ b/llvm/test/Transforms/ObjCARC/basic.ll @@ -2,19 +2,19 @@ target datalayout = "e-p:64:64:64" -declare i8* @objc_retain(i8*) -declare i8* @objc_retainAutoreleasedReturnValue(i8*) -declare i8* @objc_unsafeClaimAutoreleasedReturnValue(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* @objc_retainedObject(i8*) -declare i8* @objc_unretainedObject(i8*) -declare i8* @objc_unretainedPointer(i8*) +declare i8* @llvm.objc.retain(i8*) +declare i8* @llvm.objc.retainAutoreleasedReturnValue(i8*) +declare i8* @llvm.objc.unsafeClaimAutoreleasedReturnValue(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* @llvm.objc.retainedObject(i8*) +declare i8* @llvm.objc.unretainedObject(i8*) +declare i8* @llvm.objc.unretainedPointer(i8*) declare void @use_pointer(i8*) declare void @callee() @@ -25,19 +25,19 @@ declare void @bar(i32 ()*) declare void @llvm.dbg.value(metadata, metadata, metadata) -declare i8* @objc_msgSend(i8*, i8*, ...) +declare i8* @llvm.objc.msgSend(i8*, i8*, ...) ; Simple retain+release pair deletion, with some intervening control ; flow and harmless instructions. ; CHECK: define void @test0_precise(i32* %x, i1 %p) [[NUW:#[0-9]+]] { -; CHECK: @objc_retain -; CHECK: @objc_release +; CHECK: @llvm.objc.retain +; CHECK: @llvm.objc.release ; CHECK: } define void @test0_precise(i32* %x, i1 %p) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind br i1 %p, label %t, label %f t: @@ -52,17 +52,17 @@ f: return: %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind + call void @llvm.objc.release(i8* %c) nounwind ret void } ; CHECK: define void @test0_imprecise(i32* %x, i1 %p) [[NUW]] { -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test0_imprecise(i32* %x, i1 %p) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind br i1 %p, label %t, label %f t: @@ -77,23 +77,23 @@ f: return: %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0 ret void } ; Like test0 but the release isn't always executed when the retain is, ; so the optimization is not safe. -; TODO: Make the objc_release's argument be %0. +; TODO: Make the llvm.objc.release's argument be %0. ; CHECK: define void @test1_precise(i32* %x, i1 %p, i1 %q) [[NUW]] { -; CHECK: @objc_retain(i8* %a) -; CHECK: @objc_release +; CHECK: @llvm.objc.retain(i8* %a) +; CHECK: @llvm.objc.release ; CHECK: } define void @test1_precise(i32* %x, i1 %p, i1 %q) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind br i1 %p, label %t, label %f t: @@ -109,7 +109,7 @@ f: return: %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind + call void @llvm.objc.release(i8* %c) nounwind ret void alt_return: @@ -117,13 +117,13 @@ alt_return: } ; CHECK: define void @test1_imprecise(i32* %x, i1 %p, i1 %q) [[NUW]] { -; CHECK: @objc_retain(i8* %a) -; CHECK: @objc_release +; CHECK: @llvm.objc.retain(i8* %a) +; CHECK: @llvm.objc.release ; CHECK: } define void @test1_imprecise(i32* %x, i1 %p, i1 %q) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind br i1 %p, label %t, label %f t: @@ -139,7 +139,7 @@ f: return: %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0 ret void alt_return: @@ -151,15 +151,15 @@ alt_return: ; CHECK: define void @test1b_precise(i8* %x, i1 %p, i1 %q) { ; CHECK: entry: -; CHECK: tail call i8* @objc_retain(i8* %x) [[NUW]] -; CHECK-NOT: @objc_ +; CHECK: tail call i8* @llvm.objc.retain(i8* %x) [[NUW]] +; CHECK-NOT: @llvm.objc. ; CHECK: if.end5: -; CHECK: tail call void @objc_release(i8* %x) [[NUW]] -; CHECK-NOT: @objc_ +; CHECK: tail call void @llvm.objc.release(i8* %x) [[NUW]] +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test1b_precise(i8* %x, i1 %p, i1 %q) { entry: - tail call i8* @objc_retain(i8* %x) nounwind + tail call i8* @llvm.objc.retain(i8* %x) nounwind br i1 %p, label %if.then, label %if.end if.then: ; preds = %entry @@ -174,21 +174,21 @@ if.then3: ; preds = %if.end br label %if.end5 if.end5: ; preds = %if.then3, %if.end - tail call void @objc_release(i8* %x) nounwind + tail call void @llvm.objc.release(i8* %x) nounwind ret void } ; CHECK-LABEL: define void @test1b_imprecise( ; CHECK: entry: -; CHECK: tail call i8* @objc_retain(i8* %x) [[NUW:#[0-9]+]] -; CHECK-NOT: @objc_ +; CHECK: tail call i8* @llvm.objc.retain(i8* %x) [[NUW:#[0-9]+]] +; CHECK-NOT: @llvm.objc. ; CHECK: if.end5: -; CHECK: tail call void @objc_release(i8* %x) [[NUW]], !clang.imprecise_release ![[RELEASE:[0-9]+]] -; CHECK-NOT: @objc_ +; CHECK: tail call void @llvm.objc.release(i8* %x) [[NUW]], !clang.imprecise_release ![[RELEASE:[0-9]+]] +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test1b_imprecise(i8* %x, i1 %p, i1 %q) { entry: - tail call i8* @objc_retain(i8* %x) nounwind + tail call i8* @llvm.objc.retain(i8* %x) nounwind br i1 %p, label %if.then, label %if.end if.then: ; preds = %entry @@ -203,7 +203,7 @@ if.then3: ; preds = %if.end br label %if.end5 if.end5: ; preds = %if.then3, %if.end - tail call void @objc_release(i8* %x) nounwind, !clang.imprecise_release !0 + tail call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0 ret void } @@ -212,13 +212,13 @@ if.end5: ; preds = %if.then3, %if.end ; so the optimization is not safe. ; CHECK-LABEL: define void @test2_precise( -; CHECK: @objc_retain(i8* %a) -; CHECK: @objc_release +; CHECK: @llvm.objc.retain(i8* %a) +; CHECK: @llvm.objc.release ; CHECK: } define void @test2_precise(i32* %x, i1 %p) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind br i1 %p, label %t, label %f t: @@ -236,18 +236,18 @@ f: return: %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind + call void @llvm.objc.release(i8* %c) nounwind ret void } ; CHECK-LABEL: define void @test2_imprecise( -; CHECK: @objc_retain(i8* %a) -; CHECK: @objc_release +; CHECK: @llvm.objc.retain(i8* %a) +; CHECK: @llvm.objc.release ; CHECK: } define void @test2_imprecise(i32* %x, i1 %p) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind br i1 %p, label %t, label %f t: @@ -265,7 +265,7 @@ f: return: %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0 ret void } @@ -275,18 +275,18 @@ return: ; TODO: For now, assume this can't happen. ; CHECK-LABEL: define void @test3_precise( -; TODO: @objc_retain(i8* %a) -; TODO: @objc_release +; TODO: @llvm.objc.retain(i8* %a) +; TODO: @llvm.objc.release ; CHECK: } define void @test3_precise(i32* %x, i1* %q) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind br label %loop loop: %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind + call void @llvm.objc.release(i8* %c) nounwind %j = load volatile i1, i1* %q br i1 %j, label %loop, label %return @@ -295,18 +295,18 @@ return: } ; CHECK-LABEL: define void @test3_imprecise( -; TODO: @objc_retain(i8* %a) -; TODO: @objc_release +; TODO: @llvm.objc.retain(i8* %a) +; TODO: @llvm.objc.release ; CHECK: } define void @test3_imprecise(i32* %x, i1* %q) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind br label %loop loop: %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0 %j = load volatile i1, i1* %q br i1 %j, label %loop, label %return @@ -321,8 +321,8 @@ return: ; so the optimization is not safe. ; CHECK-LABEL: define void @test4_precise( -; TODO: @objc_retain(i8* %a) -; TODO: @objc_release +; TODO: @llvm.objc.retain(i8* %a) +; TODO: @llvm.objc.release ; CHECK: } define void @test4_precise(i32* %x, i1* %q) nounwind { entry: @@ -330,19 +330,19 @@ entry: loop: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind %j = load volatile i1, i1* %q br i1 %j, label %loop, label %return return: %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind + call void @llvm.objc.release(i8* %c) nounwind ret void } ; CHECK-LABEL: define void @test4_imprecise( -; TODO: @objc_retain(i8* %a) -; TODO: @objc_release +; TODO: @llvm.objc.retain(i8* %a) +; TODO: @llvm.objc.release ; CHECK: } define void @test4_imprecise(i32* %x, i1* %q) nounwind { entry: @@ -350,13 +350,13 @@ entry: loop: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind %j = load volatile i1, i1* %q br i1 %j, label %loop, label %return return: %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0 ret void } @@ -365,34 +365,34 @@ return: ; so the optimization is not safe. ; CHECK-LABEL: define void @test5a( -; CHECK: @objc_retain(i8* -; CHECK: @objc_release +; CHECK: @llvm.objc.retain(i8* +; CHECK: @llvm.objc.release ; CHECK: } define void @test5a(i32* %x, i1 %q, i8* %y) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind %s = select i1 %q, i8* %y, i8* %0 call void @use_pointer(i8* %s) store i32 7, i32* %x %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind + call void @llvm.objc.release(i8* %c) nounwind ret void } ; CHECK-LABEL: define void @test5b( -; CHECK: @objc_retain(i8* -; CHECK: @objc_release +; CHECK: @llvm.objc.retain(i8* +; CHECK: @llvm.objc.release ; CHECK: } define void @test5b(i32* %x, i1 %q, i8* %y) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind %s = select i1 %q, i8* %y, i8* %0 call void @use_pointer(i8* %s) store i32 7, i32* %x %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0 ret void } @@ -402,17 +402,17 @@ entry: ; CHECK-LABEL: define void @test6a( ; CHECK: entry: -; CHECK: tail call i8* @objc_retain( +; CHECK: tail call i8* @llvm.objc.retain ; CHECK: t: -; CHECK: call void @objc_release( +; CHECK: call void @llvm.objc.release ; CHECK: f: -; CHECK: call void @objc_release( +; CHECK: call void @llvm.objc.release ; CHECK: return: ; CHECK: } define void @test6a(i32* %x, i1 %p) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind br i1 %p, label %t, label %f t: @@ -420,14 +420,14 @@ t: %b = bitcast i32* %x to float* store float 2.0, float* %b %ct = bitcast i32* %x to i8* - call void @objc_release(i8* %ct) nounwind + call void @llvm.objc.release(i8* %ct) nounwind br label %return f: store i32 7, i32* %x call void @callee() %cf = bitcast i32* %x to i8* - call void @objc_release(i8* %cf) nounwind + call void @llvm.objc.release(i8* %cf) nounwind br label %return return: @@ -435,12 +435,12 @@ return: } ; CHECK-LABEL: define void @test6b( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test6b(i32* %x, i1 %p) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind br i1 %p, label %t, label %f t: @@ -448,14 +448,14 @@ t: %b = bitcast i32* %x to float* store float 2.0, float* %b %ct = bitcast i32* %x to i8* - call void @objc_release(i8* %ct) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %ct) nounwind, !clang.imprecise_release !0 br label %return f: store i32 7, i32* %x call void @callee() %cf = bitcast i32* %x to i8* - call void @objc_release(i8* %cf) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %cf) nounwind, !clang.imprecise_release !0 br label %return return: @@ -464,17 +464,17 @@ return: ; CHECK-LABEL: define void @test6c( ; CHECK: entry: -; CHECK: tail call i8* @objc_retain( +; CHECK: tail call i8* @llvm.objc.retain ; CHECK: t: -; CHECK: call void @objc_release( +; CHECK: call void @llvm.objc.release ; CHECK: f: -; CHECK: call void @objc_release( +; CHECK: call void @llvm.objc.release ; CHECK: return: ; CHECK: } define void @test6c(i32* %x, i1 %p) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind br i1 %p, label %t, label %f t: @@ -482,14 +482,14 @@ t: %b = bitcast i32* %x to float* store float 2.0, float* %b %ct = bitcast i32* %x to i8* - call void @objc_release(i8* %ct) nounwind + call void @llvm.objc.release(i8* %ct) nounwind br label %return f: store i32 7, i32* %x call void @callee() %cf = bitcast i32* %x to i8* - call void @objc_release(i8* %cf) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %cf) nounwind, !clang.imprecise_release !0 br label %return return: @@ -498,17 +498,17 @@ return: ; CHECK-LABEL: define void @test6d( ; CHECK: entry: -; CHECK: tail call i8* @objc_retain( +; CHECK: tail call i8* @llvm.objc.retain ; CHECK: t: -; CHECK: call void @objc_release( +; CHECK: call void @llvm.objc.release ; CHECK: f: -; CHECK: call void @objc_release( +; CHECK: call void @llvm.objc.release ; CHECK: return: ; CHECK: } define void @test6d(i32* %x, i1 %p) nounwind { entry: %a = bitcast i32* %x to i8* - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind br i1 %p, label %t, label %f t: @@ -516,14 +516,14 @@ t: %b = bitcast i32* %x to float* store float 2.0, float* %b %ct = bitcast i32* %x to i8* - call void @objc_release(i8* %ct) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %ct) nounwind, !clang.imprecise_release !0 br label %return f: store i32 7, i32* %x call void @callee() %cf = bitcast i32* %x to i8* - call void @objc_release(i8* %cf) nounwind + call void @llvm.objc.release(i8* %cf) nounwind br label %return return: @@ -536,13 +536,13 @@ return: ; CHECK-LABEL: define void @test7( ; CHECK: entry: -; CHECK-NOT: objc_ +; CHECK-NOT: llvm.objc. ; CHECK: t: -; CHECK: call i8* @objc_retain +; CHECK: call i8* @llvm.objc.retain ; CHECK: f: -; CHECK: call i8* @objc_retain +; CHECK: call i8* @llvm.objc.retain ; CHECK: return: -; CHECK: call void @objc_release +; CHECK: call void @llvm.objc.release ; CHECK: } define void @test7(i32* %x, i1 %p) nounwind { entry: @@ -550,26 +550,26 @@ entry: br i1 %p, label %t, label %f t: - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind store i8 3, i8* %a %b = bitcast i32* %x to float* store float 2.0, float* %b br label %return f: - %1 = call i8* @objc_retain(i8* %a) nounwind + %1 = call i8* @llvm.objc.retain(i8* %a) nounwind store i32 7, i32* %x call void @callee() br label %return return: %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind + call void @llvm.objc.release(i8* %c) nounwind ret void } ; CHECK-LABEL: define void @test7b( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test7b(i32* %x, i1 %p) nounwind { entry: @@ -577,21 +577,21 @@ entry: br i1 %p, label %t, label %f t: - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind store i8 3, i8* %a %b = bitcast i32* %x to float* store float 2.0, float* %b br label %return f: - %1 = call i8* @objc_retain(i8* %a) nounwind + %1 = call i8* @llvm.objc.retain(i8* %a) nounwind store i32 7, i32* %x call void @callee() br label %return return: %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %c) nounwind, !clang.imprecise_release !0 ret void } @@ -599,11 +599,11 @@ return: ; CHECK-LABEL: define void @test7c( ; CHECK: t: -; CHECK: call i8* @objc_retainBlock +; CHECK: call i8* @llvm.objc.retainBlock ; CHECK: f: -; CHECK: call i8* @objc_retain +; CHECK: call i8* @llvm.objc.retain ; CHECK: return: -; CHECK: call void @objc_release +; CHECK: call void @llvm.objc.release ; CHECK: } define void @test7c(i32* %x, i1 %p) nounwind { entry: @@ -611,21 +611,21 @@ entry: br i1 %p, label %t, label %f t: - %0 = call i8* @objc_retainBlock(i8* %a) nounwind + %0 = call i8* @llvm.objc.retainBlock(i8* %a) nounwind store i8 3, i8* %a %b = bitcast i32* %x to float* store float 2.0, float* %b br label %return f: - %1 = call i8* @objc_retain(i8* %a) nounwind + %1 = call i8* @llvm.objc.retain(i8* %a) nounwind store i32 7, i32* %x call void @callee() br label %return return: %c = bitcast i32* %x to i8* - call void @objc_release(i8* %c) nounwind + call void @llvm.objc.release(i8* %c) nounwind ret void } @@ -635,14 +635,14 @@ return: ; CHECK-LABEL: define void @test8a( ; CHECK: entry: ; CHECK: t: -; CHECK: @objc_retain +; CHECK: @llvm.objc.retain ; CHECK: f: -; CHECK: @objc_retain +; CHECK: @llvm.objc.retain ; CHECK: mid: ; CHECK: u: -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: g: -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: return: ; CHECK: } define void @test8a(i32* %x, i1 %p, i1 %q) nounwind { @@ -651,14 +651,14 @@ entry: br i1 %p, label %t, label %f t: - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind store i8 3, i8* %a %b = bitcast i32* %x to float* store float 2.0, float* %b br label %mid f: - %1 = call i8* @objc_retain(i8* %a) nounwind + %1 = call i8* @llvm.objc.retain(i8* %a) nounwind store i32 7, i32* %x br label %mid @@ -668,12 +668,12 @@ mid: u: call void @callee() %cu = bitcast i32* %x to i8* - call void @objc_release(i8* %cu) nounwind + call void @llvm.objc.release(i8* %cu) nounwind br label %return g: %cg = bitcast i32* %x to i8* - call void @objc_release(i8* %cg) nounwind + call void @llvm.objc.release(i8* %cg) nounwind br label %return return: @@ -681,7 +681,7 @@ return: } ; CHECK-LABEL: define void @test8b( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test8b(i32* %x, i1 %p, i1 %q) nounwind { entry: @@ -689,14 +689,14 @@ entry: br i1 %p, label %t, label %f t: - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind store i8 3, i8* %a %b = bitcast i32* %x to float* store float 2.0, float* %b br label %mid f: - %1 = call i8* @objc_retain(i8* %a) nounwind + %1 = call i8* @llvm.objc.retain(i8* %a) nounwind store i32 7, i32* %x br label %mid @@ -706,12 +706,12 @@ mid: u: call void @callee() %cu = bitcast i32* %x to i8* - call void @objc_release(i8* %cu) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %cu) nounwind, !clang.imprecise_release !0 br label %return g: %cg = bitcast i32* %x to i8* - call void @objc_release(i8* %cg) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %cg) nounwind, !clang.imprecise_release !0 br label %return return: @@ -721,14 +721,14 @@ return: ; CHECK-LABEL: define void @test8c( ; CHECK: entry: ; CHECK: t: -; CHECK: @objc_retain +; CHECK: @llvm.objc.retain ; CHECK: f: -; CHECK: @objc_retain +; CHECK: @llvm.objc.retain ; CHECK: mid: ; CHECK: u: -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: g: -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: return: ; CHECK: } define void @test8c(i32* %x, i1 %p, i1 %q) nounwind { @@ -737,14 +737,14 @@ entry: br i1 %p, label %t, label %f t: - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind store i8 3, i8* %a %b = bitcast i32* %x to float* store float 2.0, float* %b br label %mid f: - %1 = call i8* @objc_retain(i8* %a) nounwind + %1 = call i8* @llvm.objc.retain(i8* %a) nounwind store i32 7, i32* %x br label %mid @@ -754,12 +754,12 @@ mid: u: call void @callee() %cu = bitcast i32* %x to i8* - call void @objc_release(i8* %cu) nounwind + call void @llvm.objc.release(i8* %cu) nounwind br label %return g: %cg = bitcast i32* %x to i8* - call void @objc_release(i8* %cg) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %cg) nounwind, !clang.imprecise_release !0 br label %return return: @@ -769,14 +769,14 @@ return: ; CHECK-LABEL: define void @test8d( ; CHECK: entry: ; CHECK: t: -; CHECK: @objc_retain +; CHECK: @llvm.objc.retain ; CHECK: f: -; CHECK: @objc_retain +; CHECK: @llvm.objc.retain ; CHECK: mid: ; CHECK: u: -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: g: -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: return: ; CHECK: } define void @test8d(i32* %x, i1 %p, i1 %q) nounwind { @@ -785,14 +785,14 @@ entry: br i1 %p, label %t, label %f t: - %0 = call i8* @objc_retain(i8* %a) nounwind + %0 = call i8* @llvm.objc.retain(i8* %a) nounwind store i8 3, i8* %a %b = bitcast i32* %x to float* store float 2.0, float* %b br label %mid f: - %1 = call i8* @objc_retain(i8* %a) nounwind + %1 = call i8* @llvm.objc.retain(i8* %a) nounwind store i32 7, i32* %x br label %mid @@ -802,12 +802,12 @@ mid: u: call void @callee() %cu = bitcast i32* %x to i8* - call void @objc_release(i8* %cu) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %cu) nounwind, !clang.imprecise_release !0 br label %return g: %cg = bitcast i32* %x to i8* - call void @objc_release(i8* %cg) nounwind + call void @llvm.objc.release(i8* %cg) nounwind br label %return return: @@ -817,58 +817,58 @@ return: ; Trivial retain+release pair deletion. ; CHECK-LABEL: define void @test9( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test9(i8* %x) nounwind { entry: - %0 = call i8* @objc_retain(i8* %x) nounwind - call void @objc_release(i8* %0) nounwind + %0 = call i8* @llvm.objc.retain(i8* %x) nounwind + call void @llvm.objc.release(i8* %0) nounwind ret void } ; Retain+release pair, but on an unknown pointer relationship. Don't delete! ; CHECK-LABEL: define void @test9b( -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_release(i8* %s) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.release(i8* %s) ; CHECK: } define void @test9b(i8* %x, i1 %j, i8* %p) nounwind { entry: - %0 = call i8* @objc_retain(i8* %x) nounwind + %0 = call i8* @llvm.objc.retain(i8* %x) nounwind %s = select i1 %j, i8* %x, i8* %p - call void @objc_release(i8* %s) nounwind + call void @llvm.objc.release(i8* %s) nounwind ret void } ; Trivial retain+release pair with intervening calls - don't delete! ; CHECK-LABEL: define void @test10( -; CHECK: @objc_retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) ; CHECK: @callee ; CHECK: @use_pointer -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: } define void @test10(i8* %x) nounwind { entry: - %0 = call i8* @objc_retain(i8* %x) nounwind + %0 = call i8* @llvm.objc.retain(i8* %x) nounwind call void @callee() call void @use_pointer(i8* %x) - call void @objc_release(i8* %0) nounwind + call void @llvm.objc.release(i8* %0) nounwind ret void } ; Trivial retain+autoreleaserelease pair. Don't delete! -; Also, add a tail keyword, since objc_retain can never be passed +; Also, add a tail keyword, since llvm.objc.retain can never be passed ; a stack argument. ; CHECK-LABEL: define void @test11( -; CHECK: tail call i8* @objc_retain(i8* %x) [[NUW]] -; CHECK: call i8* @objc_autorelease(i8* %0) [[NUW]] +; CHECK: tail call i8* @llvm.objc.retain(i8* %x) [[NUW]] +; CHECK: call i8* @llvm.objc.autorelease(i8* %0) [[NUW]] ; CHECK: } define void @test11(i8* %x) nounwind { entry: - %0 = call i8* @objc_retain(i8* %x) nounwind - call i8* @objc_autorelease(i8* %0) nounwind + %0 = call i8* @llvm.objc.retain(i8* %x) nounwind + call i8* @llvm.objc.autorelease(i8* %0) nounwind call void @use_pointer(i8* %x) ret void } @@ -881,8 +881,8 @@ entry: ; CHECK: } define void @test11a(i8* %x) nounwind { entry: - %0 = call i8* @objc_retain(i8* %x) nounwind - call i8* @objc_autorelease(i8* %0) nounwind + %0 = call i8* @llvm.objc.retain(i8* %x) nounwind + call i8* @llvm.objc.autorelease(i8* %0) nounwind ret void } @@ -891,13 +891,13 @@ entry: ; want it to be in the autorelease pool. ; CHECK-LABEL: define i8* @test11b( -; CHECK: tail call i8* @objc_retain(i8* %x) [[NUW]] -; CHECK: call i8* @objc_autorelease(i8* %0) [[NUW]] +; CHECK: tail call i8* @llvm.objc.retain(i8* %x) [[NUW]] +; CHECK: call i8* @llvm.objc.autorelease(i8* %0) [[NUW]] ; CHECK: } define i8* @test11b(i8* %x) nounwind { entry: - %0 = call i8* @objc_retain(i8* %x) nounwind - call i8* @objc_autorelease(i8* %0) nounwind + %0 = call i8* @llvm.objc.retain(i8* %x) nounwind + call i8* @llvm.objc.autorelease(i8* %0) nounwind ret i8* %x } @@ -906,34 +906,34 @@ entry: ; CHECK-LABEL: define void @test12( ; CHECK-NEXT: entry: -; CHECK-NEXT: @objc_retain(i8* %x) -; CHECK-NEXT: @objc_retain -; CHECK: @objc_release +; CHECK-NEXT: @llvm.objc.retain(i8* %x) +; CHECK-NEXT: @llvm.objc.retain +; CHECK: @llvm.objc.release ; CHECK: } define void @test12(i8* %x, i64 %n) { entry: - call i8* @objc_retain(i8* %x) nounwind - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind call void @use_pointer(i8* %x) call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind ret void } ; Trivial retain,autorelease pair. Don't delete! ; CHECK-LABEL: define void @test13( -; CHECK: tail call i8* @objc_retain(i8* %x) [[NUW]] -; CHECK: tail call i8* @objc_retain(i8* %x) [[NUW]] +; CHECK: tail call i8* @llvm.objc.retain(i8* %x) [[NUW]] +; CHECK: tail call i8* @llvm.objc.retain(i8* %x) [[NUW]] ; CHECK: @use_pointer(i8* %x) -; CHECK: call i8* @objc_autorelease(i8* %x) [[NUW]] +; CHECK: call i8* @llvm.objc.autorelease(i8* %x) [[NUW]] ; CHECK: } define void @test13(i8* %x, i64 %n) { entry: - call i8* @objc_retain(i8* %x) nounwind - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind call void @use_pointer(i8* %x) - call i8* @objc_autorelease(i8* %x) nounwind + call i8* @llvm.objc.autorelease(i8* %x) nounwind ret void } @@ -941,22 +941,22 @@ entry: ; CHECK-LABEL: define void @test13b( ; CHECK-NEXT: entry: -; CHECK-NEXT: @objc_retain(i8* %x) +; CHECK-NEXT: @llvm.objc.retain(i8* %x) ; CHECK-NEXT: @use_pointer ; CHECK-NEXT: @use_pointer ; CHECK-NEXT: @use_pointer -; CHECK-NEXT: @objc_release +; CHECK-NEXT: @llvm.objc.release ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test13b(i8* %x, i64 %n) { entry: - call i8* @objc_retain(i8* %x) nounwind - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind call void @use_pointer(i8* %x) call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind ret void } @@ -964,20 +964,20 @@ entry: ; autoreleasePoolPop in the way. ; CHECK-LABEL: define void @test13c( -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc_autoreleasePoolPop -; CHECK: @objc_retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc.autoreleasePoolPop +; CHECK: @llvm.objc.retain(i8* %x) ; CHECK: @use_pointer -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: } define void @test13c(i8* %x, i64 %n) { entry: - call i8* @objc_retain(i8* %x) nounwind - call void @objc_autoreleasePoolPop(i8* undef) - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind + call void @llvm.objc.autoreleasePoolPop(i8* undef) + call i8* @llvm.objc.retain(i8* %x) nounwind call void @use_pointer(i8* %x) call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind ret void } @@ -986,24 +986,24 @@ entry: ; CHECK-LABEL: define void @test13d( ; CHECK-NEXT: entry: -; CHECK-NEXT: @objc_retain(i8* %x) -; CHECK-NEXT: @objc_autoreleasePoolPush +; CHECK-NEXT: @llvm.objc.retain(i8* %x) +; CHECK-NEXT: @llvm.objc.autoreleasePoolPush ; CHECK-NEXT: @use_pointer ; CHECK-NEXT: @use_pointer ; CHECK-NEXT: @use_pointer -; CHECK-NEXT: @objc_release +; CHECK-NEXT: @llvm.objc.release ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test13d(i8* %x, i64 %n) { entry: - call i8* @objc_retain(i8* %x) nounwind - call i8* @objc_autoreleasePoolPush() - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind + call i8* @llvm.objc.autoreleasePoolPush() + call i8* @llvm.objc.retain(i8* %x) nounwind call void @use_pointer(i8* %x) call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind ret void } @@ -1013,20 +1013,20 @@ entry: ; CHECK-LABEL: define void @test14( ; CHECK-NEXT: entry: -; CHECK-NEXT: @objc_retain +; CHECK-NEXT: @llvm.objc.retain ; CHECK-NEXT: @use_pointer ; CHECK-NEXT: @use_pointer -; CHECK-NEXT: @objc_release -; CHECK-NEXT: @objc_release +; CHECK-NEXT: @llvm.objc.release +; CHECK-NEXT: @llvm.objc.release ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test14(i8* %x, i64 %n) { entry: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind call void @use_pointer(i8* %x) call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind ret void } @@ -1035,18 +1035,18 @@ entry: ; CHECK-LABEL: define void @test15( ; CHECK-NEXT: entry: -; CHECK-NEXT: @objc_retain(i8* %x) +; CHECK-NEXT: @llvm.objc.retain(i8* %x) ; CHECK-NEXT: @use_pointer -; CHECK-NEXT: @objc_autorelease(i8* %x) -; CHECK-NEXT: @objc_release +; CHECK-NEXT: @llvm.objc.autorelease(i8* %x) +; CHECK-NEXT: @llvm.objc.release ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test15(i8* %x, i64 %n) { entry: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind call void @use_pointer(i8* %x) - call i8* @objc_autorelease(i8* %x) nounwind - call void @objc_release(i8* %x) nounwind + call i8* @llvm.objc.autorelease(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind ret void } @@ -1055,52 +1055,52 @@ entry: ; CHECK-LABEL: define void @test15b( ; CHECK-NEXT: entry: -; CHECK-NEXT: @objc_retain -; CHECK-NEXT: @objc_autorelease -; CHECK-NEXT: @objc_release +; CHECK-NEXT: @llvm.objc.retain +; CHECK-NEXT: @llvm.objc.autorelease +; CHECK-NEXT: @llvm.objc.release ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test15b(i8* %x, i64 %n) { entry: - call i8* @objc_retain(i8* %x) nounwind - call i8* @objc_autorelease(i8* %x) nounwind - call void @objc_release(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind + call i8* @llvm.objc.autorelease(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind ret void } ; CHECK-LABEL: define void @test15c( ; CHECK-NEXT: entry: -; CHECK-NEXT: @objc_autorelease +; CHECK-NEXT: @llvm.objc.autorelease ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test15c(i8* %x, i64 %n) { entry: - call i8* @objc_retain(i8* %x) nounwind - call i8* @objc_autorelease(i8* %x) nounwind - call void @objc_release(i8* %x) nounwind, !clang.imprecise_release !0 + call i8* @llvm.objc.retain(i8* %x) nounwind + call i8* @llvm.objc.autorelease(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0 ret void } ; Retain+release pairs in diamonds, all dominated by a retain. ; CHECK-LABEL: define void @test16a( -; CHECK: @objc_retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) ; CHECK-NOT: @objc ; CHECK: purple: ; CHECK: @use_pointer -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: } define void @test16a(i1 %a, i1 %b, i8* %x) { entry: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind br i1 %a, label %red, label %orange red: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind br label %yellow orange: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind br label %yellow yellow: @@ -1109,38 +1109,38 @@ yellow: br i1 %b, label %green, label %blue green: - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind br label %purple blue: - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind br label %purple purple: call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind ret void } ; CHECK-LABEL: define void @test16b( -; CHECK: @objc_retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) ; CHECK-NOT: @objc ; CHECK: purple: ; CHECK-NEXT: @use_pointer ; CHECK-NEXT: @use_pointer -; CHECK-NEXT: @objc_release +; CHECK-NEXT: @llvm.objc.release ; CHECK: } define void @test16b(i1 %a, i1 %b, i8* %x) { entry: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind br i1 %a, label %red, label %orange red: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind br label %yellow orange: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind br label %yellow yellow: @@ -1149,38 +1149,38 @@ yellow: br i1 %b, label %green, label %blue green: - call void @objc_release(i8* %x) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0 br label %purple blue: - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind br label %purple purple: call void @use_pointer(i8* %x) call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind ret void } ; CHECK-LABEL: define void @test16c( -; CHECK: @objc_retain(i8* %x) +; CHECK: @llvm.objc.retain(i8* %x) ; CHECK-NOT: @objc ; CHECK: purple: ; CHECK: @use_pointer -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: } define void @test16c(i1 %a, i1 %b, i8* %x) { entry: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind br i1 %a, label %red, label %orange red: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind br label %yellow orange: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind br label %yellow yellow: @@ -1189,34 +1189,34 @@ yellow: br i1 %b, label %green, label %blue green: - call void @objc_release(i8* %x) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0 br label %purple blue: - call void @objc_release(i8* %x) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0 br label %purple purple: call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0 ret void } ; CHECK-LABEL: define void @test16d( -; CHECK: @objc_retain(i8* %x) -; CHECK: @objc +; CHECK: @llvm.objc.retain(i8* %x) +; CHECK: @llvm.objc ; CHECK: } define void @test16d(i1 %a, i1 %b, i8* %x) { entry: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind br i1 %a, label %red, label %orange red: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind br label %yellow orange: - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind br label %yellow yellow: @@ -1225,11 +1225,11 @@ yellow: br i1 %b, label %green, label %blue green: - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind br label %purple blue: - call void @objc_release(i8* %x) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0 br label %purple purple: @@ -1239,24 +1239,24 @@ purple: ; Delete no-ops. ; CHECK-LABEL: define void @test18( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test18() { - call i8* @objc_retain(i8* null) - call void @objc_release(i8* null) - call i8* @objc_autorelease(i8* null) + call i8* @llvm.objc.retain(i8* null) + call void @llvm.objc.release(i8* null) + call i8* @llvm.objc.autorelease(i8* null) ret void } ; Delete no-ops where undef can be assumed to be null. ; CHECK-LABEL: define void @test18b( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test18b() { - call i8* @objc_retain(i8* undef) - call void @objc_release(i8* undef) - call i8* @objc_autorelease(i8* undef) + call i8* @llvm.objc.retain(i8* undef) + call void @llvm.objc.release(i8* undef) + call i8* @llvm.objc.autorelease(i8* undef) ret void } @@ -1266,34 +1266,34 @@ define void @test18b() { ; CHECK: define void @test19(i32* %y) { ; CHECK: %z = bitcast i32* %y to i8* ; CHECK: %0 = bitcast i32* %y to i8* -; CHECK: %1 = tail call i8* @objc_retain(i8* %0) +; CHECK: %1 = tail call i8* @llvm.objc.retain(i8* %0) ; CHECK: call void @use_pointer(i8* %z) ; CHECK: call void @use_pointer(i8* %z) ; CHECK: %2 = bitcast i32* %y to i8* -; CHECK: call void @objc_release(i8* %2) +; CHECK: call void @llvm.objc.release(i8* %2) ; CHECK: ret void ; CHECK: } define void @test19(i32* %y) { entry: %x = bitcast i32* %y to i8* - %0 = call i8* @objc_retain(i8* %x) nounwind + %0 = call i8* @llvm.objc.retain(i8* %x) nounwind %z = bitcast i32* %y to i8* call void @use_pointer(i8* %z) call void @use_pointer(i8* %z) - call void @objc_release(i8* %x) + call void @llvm.objc.release(i8* %x) ret void } ; Bitcast insertion ; CHECK-LABEL: define void @test20( -; CHECK: %tmp1 = tail call i8* @objc_retain(i8* %tmp) [[NUW]] +; CHECK: %tmp1 = tail call i8* @llvm.objc.retain(i8* %tmp) [[NUW]] ; CHECK-NEXT: invoke ; CHECK: } define void @test20(double* %self) personality i32 (...)* @__gxx_personality_v0 { if.then12: %tmp = bitcast double* %self to i8* - %tmp1 = call i8* @objc_retain(i8* %tmp) nounwind + %tmp1 = call i8* @llvm.objc.retain(i8* %tmp) nounwind invoke void @invokee() to label %invoke.cont23 unwind label %lpad20 @@ -1321,8 +1321,8 @@ if.end: ; preds = %invoke.cont23 define i8* @test21() { entry: %call = call i8* @returner() - %0 = call i8* @objc_retain(i8* %call) nounwind - %1 = call i8* @objc_autorelease(i8* %0) nounwind + %0 = call i8* @llvm.objc.retain(i8* %call) nounwind + %1 = call i8* @llvm.objc.autorelease(i8* %0) nounwind ret i8* %1 } @@ -1331,10 +1331,10 @@ entry: ; CHECK-LABEL: define void @test22( ; CHECK: B: ; CHECK: %1 = bitcast double* %p to i8* -; CHECK: call void @objc_release(i8* %1) +; CHECK: call void @llvm.objc.release(i8* %1) ; CHECK: br label %C ; CHECK: C: ; preds = %B, %A -; CHECK-NOT: @objc_release +; CHECK-NOT: @llvm.objc.release ; CHECK: } define void @test22(double* %p, i1 %a) { br i1 %a, label %A, label %B @@ -1345,16 +1345,16 @@ B: C: %h = phi double* [ null, %A ], [ %p, %B ] %c = bitcast double* %h to i8* - call void @objc_release(i8* %c), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %c), !clang.imprecise_release !0 ret void } -; Do not move an objc_release that doesn't have the clang.imprecise_release tag. +; Do not move an llvm.objc.release that doesn't have the clang.imprecise_release tag. ; CHECK-LABEL: define void @test22_precise( ; CHECK: %[[P0:.*]] = phi double* ; CHECK: %[[V0:.*]] = bitcast double* %[[P0]] to i8* -; CHECK: call void @objc_release(i8* %[[V0]]) +; CHECK: call void @llvm.objc.release(i8* %[[V0]]) ; CHECK: ret void define void @test22_precise(double* %p, i1 %a) { br i1 %a, label %A, label %B @@ -1365,21 +1365,21 @@ B: C: %h = phi double* [ null, %A ], [ %p, %B ] %c = bitcast double* %h to i8* - call void @objc_release(i8* %c) + call void @llvm.objc.release(i8* %c) ret void } ; Any call can decrement a retain count. ; CHECK-LABEL: define void @test24( -; CHECK: @objc_retain(i8* %a) -; CHECK: @objc_release +; CHECK: @llvm.objc.retain(i8* %a) +; CHECK: @llvm.objc.release ; CHECK: } define void @test24(i8* %r, i8* %a) { - call i8* @objc_retain(i8* %a) + call i8* @llvm.objc.retain(i8* %a) call void @use_pointer(i8* %r) %q = load i8, i8* %a - call void @objc_release(i8* %a) + call void @llvm.objc.release(i8* %a) ret void } @@ -1388,14 +1388,14 @@ define void @test24(i8* %r, i8* %a) { ; CHECK-LABEL: define void @test25( ; CHECK: entry: -; CHECK: call i8* @objc_retain(i8* %p) +; CHECK: call i8* @llvm.objc.retain(i8* %p) ; CHECK: true: ; CHECK: done: -; CHECK: call void @objc_release(i8* %p) +; CHECK: call void @llvm.objc.release(i8* %p) ; CHECK: } define void @test25(i8* %p, i1 %x) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) call void @callee() br i1 %x, label %true, label %done @@ -1404,7 +1404,7 @@ true: br label %done done: - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } @@ -1413,14 +1413,14 @@ done: ; CHECK-LABEL: define void @test26( ; CHECK: entry: -; CHECK: call i8* @objc_retain(i8* %p) +; CHECK: call i8* @llvm.objc.retain(i8* %p) ; CHECK: true: ; CHECK: done: -; CHECK: call void @objc_release(i8* %p) +; CHECK: call void @llvm.objc.release(i8* %p) ; CHECK: } define void @test26(i8* %p, i1 %x) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) br i1 %x, label %true, label %done true: @@ -1429,7 +1429,7 @@ true: done: store i8 0, i8* %p - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } @@ -1437,15 +1437,15 @@ done: ; CHECK-LABEL: define void @test27( ; CHECK: entry: -; CHECK: call i8* @objc_retain(i8* %p) +; CHECK: call i8* @llvm.objc.retain(i8* %p) ; CHECK: loop: -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: done: -; CHECK: call void @objc_release +; CHECK: call void @llvm.objc.release ; CHECK: } define void @test27(i8* %p, i1 %x, i1 %y) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) br i1 %x, label %loop, label %done loop: @@ -1454,25 +1454,25 @@ loop: br i1 %y, label %done, label %loop done: - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } ; Trivial code motion case: Triangle. ; CHECK-LABEL: define void @test28( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: true: -; CHECK: call i8* @objc_retain( +; CHECK: call i8* @llvm.objc.retain ; CHECK: call void @callee() ; CHECK: store -; CHECK: call void @objc_release +; CHECK: call void @llvm.objc.release ; CHECK: done: -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test28(i8* %p, i1 %x) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) br i1 %x, label %true, label %done true: @@ -1481,7 +1481,7 @@ true: br label %done done: - call void @objc_release(i8* %p), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0 ret void } @@ -1489,19 +1489,19 @@ done: ; unrelated memory references! ; CHECK-LABEL: define void @test28b( -; CHECK: call i8* @objc_retain( +; CHECK: call i8* @llvm.objc.retain ; CHECK: true: -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: call void @callee() -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: store -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: done: -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: } define void @test28b(i8* %p, i1 %x, i8* noalias %t) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) br i1 %x, label %true, label %done true: @@ -1511,7 +1511,7 @@ true: done: store i8 0, i8* %t - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } @@ -1519,18 +1519,18 @@ done: ; unrelated memory references! And preserve the metadata. ; CHECK-LABEL: define void @test28c( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: true: -; CHECK: call i8* @objc_retain( +; CHECK: call i8* @llvm.objc.retain ; CHECK: call void @callee() ; CHECK: store -; CHECK: call void @objc_release(i8* %p) [[NUW]], !clang.imprecise_release +; CHECK: call void @llvm.objc.release(i8* %p) [[NUW]], !clang.imprecise_release ; CHECK: done: -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test28c(i8* %p, i1 %x, i8* noalias %t) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) br i1 %x, label %true, label %done true: @@ -1540,28 +1540,28 @@ true: done: store i8 0, i8* %t - call void @objc_release(i8* %p), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0 ret void } ; Like test28. but with two releases. ; CHECK-LABEL: define void @test29( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: true: -; CHECK: call i8* @objc_retain( +; CHECK: call i8* @llvm.objc.retain ; CHECK: call void @callee() ; CHECK: store -; CHECK: call void @objc_release -; CHECK-NOT: @objc_release +; CHECK: call void @llvm.objc.release +; CHECK-NOT: @llvm.objc.release ; CHECK: done: -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: ohno: -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test29(i8* %p, i1 %x, i1 %y) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) br i1 %x, label %true, label %done true: @@ -1570,11 +1570,11 @@ true: br i1 %y, label %done, label %ohno done: - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void ohno: - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } @@ -1582,23 +1582,23 @@ ohno: ; with an extra release. ; CHECK-LABEL: define void @test30( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: true: -; CHECK: call i8* @objc_retain( +; CHECK: call i8* @llvm.objc.retain ; CHECK: call void @callee() ; CHECK: store -; CHECK: call void @objc_release -; CHECK-NOT: @objc_release +; CHECK: call void @llvm.objc.release +; CHECK-NOT: @llvm.objc.release ; CHECK: false: -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: done: -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: ohno: -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test30(i8* %p, i1 %x, i1 %y, i1 %z) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) br i1 %x, label %true, label %false true: @@ -1610,58 +1610,58 @@ false: br i1 %z, label %done, label %ohno done: - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void ohno: - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } ; Basic case with a mergeable release. ; CHECK-LABEL: define void @test31( -; CHECK: call i8* @objc_retain(i8* %p) +; CHECK: call i8* @llvm.objc.retain(i8* %p) ; CHECK: call void @callee() ; CHECK: store -; CHECK: call void @objc_release -; CHECK-NOT: @objc_release +; CHECK: call void @llvm.objc.release +; CHECK-NOT: @llvm.objc.release ; CHECK: true: -; CHECK-NOT: @objc_release +; CHECK-NOT: @llvm.objc.release ; CHECK: false: -; CHECK-NOT: @objc_release +; CHECK-NOT: @llvm.objc.release ; CHECK: ret void -; CHECK-NOT: @objc_release +; CHECK-NOT: @llvm.objc.release ; CHECK: } define void @test31(i8* %p, i1 %x) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) call void @callee() store i8 0, i8* %p br i1 %x, label %true, label %false true: - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void false: - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } ; Don't consider bitcasts or getelementptrs direct uses. ; CHECK-LABEL: define void @test32( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: true: -; CHECK: call i8* @objc_retain( +; CHECK: call i8* @llvm.objc.retain ; CHECK: call void @callee() ; CHECK: store -; CHECK: call void @objc_release +; CHECK: call void @llvm.objc.release ; CHECK: done: -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test32(i8* %p, i1 %x) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) br i1 %x, label %true, label %done true: @@ -1672,25 +1672,25 @@ true: done: %g = bitcast i8* %p to i8* %h = getelementptr i8, i8* %g, i64 0 - call void @objc_release(i8* %g) + call void @llvm.objc.release(i8* %g) ret void } ; Do consider icmps to be direct uses. ; CHECK-LABEL: define void @test33( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: true: -; CHECK: call i8* @objc_retain( +; CHECK: call i8* @llvm.objc.retain ; CHECK: call void @callee() ; CHECK: icmp -; CHECK: call void @objc_release +; CHECK: call void @llvm.objc.release ; CHECK: done: -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test33(i8* %p, i1 %x, i8* %y) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) br i1 %x, label %true, label %done true: @@ -1701,7 +1701,7 @@ true: done: %g = bitcast i8* %p to i8* %h = getelementptr i8, i8* %g, i64 0 - call void @objc_release(i8* %g) + call void @llvm.objc.release(i8* %g) ret void } @@ -1709,14 +1709,14 @@ done: ; releases. ; CHECK-LABEL: define void @test34a( -; CHECK: call i8* @objc_retain +; CHECK: call i8* @llvm.objc.retain ; CHECK: true: ; CHECK: done: -; CHECK: call void @objc_release +; CHECK: call void @llvm.objc.release ; CHECK: } define void @test34a(i8* %p, i1 %x, i8* %y) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) br i1 %x, label %true, label %done true: @@ -1726,16 +1726,16 @@ true: done: %g = bitcast i8* %p to i8* %h = getelementptr i8, i8* %g, i64 0 - call void @objc_release(i8* %g) + call void @llvm.objc.release(i8* %g) ret void } ; CHECK-LABEL: define void @test34b( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test34b(i8* %p, i1 %x, i8* %y) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) br i1 %x, label %true, label %done true: @@ -1745,7 +1745,7 @@ true: done: %g = bitcast i8* %p to i8* %h = getelementptr i8, i8* %g, i64 0 - call void @objc_release(i8* %g), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %g), !clang.imprecise_release !0 ret void } @@ -1756,14 +1756,14 @@ done: ; Precise. ; CHECK-LABEL: define void @test35a( ; CHECK: entry: -; CHECK: call i8* @objc_retain +; CHECK: call i8* @llvm.objc.retain ; CHECK: true: ; CHECK: done: -; CHECK: call void @objc_release +; CHECK: call void @llvm.objc.release ; CHECK: } define void @test35a(i8* %p, i1 %x, i8* %y) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) br i1 %x, label %true, label %done true: @@ -1773,17 +1773,17 @@ true: done: %g = bitcast i8* %p to i8* %h = getelementptr i8, i8* %g, i64 0 - call void @objc_release(i8* %g) + call void @llvm.objc.release(i8* %g) ret void } ; Imprecise. ; CHECK-LABEL: define void @test35b( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test35b(i8* %p, i1 %x, i8* %y) { entry: - %f0 = call i8* @objc_retain(i8* %p) + %f0 = call i8* @llvm.objc.retain(i8* %p) br i1 %x, label %true, label %done true: @@ -1793,50 +1793,50 @@ true: done: %g = bitcast i8* %p to i8* %h = getelementptr i8, i8* %g, i64 0 - call void @objc_release(i8* %g), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %g), !clang.imprecise_release !0 ret void } ; Delete a retain,release if there's no actual use and we have precise release. ; CHECK-LABEL: define void @test36a( -; CHECK: @objc_retain +; CHECK: @llvm.objc.retain ; CHECK: call void @callee() -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: call void @callee() -; CHECK: @objc_release +; CHECK: @llvm.objc.release ; CHECK: } define void @test36a(i8* %p) { entry: - call i8* @objc_retain(i8* %p) + call i8* @llvm.objc.retain(i8* %p) call void @callee() call void @callee() - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } ; Like test36, but with metadata. ; CHECK-LABEL: define void @test36b( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test36b(i8* %p) { entry: - call i8* @objc_retain(i8* %p) + call i8* @llvm.objc.retain(i8* %p) call void @callee() call void @callee() - call void @objc_release(i8* %p), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0 ret void } ; Be aggressive about analyzing phis to eliminate possible uses. ; CHECK-LABEL: define void @test38( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test38(i8* %p, i1 %u, i1 %m, i8* %z, i8* %y, i8* %x, i8* %w) { entry: - call i8* @objc_retain(i8* %p) + call i8* @llvm.objc.retain(i8* %p) br i1 %u, label %true, label %false true: br i1 %m, label %a, label %b @@ -1859,36 +1859,36 @@ f: g: %h = phi i8* [ %j, %e ], [ %k, %f ] call void @use_pointer(i8* %h) - call void @objc_release(i8* %p), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0 ret void } ; Delete retain,release pairs around loops. ; CHECK-LABEL: define void @test39( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test39(i8* %p) { entry: - %0 = call i8* @objc_retain(i8* %p) + %0 = call i8* @llvm.objc.retain(i8* %p) br label %loop loop: ; preds = %loop, %entry br i1 undef, label %loop, label %exit exit: ; preds = %loop - call void @objc_release(i8* %0), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %0), !clang.imprecise_release !0 ret void } ; Delete retain,release pairs around loops containing uses. ; CHECK-LABEL: define void @test39b( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test39b(i8* %p) { entry: - %0 = call i8* @objc_retain(i8* %p) + %0 = call i8* @llvm.objc.retain(i8* %p) br label %loop loop: ; preds = %loop, %entry @@ -1896,18 +1896,18 @@ loop: ; preds = %loop, %entry br i1 undef, label %loop, label %exit exit: ; preds = %loop - call void @objc_release(i8* %0), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %0), !clang.imprecise_release !0 ret void } ; Delete retain,release pairs around loops containing potential decrements. ; CHECK-LABEL: define void @test39c( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test39c(i8* %p) { entry: - %0 = call i8* @objc_retain(i8* %p) + %0 = call i8* @llvm.objc.retain(i8* %p) br label %loop loop: ; preds = %loop, %entry @@ -1915,7 +1915,7 @@ loop: ; preds = %loop, %entry br i1 undef, label %loop, label %exit exit: ; preds = %loop - call void @objc_release(i8* %0), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %0), !clang.imprecise_release !0 ret void } @@ -1923,11 +1923,11 @@ exit: ; preds = %loop ; the successors are in a different order. ; CHECK-LABEL: define void @test40( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test40(i8* %p) { entry: - %0 = call i8* @objc_retain(i8* %p) + %0 = call i8* @llvm.objc.retain(i8* %p) br label %loop loop: ; preds = %loop, %entry @@ -1935,7 +1935,7 @@ loop: ; preds = %loop, %entry br i1 undef, label %exit, label %loop exit: ; preds = %loop - call void @objc_release(i8* %0), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %0), !clang.imprecise_release !0 ret void } @@ -1944,26 +1944,26 @@ exit: ; preds = %loop ; CHECK-LABEL: define void @test42( ; CHECK-NEXT: entry: -; CHECK-NEXT: call i8* @objc_retain(i8* %p) -; CHECK-NEXT: call i8* @objc_autorelease(i8* %p) +; CHECK-NEXT: call i8* @llvm.objc.retain(i8* %p) +; CHECK-NEXT: call i8* @llvm.objc.autorelease(i8* %p) ; CHECK-NEXT: call void @use_pointer(i8* %p) ; CHECK-NEXT: call void @use_pointer(i8* %p) ; CHECK-NEXT: call void @use_pointer(i8* %p) ; CHECK-NEXT: call void @use_pointer(i8* %p) -; CHECK-NEXT: call void @objc_release(i8* %p) +; CHECK-NEXT: call void @llvm.objc.release(i8* %p) ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test42(i8* %p) { entry: - call i8* @objc_retain(i8* %p) - call i8* @objc_autorelease(i8* %p) - call i8* @objc_retain(i8* %p) + call i8* @llvm.objc.retain(i8* %p) + call i8* @llvm.objc.autorelease(i8* %p) + call i8* @llvm.objc.retain(i8* %p) call void @use_pointer(i8* %p) call void @use_pointer(i8* %p) - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) call void @use_pointer(i8* %p) call void @use_pointer(i8* %p) - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } @@ -1972,24 +1972,24 @@ entry: ; CHECK-LABEL: define void @test43( ; CHECK-NEXT: entry: -; CHECK-NEXT: call i8* @objc_retain(i8* %p) -; CHECK-NEXT: call i8* @objc_autorelease(i8* %p) -; CHECK-NEXT: call i8* @objc_retain +; CHECK-NEXT: call i8* @llvm.objc.retain(i8* %p) +; CHECK-NEXT: call i8* @llvm.objc.autorelease(i8* %p) +; CHECK-NEXT: call i8* @llvm.objc.retain ; CHECK-NEXT: call void @use_pointer(i8* %p) ; CHECK-NEXT: call void @use_pointer(i8* %p) -; CHECK-NEXT: call void @objc_autoreleasePoolPop(i8* undef) -; CHECK-NEXT: call void @objc_release +; CHECK-NEXT: call void @llvm.objc.autoreleasePoolPop(i8* undef) +; CHECK-NEXT: call void @llvm.objc.release ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test43(i8* %p) { entry: - call i8* @objc_retain(i8* %p) - call i8* @objc_autorelease(i8* %p) - call i8* @objc_retain(i8* %p) + call i8* @llvm.objc.retain(i8* %p) + call i8* @llvm.objc.autorelease(i8* %p) + call i8* @llvm.objc.retain(i8* %p) call void @use_pointer(i8* %p) call void @use_pointer(i8* %p) - call void @objc_autoreleasePoolPop(i8* undef) - call void @objc_release(i8* %p) + call void @llvm.objc.autoreleasePoolPop(i8* undef) + call void @llvm.objc.release(i8* %p) ret void } @@ -1998,74 +1998,74 @@ entry: ; CHECK-LABEL: define void @test43b( ; CHECK-NEXT: entry: -; CHECK-NEXT: call i8* @objc_retain(i8* %p) -; CHECK-NEXT: call i8* @objc_autorelease(i8* %p) +; CHECK-NEXT: call i8* @llvm.objc.retain(i8* %p) +; CHECK-NEXT: call i8* @llvm.objc.autorelease(i8* %p) ; CHECK-NEXT: call void @use_pointer(i8* %p) ; CHECK-NEXT: call void @use_pointer(i8* %p) -; CHECK-NEXT: call i8* @objc_autoreleasePoolPush() +; CHECK-NEXT: call i8* @llvm.objc.autoreleasePoolPush() ; CHECK-NEXT: call void @use_pointer(i8* %p) -; CHECK-NEXT: call void @objc_release +; CHECK-NEXT: call void @llvm.objc.release ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test43b(i8* %p) { entry: - call i8* @objc_retain(i8* %p) - call i8* @objc_autorelease(i8* %p) - call i8* @objc_retain(i8* %p) + call i8* @llvm.objc.retain(i8* %p) + call i8* @llvm.objc.autorelease(i8* %p) + call i8* @llvm.objc.retain(i8* %p) call void @use_pointer(i8* %p) call void @use_pointer(i8* %p) - call i8* @objc_autoreleasePoolPush() - call void @objc_release(i8* %p) + call i8* @llvm.objc.autoreleasePoolPush() + call void @llvm.objc.release(i8* %p) call void @use_pointer(i8* %p) - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } ; Do retain+release elimination for non-provenance pointers. ; CHECK-LABEL: define void @test44( -; CHECK-NOT: objc_ +; CHECK-NOT: llvm.objc. ; CHECK: } define void @test44(i8** %pp) { %p = load i8*, i8** %pp - %q = call i8* @objc_retain(i8* %p) - call void @objc_release(i8* %q) + %q = call i8* @llvm.objc.retain(i8* %p) + call void @llvm.objc.release(i8* %q) ret void } ; Don't delete retain+release with an unknown-provenance -; may-alias objc_release between them. +; may-alias llvm.objc.release between them. ; CHECK-LABEL: define void @test45( -; CHECK: call i8* @objc_retain(i8* %p) -; CHECK: call void @objc_release(i8* %q) +; CHECK: call i8* @llvm.objc.retain(i8* %p) +; CHECK: call void @llvm.objc.release(i8* %q) ; CHECK: call void @use_pointer(i8* %p) -; CHECK: call void @objc_release(i8* %p) +; CHECK: call void @llvm.objc.release(i8* %p) ; CHECK: } define void @test45(i8** %pp, i8** %qq) { %p = load i8*, i8** %pp %q = load i8*, i8** %qq - call i8* @objc_retain(i8* %p) - call void @objc_release(i8* %q) + call i8* @llvm.objc.retain(i8* %p) + call void @llvm.objc.release(i8* %q) call void @use_pointer(i8* %p) - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } ; Don't delete retain and autorelease here. ; CHECK-LABEL: define void @test46( -; CHECK: tail call i8* @objc_retain(i8* %p) [[NUW]] +; CHECK: tail call i8* @llvm.objc.retain(i8* %p) [[NUW]] ; CHECK: true: -; CHECK: call i8* @objc_autorelease(i8* %p) [[NUW]] +; CHECK: call i8* @llvm.objc.autorelease(i8* %p) [[NUW]] ; CHECK: } define void @test46(i8* %p, i1 %a) { entry: - call i8* @objc_retain(i8* %p) + call i8* @llvm.objc.retain(i8* %p) br i1 %a, label %true, label %false true: - call i8* @objc_autorelease(i8* %p) + call i8* @llvm.objc.autorelease(i8* %p) call void @use_pointer(i8* %p) ret void @@ -2080,7 +2080,7 @@ false: ; CHECK: ret i8* %p ; CHECK: } define i8* @test47(i8* %p) nounwind { - %x = call i8* @objc_retainedObject(i8* %p) + %x = call i8* @llvm.objc.retainedObject(i8* %p) ret i8* %x } @@ -2091,7 +2091,7 @@ define i8* @test47(i8* %p) nounwind { ; CHECK: ret i8* %p ; CHECK: } define i8* @test48(i8* %p) nounwind { - %x = call i8* @objc_unretainedObject(i8* %p) + %x = call i8* @llvm.objc.unretainedObject(i8* %p) ret i8* %x } @@ -2102,36 +2102,36 @@ define i8* @test48(i8* %p) nounwind { ; CHECK: ret i8* %p ; CHECK: } define i8* @test49(i8* %p) nounwind { - %x = call i8* @objc_unretainedPointer(i8* %p) + %x = call i8* @llvm.objc.unretainedPointer(i8* %p) ret i8* %x } ; Do delete retain+release with intervening stores of the address value if we -; have imprecise release attached to objc_release. +; have imprecise release attached to llvm.objc.release. ; CHECK-LABEL: define void @test50a( -; CHECK-NEXT: call i8* @objc_retain +; CHECK-NEXT: call i8* @llvm.objc.retain ; CHECK-NEXT: call void @callee ; CHECK-NEXT: store -; CHECK-NEXT: call void @objc_release +; CHECK-NEXT: call void @llvm.objc.release ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test50a(i8* %p, i8** %pp) { - call i8* @objc_retain(i8* %p) + call i8* @llvm.objc.retain(i8* %p) call void @callee() store i8* %p, i8** %pp - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } ; CHECK-LABEL: define void @test50b( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test50b(i8* %p, i8** %pp) { - call i8* @objc_retain(i8* %p) + call i8* @llvm.objc.retain(i8* %p) call void @callee() store i8* %p, i8** %pp - call void @objc_release(i8* %p), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0 ret void } @@ -2140,28 +2140,28 @@ define void @test50b(i8* %p, i8** %pp) { ; address value. ; CHECK-LABEL: define void @test51a( -; CHECK: call i8* @objc_retain(i8* %p) -; CHECK: call void @objc_release(i8* %p) +; CHECK: call i8* @llvm.objc.retain(i8* %p) +; CHECK: call void @llvm.objc.release(i8* %p) ; CHECK: ret void ; CHECK: } define void @test51a(i8* %p) { - call i8* @objc_retain(i8* %p) + call i8* @llvm.objc.retain(i8* %p) call void @callee() store i8 0, i8* %p - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } ; CHECK-LABEL: define void @test51b( -; CHECK: call i8* @objc_retain(i8* %p) -; CHECK: call void @objc_release(i8* %p) +; CHECK: call i8* @llvm.objc.retain(i8* %p) +; CHECK: call void @llvm.objc.release(i8* %p) ; CHECK: ret void ; CHECK: } define void @test51b(i8* %p) { - call i8* @objc_retain(i8* %p) + call i8* @llvm.objc.retain(i8* %p) call void @callee() store i8 0, i8* %p - call void @objc_release(i8* %p), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0 ret void } @@ -2169,36 +2169,36 @@ define void @test51b(i8* %p) { ; unknown provenance. ; CHECK-LABEL: define void @test52a( -; CHECK: call i8* @objc_retain +; CHECK: call i8* @llvm.objc.retain ; CHECK: call void @callee() ; CHECK: call void @use_pointer(i8* %z) -; CHECK: call void @objc_release +; CHECK: call void @llvm.objc.release ; CHECK: ret void ; CHECK: } define void @test52a(i8** %zz, i8** %pp) { %p = load i8*, i8** %pp - %1 = call i8* @objc_retain(i8* %p) + %1 = call i8* @llvm.objc.retain(i8* %p) call void @callee() %z = load i8*, i8** %zz call void @use_pointer(i8* %z) - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } ; CHECK-LABEL: define void @test52b( -; CHECK: call i8* @objc_retain +; CHECK: call i8* @llvm.objc.retain ; CHECK: call void @callee() ; CHECK: call void @use_pointer(i8* %z) -; CHECK: call void @objc_release +; CHECK: call void @llvm.objc.release ; CHECK: ret void ; CHECK: } define void @test52b(i8** %zz, i8** %pp) { %p = load i8*, i8** %pp - %1 = call i8* @objc_retain(i8* %p) + %1 = call i8* @llvm.objc.retain(i8* %p) call void @callee() %z = load i8*, i8** %zz call void @use_pointer(i8* %z) - call void @objc_release(i8* %p), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %p), !clang.imprecise_release !0 ret void } @@ -2208,15 +2208,15 @@ define void @test52b(i8** %zz, i8** %pp) { ; See rdar://10551239. ; CHECK-LABEL: define void @test53( -; CHECK: @objc_ +; CHECK: @llvm.objc. ; CHECK: } define void @test53(void ()** %zz, i8** %pp) { %p = load i8*, i8** %pp - %1 = call i8* @objc_retain(i8* %p) + %1 = call i8* @llvm.objc.retain(i8* %p) call void @callee() %z = load void ()*, void ()** %zz call void @callee_fnptr(void ()* %z) - call void @objc_release(i8* %p) + call void @llvm.objc.release(i8* %p) ret void } @@ -2224,12 +2224,12 @@ define void @test53(void ()** %zz, i8** %pp) { ; CHECK-LABEL: define void @test54( ; CHECK: call i8* @returner() -; CHECK-NEXT: call void @objc_release(i8* %t) [[NUW]], !clang.imprecise_release ![[RELEASE]] +; CHECK-NEXT: call void @llvm.objc.release(i8* %t) [[NUW]], !clang.imprecise_release ![[RELEASE]] ; CHECK-NEXT: ret void ; CHECK: } define void @test54() { %t = call i8* @returner() - call i8* @objc_autorelease(i8* %t) + call i8* @llvm.objc.autorelease(i8* %t) ret void } @@ -2240,10 +2240,10 @@ define void @test54() { ; CHECK: } define void @test55(i8* %x) { entry: - %0 = call i8* @objc_retain(i8* %x) nounwind - %1 = call i8* @objc_retain(i8* %x) nounwind - call void @objc_release(i8* %x) nounwind - call void @objc_release(i8* %x) nounwind + %0 = call i8* @llvm.objc.retain(i8* %x) nounwind + %1 = call i8* @llvm.objc.retain(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind ret void } @@ -2255,30 +2255,30 @@ entry: ; CHECK-LABEL: define void @test56( ; CHECK-NOT: @objc ; CHECK: if.then: -; CHECK-NEXT: %0 = tail call i8* @objc_retain(i8* %x) [[NUW]] +; CHECK-NEXT: %0 = tail call i8* @llvm.objc.retain(i8* %x) [[NUW]] ; CHECK-NEXT: tail call void @use_pointer(i8* %x) ; CHECK-NEXT: tail call void @use_pointer(i8* %x) -; CHECK-NEXT: tail call void @objc_release(i8* %x) [[NUW]], !clang.imprecise_release ![[RELEASE]] +; CHECK-NEXT: tail call void @llvm.objc.release(i8* %x) [[NUW]], !clang.imprecise_release ![[RELEASE]] ; CHECK-NEXT: br label %if.end ; CHECK-NOT: @objc ; CHECK: } define void @test56(i8* %x, i32 %n) { entry: - %0 = tail call i8* @objc_retain(i8* %x) nounwind - %1 = tail call i8* @objc_retain(i8* %0) nounwind + %0 = tail call i8* @llvm.objc.retain(i8* %x) nounwind + %1 = tail call i8* @llvm.objc.retain(i8* %0) nounwind %tobool = icmp eq i32 %n, 0 br i1 %tobool, label %if.end, label %if.then if.then: ; preds = %entry - %2 = tail call i8* @objc_retain(i8* %1) nounwind + %2 = tail call i8* @llvm.objc.retain(i8* %1) nounwind tail call void @use_pointer(i8* %2) tail call void @use_pointer(i8* %2) - tail call void @objc_release(i8* %2) nounwind, !clang.imprecise_release !0 + tail call void @llvm.objc.release(i8* %2) nounwind, !clang.imprecise_release !0 br label %if.end if.end: ; preds = %entry, %if.then - tail call void @objc_release(i8* %1) nounwind, !clang.imprecise_release !0 - tail call void @objc_release(i8* %0) nounwind, !clang.imprecise_release !0 + tail call void @llvm.objc.release(i8* %1) nounwind, !clang.imprecise_release !0 + tail call void @llvm.objc.release(i8* %0) nounwind, !clang.imprecise_release !0 ret void } @@ -2288,26 +2288,26 @@ if.end: ; preds = %entry, %if.then ; CHECK-LABEL: define void @test57( ; CHECK-NEXT: entry: -; CHECK-NEXT: tail call i8* @objc_retain(i8* %x) [[NUW]] +; CHECK-NEXT: tail call i8* @llvm.objc.retain(i8* %x) [[NUW]] ; CHECK-NEXT: call void @use_pointer(i8* %x) ; CHECK-NEXT: call void @use_pointer(i8* %x) -; CHECK-NEXT: tail call i8* @objc_retain(i8* %x) [[NUW]] +; CHECK-NEXT: tail call i8* @llvm.objc.retain(i8* %x) [[NUW]] ; CHECK-NEXT: call void @use_pointer(i8* %x) ; CHECK-NEXT: call void @use_pointer(i8* %x) -; CHECK-NEXT: call void @objc_release(i8* %x) [[NUW]] +; CHECK-NEXT: call void @llvm.objc.release(i8* %x) [[NUW]] ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test57(i8* %x) nounwind { entry: - call i8* @objc_retain(i8* %x) nounwind - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind call void @use_pointer(i8* %x) call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind - call i8* @objc_retain(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind call void @use_pointer(i8* %x) call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind ret void } @@ -2316,20 +2316,20 @@ entry: ; CHECK-LABEL: define void @test58( ; CHECK-NEXT: entry: -; CHECK-NEXT: @objc_retain +; CHECK-NEXT: @llvm.objc.retain ; CHECK-NEXT: call void @use_pointer(i8* %x) ; CHECK-NEXT: call void @use_pointer(i8* %x) ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test58(i8* %x) nounwind { entry: - call i8* @objc_retain(i8* %x) nounwind - call i8* @objc_retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind call void @use_pointer(i8* %x) call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind - call i8* @objc_retain(i8* %x) nounwind - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind + call i8* @llvm.objc.retain(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind ret void } @@ -2337,20 +2337,20 @@ entry: ; CHECK-LABEL: define void @test59( ; CHECK-NEXT: entry: -; CHECK-NEXT: %0 = tail call i8* @objc_retain(i8* %x) [[NUW]] +; CHECK-NEXT: %0 = tail call i8* @llvm.objc.retain(i8* %x) [[NUW]] ; CHECK-NEXT: call void @use_pointer(i8* %x) ; CHECK-NEXT: call void @use_pointer(i8* %x) -; CHECK-NEXT: call void @objc_release(i8* %x) [[NUW]] +; CHECK-NEXT: call void @llvm.objc.release(i8* %x) [[NUW]] ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test59(i8* %x) nounwind { entry: - %a = call i8* @objc_retain(i8* %x) nounwind - call void @objc_release(i8* %x) nounwind - %b = call i8* @objc_retain(i8* %x) nounwind + %a = call i8* @llvm.objc.retain(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind + %b = call i8* @llvm.objc.retain(i8* %x) nounwind call void @use_pointer(i8* %x) call void @use_pointer(i8* %x) - call void @objc_release(i8* %x) nounwind + call void @llvm.objc.release(i8* %x) nounwind ret void } @@ -2363,71 +2363,71 @@ entry: ; @something is not constant. ; CHECK-LABEL: define void @test60a( -; CHECK: call i8* @objc_retain -; CHECK: call void @objc_release +; CHECK: call i8* @llvm.objc.retain +; CHECK: call void @llvm.objc.release ; CHECK: } define void @test60a() { %t = load i8*, i8** @constptr %s = load i8*, i8** @something - call i8* @objc_retain(i8* %s) + call i8* @llvm.objc.retain(i8* %s) call void @callee() call void @use_pointer(i8* %t) - call void @objc_release(i8* %s) + call void @llvm.objc.release(i8* %s) ret void } ; CHECK-LABEL: define void @test60b( -; CHECK: call i8* @objc_retain -; CHECK-NOT: call i8* @objc_retain -; CHECK-NOT: call i8* @objc_release +; CHECK: call i8* @llvm.objc.retain +; CHECK-NOT: call i8* @llvm.objc.retain +; CHECK-NOT: call i8* @llvm.objc.release ; CHECK: } define void @test60b() { %t = load i8*, i8** @constptr %s = load i8*, i8** @something - call i8* @objc_retain(i8* %t) - call i8* @objc_retain(i8* %t) + call i8* @llvm.objc.retain(i8* %t) + call i8* @llvm.objc.retain(i8* %t) call void @callee() call void @use_pointer(i8* %s) - call void @objc_release(i8* %t) + call void @llvm.objc.release(i8* %t) ret void } ; CHECK-LABEL: define void @test60c( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test60c() { %t = load i8*, i8** @constptr %s = load i8*, i8** @something - call i8* @objc_retain(i8* %t) + call i8* @llvm.objc.retain(i8* %t) call void @callee() call void @use_pointer(i8* %s) - call void @objc_release(i8* %t), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %t), !clang.imprecise_release !0 ret void } ; CHECK-LABEL: define void @test60d( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test60d() { %t = load i8*, i8** @constptr %s = load i8*, i8** @something - call i8* @objc_retain(i8* %t) + call i8* @llvm.objc.retain(i8* %t) call void @callee() call void @use_pointer(i8* %s) - call void @objc_release(i8* %t) + call void @llvm.objc.release(i8* %t) ret void } ; CHECK-LABEL: define void @test60e( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test60e() { %t = load i8*, i8** @constptr %s = load i8*, i8** @something - call i8* @objc_retain(i8* %t) + call i8* @llvm.objc.retain(i8* %t) call void @callee() call void @use_pointer(i8* %s) - call void @objc_release(i8* %t), !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %t), !clang.imprecise_release !0 ret void } @@ -2435,14 +2435,14 @@ define void @test60e() { ; pointers. ; CHECK-LABEL: define void @test61( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test61() { %t = load i8*, i8** @constptr - call i8* @objc_retain(i8* %t) + call i8* @llvm.objc.retain(i8* %t) call void @callee() call void @use_pointer(i8* %t) - call void @objc_release(i8* %t) + call void @llvm.objc.release(i8* %t) ret void } @@ -2450,23 +2450,23 @@ define void @test61() { ; other is outside the loop. ; CHECK-LABEL: define void @test62( -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define void @test62(i8* %x, i1* %p) nounwind { entry: br label %loop loop: - call i8* @objc_retain(i8* %x) + call i8* @llvm.objc.retain(i8* %x) %q = load i1, i1* %p br i1 %q, label %loop.more, label %exit loop.more: - call void @objc_release(i8* %x) + call void @llvm.objc.release(i8* %x) br label %loop exit: - call void @objc_release(i8* %x) + call void @llvm.objc.release(i8* %x) ret void } @@ -2475,21 +2475,21 @@ exit: ; CHECK-LABEL: define void @test63( ; CHECK: loop: -; CHECK: tail call i8* @objc_retain(i8* %x) +; CHECK: tail call i8* @llvm.objc.retain(i8* %x) ; CHECK: loop.more: -; CHECK: call void @objc_release(i8* %x) +; CHECK: call void @llvm.objc.release(i8* %x) ; CHECK: } define void @test63(i8* %x, i1* %p) nounwind { entry: br label %loop loop: - call i8* @objc_retain(i8* %x) + call i8* @llvm.objc.retain(i8* %x) %q = load i1, i1* %p br i1 %q, label %loop.more, label %exit loop.more: - call void @objc_release(i8* %x) + call void @llvm.objc.release(i8* %x) br label %loop exit: @@ -2501,16 +2501,16 @@ exit: ; CHECK-LABEL: define void @test64( ; CHECK: loop: -; CHECK: tail call i8* @objc_retain(i8* %x) +; CHECK: tail call i8* @llvm.objc.retain(i8* %x) ; CHECK: exit: -; CHECK: call void @objc_release(i8* %x) +; CHECK: call void @llvm.objc.release(i8* %x) ; CHECK: } define void @test64(i8* %x, i1* %p) nounwind { entry: br label %loop loop: - call i8* @objc_retain(i8* %x) + call i8* @llvm.objc.retain(i8* %x) %q = load i1, i1* %p br i1 %q, label %loop.more, label %exit @@ -2518,7 +2518,7 @@ loop.more: br label %loop exit: - call void @objc_release(i8* %x) + call void @llvm.objc.release(i8* %x) ret void } @@ -2526,9 +2526,9 @@ exit: ; CHECK-LABEL: define i8* @test65( ; CHECK: if.then: -; CHECK: call i8* @objc_autorelease( +; CHECK: call i8* @llvm.objc.autorelease( ; CHECK: return: -; CHECK-NOT: @objc_autorelease +; CHECK-NOT: @llvm.objc.autorelease ; CHECK: } define i8* @test65(i1 %x) { entry: @@ -2536,12 +2536,12 @@ entry: if.then: ; preds = %entry %c = call i8* @returner() - %s = call i8* @objc_retainAutoreleasedReturnValue(i8* %c) nounwind + %s = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* %c) nounwind br label %return return: ; preds = %if.then, %entry %retval = phi i8* [ %s, %if.then ], [ null, %entry ] - %q = call i8* @objc_autorelease(i8* %retval) nounwind + %q = call i8* @llvm.objc.autorelease(i8* %retval) nounwind ret i8* %retval } @@ -2549,24 +2549,24 @@ return: ; preds = %if.then, %entry ; CHECK-LABEL: define i8* @test65b( ; CHECK: if.then: -; CHECK-NOT: @objc_autorelease +; CHECK-NOT: @llvm.objc.autorelease ; CHECK: return: -; CHECK: call i8* @objc_autorelease( +; CHECK: call i8* @llvm.objc.autorelease( ; CHECK: } define i8* @test65b(i1 %x) { entry: - %t = call i8* @objc_autoreleasePoolPush() + %t = call i8* @llvm.objc.autoreleasePoolPush() br i1 %x, label %return, label %if.then if.then: ; preds = %entry %c = call i8* @returner() - %s = call i8* @objc_retainAutoreleasedReturnValue(i8* %c) nounwind + %s = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* %c) nounwind br label %return return: ; preds = %if.then, %entry %retval = phi i8* [ %s, %if.then ], [ null, %entry ] - call void @objc_autoreleasePoolPop(i8* %t) - %q = call i8* @objc_autorelease(i8* %retval) nounwind + call void @llvm.objc.autoreleasePoolPop(i8* %t) + %q = call i8* @llvm.objc.autorelease(i8* %retval) nounwind ret i8* %retval } @@ -2575,9 +2575,9 @@ return: ; preds = %if.then, %entry ; CHECK-LABEL: define i8* @test65c( ; CHECK: if.then: -; CHECK-NOT: @objc_autorelease +; CHECK-NOT: @llvm.objc.autorelease ; CHECK: return: -; CHECK: call i8* @objc_autoreleaseReturnValue( +; CHECK: call i8* @llvm.objc.autoreleaseReturnValue( ; CHECK: } define i8* @test65c(i1 %x) { entry: @@ -2585,20 +2585,20 @@ entry: if.then: ; preds = %entry %c = call i8* @returner() - %s = call i8* @objc_retainAutoreleasedReturnValue(i8* %c) nounwind + %s = call i8* @llvm.objc.retainAutoreleasedReturnValue(i8* %c) nounwind br label %return return: ; preds = %if.then, %entry %retval = phi i8* [ %s, %if.then ], [ null, %entry ] - %q = call i8* @objc_autoreleaseReturnValue(i8* %retval) nounwind + %q = call i8* @llvm.objc.autoreleaseReturnValue(i8* %retval) nounwind ret i8* %retval } ; CHECK-LABEL: define i8* @test65d( ; CHECK: if.then: -; CHECK-NOT: @objc_autorelease +; CHECK-NOT: @llvm.objc.autorelease ; CHECK: return: -; CHECK: call i8* @objc_autoreleaseReturnValue( +; CHECK: call i8* @llvm.objc.autoreleaseReturnValue( ; CHECK: } define i8* @test65d(i1 %x) { entry: @@ -2606,23 +2606,23 @@ entry: if.then: ; preds = %entry %c = call i8* @returner() - %s = call i8* @objc_unsafeClaimAutoreleasedReturnValue(i8* %c) nounwind + %s = call i8* @llvm.objc.unsafeClaimAutoreleasedReturnValue(i8* %c) nounwind br label %return return: ; preds = %if.then, %entry %retval = phi i8* [ %s, %if.then ], [ null, %entry ] - %q = call i8* @objc_autoreleaseReturnValue(i8* %retval) nounwind + %q = call i8* @llvm.objc.autoreleaseReturnValue(i8* %retval) nounwind ret i8* %retval } -; An objc_retain can serve as a may-use for a different pointer. +; An llvm.objc.retain can serve as a may-use for a different pointer. ; rdar://11931823 ; CHECK-LABEL: define void @test66a( -; CHECK: tail call i8* @objc_retain(i8* %cond) [[NUW]] -; CHECK: tail call void @objc_release(i8* %call) [[NUW]] -; CHECK: tail call i8* @objc_retain(i8* %tmp8) [[NUW]] -; CHECK: tail call void @objc_release(i8* %cond) [[NUW]] +; CHECK: tail call i8* @llvm.objc.retain(i8* %cond) [[NUW]] +; CHECK: tail call void @llvm.objc.release(i8* %call) [[NUW]] +; CHECK: tail call i8* @llvm.objc.retain(i8* %tmp8) [[NUW]] +; CHECK: tail call void @llvm.objc.release(i8* %cond) [[NUW]] ; CHECK: } define void @test66a(i8* %tmp5, i8* %bar, i1 %tobool, i1 %tobool1, i8* %call) { entry: @@ -2633,19 +2633,19 @@ cond.true: cond.end: ; preds = %cond.true, %entry %cond = phi i8* [ %tmp5, %cond.true ], [ %call, %entry ] - %tmp7 = tail call i8* @objc_retain(i8* %cond) nounwind - tail call void @objc_release(i8* %call) nounwind + %tmp7 = tail call i8* @llvm.objc.retain(i8* %cond) nounwind + tail call void @llvm.objc.release(i8* %call) nounwind %tmp8 = select i1 %tobool1, i8* %cond, i8* %bar - %tmp9 = tail call i8* @objc_retain(i8* %tmp8) nounwind - tail call void @objc_release(i8* %cond) nounwind + %tmp9 = tail call i8* @llvm.objc.retain(i8* %tmp8) nounwind + tail call void @llvm.objc.release(i8* %cond) nounwind ret void } ; CHECK-LABEL: define void @test66b( -; CHECK: tail call i8* @objc_retain(i8* %cond) [[NUW]] -; CHECK: tail call void @objc_release(i8* %call) [[NUW]] -; CHECK: tail call i8* @objc_retain(i8* %tmp8) [[NUW]] -; CHECK: tail call void @objc_release(i8* %cond) [[NUW]] +; CHECK: tail call i8* @llvm.objc.retain(i8* %cond) [[NUW]] +; CHECK: tail call void @llvm.objc.release(i8* %call) [[NUW]] +; CHECK: tail call i8* @llvm.objc.retain(i8* %tmp8) [[NUW]] +; CHECK: tail call void @llvm.objc.release(i8* %cond) [[NUW]] ; CHECK: } define void @test66b(i8* %tmp5, i8* %bar, i1 %tobool, i1 %tobool1, i8* %call) { entry: @@ -2656,19 +2656,19 @@ cond.true: cond.end: ; preds = %cond.true, %entry %cond = phi i8* [ %tmp5, %cond.true ], [ %call, %entry ] - %tmp7 = tail call i8* @objc_retain(i8* %cond) nounwind - tail call void @objc_release(i8* %call) nounwind, !clang.imprecise_release !0 + %tmp7 = tail call i8* @llvm.objc.retain(i8* %cond) nounwind + tail call void @llvm.objc.release(i8* %call) nounwind, !clang.imprecise_release !0 %tmp8 = select i1 %tobool1, i8* %cond, i8* %bar - %tmp9 = tail call i8* @objc_retain(i8* %tmp8) nounwind - tail call void @objc_release(i8* %cond) nounwind + %tmp9 = tail call i8* @llvm.objc.retain(i8* %tmp8) nounwind + tail call void @llvm.objc.release(i8* %cond) nounwind ret void } ; CHECK-LABEL: define void @test66c( -; CHECK: tail call i8* @objc_retain(i8* %cond) [[NUW]] -; CHECK: tail call void @objc_release(i8* %call) [[NUW]] -; CHECK: tail call i8* @objc_retain(i8* %tmp8) [[NUW]] -; CHECK: tail call void @objc_release(i8* %cond) [[NUW]] +; CHECK: tail call i8* @llvm.objc.retain(i8* %cond) [[NUW]] +; CHECK: tail call void @llvm.objc.release(i8* %call) [[NUW]] +; CHECK: tail call i8* @llvm.objc.retain(i8* %tmp8) [[NUW]] +; CHECK: tail call void @llvm.objc.release(i8* %cond) [[NUW]] ; CHECK: } define void @test66c(i8* %tmp5, i8* %bar, i1 %tobool, i1 %tobool1, i8* %call) { entry: @@ -2679,19 +2679,19 @@ cond.true: cond.end: ; preds = %cond.true, %entry %cond = phi i8* [ %tmp5, %cond.true ], [ %call, %entry ] - %tmp7 = tail call i8* @objc_retain(i8* %cond) nounwind - tail call void @objc_release(i8* %call) nounwind + %tmp7 = tail call i8* @llvm.objc.retain(i8* %cond) nounwind + tail call void @llvm.objc.release(i8* %call) nounwind %tmp8 = select i1 %tobool1, i8* %cond, i8* %bar - %tmp9 = tail call i8* @objc_retain(i8* %tmp8) nounwind, !clang.imprecise_release !0 - tail call void @objc_release(i8* %cond) nounwind + %tmp9 = tail call i8* @llvm.objc.retain(i8* %tmp8) nounwind, !clang.imprecise_release !0 + tail call void @llvm.objc.release(i8* %cond) nounwind ret void } ; CHECK-LABEL: define void @test66d( -; CHECK: tail call i8* @objc_retain(i8* %cond) [[NUW]] -; CHECK: tail call void @objc_release(i8* %call) [[NUW]] -; CHECK: tail call i8* @objc_retain(i8* %tmp8) [[NUW]] -; CHECK: tail call void @objc_release(i8* %cond) [[NUW]] +; CHECK: tail call i8* @llvm.objc.retain(i8* %cond) [[NUW]] +; CHECK: tail call void @llvm.objc.release(i8* %call) [[NUW]] +; CHECK: tail call i8* @llvm.objc.retain(i8* %tmp8) [[NUW]] +; CHECK: tail call void @llvm.objc.release(i8* %cond) [[NUW]] ; CHECK: } define void @test66d(i8* %tmp5, i8* %bar, i1 %tobool, i1 %tobool1, i8* %call) { entry: @@ -2702,11 +2702,11 @@ cond.true: cond.end: ; preds = %cond.true, %entry %cond = phi i8* [ %tmp5, %cond.true ], [ %call, %entry ] - %tmp7 = tail call i8* @objc_retain(i8* %cond) nounwind - tail call void @objc_release(i8* %call) nounwind, !clang.imprecise_release !0 + %tmp7 = tail call i8* @llvm.objc.retain(i8* %cond) nounwind + tail call void @llvm.objc.release(i8* %call) nounwind, !clang.imprecise_release !0 %tmp8 = select i1 %tobool1, i8* %cond, i8* %bar - %tmp9 = tail call i8* @objc_retain(i8* %tmp8) nounwind - tail call void @objc_release(i8* %cond) nounwind, !clang.imprecise_release !0 + %tmp9 = tail call i8* @llvm.objc.retain(i8* %tmp8) nounwind + tail call void @llvm.objc.release(i8* %cond) nounwind, !clang.imprecise_release !0 ret void } @@ -2719,13 +2719,13 @@ declare i32 @puts(i8* nocapture) nounwind @str = internal constant [16 x i8] c"-[ Top0 _getX ]\00" ; CHECK: define { <2 x float>, <2 x float> } @"\01-[A z]"({}* %self, i8* nocapture %_cmd) [[NUW]] { -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define {<2 x float>, <2 x float>} @"\01-[A z]"({}* %self, i8* nocapture %_cmd) nounwind { invoke.cont: %0 = bitcast {}* %self to i8* - %1 = tail call i8* @objc_retain(i8* %0) nounwind + %1 = tail call i8* @llvm.objc.retain(i8* %0) nounwind tail call void @llvm.dbg.value(metadata {}* %self, metadata !DILocalVariable(scope: !2), metadata !DIExpression()), !dbg !DILocation(scope: !2) tail call void @llvm.dbg.value(metadata {}* %self, metadata !DILocalVariable(scope: !2), metadata !DIExpression()), !dbg !DILocation(scope: !2) %ivar = load i64, i64* @"OBJC_IVAR_$_A.myZ", align 8 @@ -2753,7 +2753,7 @@ invoke.cont: %add.ptr24 = getelementptr i8, i8* %0, i64 %ivar23 %4 = bitcast i8* %add.ptr24 to i128* %srcval = load i128, i128* %4, align 4 - tail call void @objc_release(i8* %0) nounwind + tail call void @llvm.objc.release(i8* %0) nounwind %tmp29 = trunc i128 %srcval to i64 %tmp30 = bitcast i64 %tmp29 to <2 x float> %tmp31 = insertvalue {<2 x float>, <2 x float>} undef, <2 x float> %tmp30, 0 @@ -2765,15 +2765,15 @@ invoke.cont: } ; CHECK: @"\01-[Top0 _getX]"({}* %self, i8* nocapture %_cmd) [[NUW]] { -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. ; CHECK: } define i32 @"\01-[Top0 _getX]"({}* %self, i8* nocapture %_cmd) nounwind { invoke.cont: %0 = bitcast {}* %self to i8* - %1 = tail call i8* @objc_retain(i8* %0) nounwind + %1 = tail call i8* @llvm.objc.retain(i8* %0) nounwind %puts = tail call i32 @puts(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @str, i64 0, i64 0)) - tail call void @objc_release(i8* %0) nounwind + tail call void @llvm.objc.release(i8* %0) nounwind ret i32 0 } @@ -2785,36 +2785,36 @@ invoke.cont: ; CHECK: define void @loop(i8* %x, i64 %n) { ; CHECK: for.body: -; CHECK-NOT: @objc_ -; CHECK: @objc_msgSend -; CHECK-NOT: @objc_ +; CHECK-NOT: @llvm.objc. +; CHECK: @llvm.objc.msgSend +; CHECK-NOT: @llvm.objc. ; CHECK: for.end: ; CHECK: } define void @loop(i8* %x, i64 %n) { entry: - %0 = tail call i8* @objc_retain(i8* %x) nounwind + %0 = tail call i8* @llvm.objc.retain(i8* %x) nounwind %cmp9 = icmp sgt i64 %n, 0 br i1 %cmp9, label %for.body, label %for.end for.body: ; preds = %entry, %for.body %i.010 = phi i64 [ %inc, %for.body ], [ 0, %entry ] - %1 = tail call i8* @objc_retain(i8* %x) nounwind + %1 = tail call i8* @llvm.objc.retain(i8* %x) nounwind %tmp5 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_", align 8 - %call = tail call i8* (i8*, i8*, ...) @objc_msgSend(i8* %1, i8* %tmp5) - tail call void @objc_release(i8* %1) nounwind, !clang.imprecise_release !0 + %call = tail call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %1, i8* %tmp5) + tail call void @llvm.objc.release(i8* %1) nounwind, !clang.imprecise_release !0 %inc = add nsw i64 %i.010, 1 %exitcond = icmp eq i64 %inc, %n br i1 %exitcond, label %for.end, label %for.body for.end: ; preds = %for.body, %entry - tail call void @objc_release(i8* %x) nounwind, !clang.imprecise_release !0 + tail call void @llvm.objc.release(i8* %x) nounwind, !clang.imprecise_release !0 ret void } ; ObjCARCOpt can delete the retain,release on self. ; CHECK: define void @TextEditTest(%2* %self, %3* %pboard) { -; CHECK-NOT: call i8* @objc_retain(i8* %tmp7) +; CHECK-NOT: call i8* @llvm.objc.retain(i8* %tmp7) ; CHECK: } %0 = type { i8* (i8*, %struct._message_ref_t*, ...)*, i8* } @@ -2873,34 +2873,34 @@ define void @TextEditTest(%2* %self, %3* %pboard) { entry: %err = alloca %4*, align 8 %tmp7 = bitcast %2* %self to i8* - %tmp8 = call i8* @objc_retain(i8* %tmp7) nounwind + %tmp8 = call i8* @llvm.objc.retain(i8* %tmp7) nounwind store %4* null, %4** %err, align 8 %tmp1 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_17", align 8 %tmp2 = load %struct.__CFString*, %struct.__CFString** @kUTTypePlainText, align 8 %tmp3 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_19", align 8 %tmp4 = bitcast %struct._class_t* %tmp1 to i8* - %call5 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp4, i8* %tmp3, %struct.__CFString* %tmp2) + %call5 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %tmp4, i8* %tmp3, %struct.__CFString* %tmp2) %tmp5 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_21", align 8 %tmp6 = bitcast %3* %pboard to i8* - %call76 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp6, i8* %tmp5, i8* %call5) - %tmp9 = call i8* @objc_retain(i8* %call76) nounwind + %call76 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %tmp6, i8* %tmp5, i8* %call5) + %tmp9 = call i8* @llvm.objc.retain(i8* %call76) nounwind %tobool = icmp eq i8* %tmp9, null br i1 %tobool, label %end, label %land.lhs.true land.lhs.true: ; preds = %entry %tmp11 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_23", align 8 - %call137 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp6, i8* %tmp11, i8* %tmp9) + %call137 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %tmp6, i8* %tmp11, i8* %tmp9) %tmp = bitcast i8* %call137 to %1* - %tmp10 = call i8* @objc_retain(i8* %call137) nounwind - call void @objc_release(i8* null) nounwind - %tmp12 = call i8* @objc_retain(i8* %call137) nounwind - call void @objc_release(i8* null) nounwind + %tmp10 = call i8* @llvm.objc.retain(i8* %call137) nounwind + call void @llvm.objc.release(i8* null) nounwind + %tmp12 = call i8* @llvm.objc.retain(i8* %call137) nounwind + call void @llvm.objc.release(i8* null) nounwind %tobool16 = icmp eq i8* %call137, null br i1 %tobool16, label %end, label %if.then if.then: ; preds = %land.lhs.true %tmp19 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_25", align 8 - %call21 = call signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*)*)(i8* %call137, i8* %tmp19) + %call21 = call signext i8 bitcast (i8* (i8*, i8*, ...)* @llvm.objc.msgSend to i8 (i8*, i8*)*)(i8* %call137, i8* %tmp19) %tobool22 = icmp eq i8 %call21, 0 br i1 %tobool22, label %if.then44, label %land.lhs.true23 @@ -2908,10 +2908,10 @@ land.lhs.true23: ; preds = %if.then %tmp24 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_26", align 8 %tmp26 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_28", align 8 %tmp27 = bitcast %struct._class_t* %tmp24 to i8* - %call2822 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp27, i8* %tmp26, i8* %call137) + %call2822 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %tmp27, i8* %tmp26, i8* %call137) %tmp13 = bitcast i8* %call2822 to %5* - %tmp14 = call i8* @objc_retain(i8* %call2822) nounwind - call void @objc_release(i8* null) nounwind + %tmp14 = call i8* @llvm.objc.retain(i8* %call2822) nounwind + call void @llvm.objc.release(i8* null) nounwind %tobool30 = icmp eq i8* %call2822, null br i1 %tobool30, label %if.then44, label %if.end @@ -2919,38 +2919,38 @@ if.end: ; preds = %land.lhs.true23 %tmp32 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_29", align 8 %tmp33 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_31", align 8 %tmp34 = bitcast %struct._class_t* %tmp32 to i8* - %call35 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp34, i8* %tmp33) + %call35 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %tmp34, i8* %tmp33) %tmp37 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_33", align 8 - %call3923 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %call35, i8* %tmp37, i8* %call2822, i32 signext 1, %4** %err) + %call3923 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %call35, i8* %tmp37, i8* %call2822, i32 signext 1, %4** %err) %cmp = icmp eq i8* %call3923, null br i1 %cmp, label %if.then44, label %end if.then44: ; preds = %if.end, %land.lhs.true23, %if.then %url.025 = phi %5* [ %tmp13, %if.end ], [ %tmp13, %land.lhs.true23 ], [ null, %if.then ] %tmp49 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_35", align 8 - %call51 = call %struct._NSRange bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to %struct._NSRange (i8*, i8*, i64, i64)*)(i8* %call137, i8* %tmp49, i64 0, i64 0) + %call51 = call %struct._NSRange bitcast (i8* (i8*, i8*, ...)* @llvm.objc.msgSend to %struct._NSRange (i8*, i8*, i64, i64)*)(i8* %call137, i8* %tmp49, i64 0, i64 0) %call513 = extractvalue %struct._NSRange %call51, 0 %call514 = extractvalue %struct._NSRange %call51, 1 %tmp52 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_37", align 8 - %call548 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %call137, i8* %tmp52, i64 %call513, i64 %call514) + %call548 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %call137, i8* %tmp52, i64 %call513, i64 %call514) %tmp55 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_38", align 8 %tmp56 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_40", align 8 %tmp57 = bitcast %struct._class_t* %tmp55 to i8* - %call58 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp57, i8* %tmp56) + %call58 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %tmp57, i8* %tmp56) %tmp59 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_42", align 8 - %call6110 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %call548, i8* %tmp59, i8* %call58) - %tmp15 = call i8* @objc_retain(i8* %call6110) nounwind - call void @objc_release(i8* %call137) nounwind + %call6110 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %call548, i8* %tmp59, i8* %call58) + %tmp15 = call i8* @llvm.objc.retain(i8* %call6110) nounwind + call void @llvm.objc.release(i8* %call137) nounwind %tmp64 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_46", align 8 - %call66 = call signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*, %1*)*)(i8* %call6110, i8* %tmp64, %1* bitcast (%struct.NSConstantString* @_unnamed_cfstring_44 to %1*)) + %call66 = call signext i8 bitcast (i8* (i8*, i8*, ...)* @llvm.objc.msgSend to i8 (i8*, i8*, %1*)*)(i8* %call6110, i8* %tmp64, %1* bitcast (%struct.NSConstantString* @_unnamed_cfstring_44 to %1*)) %tobool67 = icmp eq i8 %call66, 0 br i1 %tobool67, label %if.end74, label %if.then68 if.then68: ; preds = %if.then44 %tmp70 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_48", align 8 - %call7220 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %call6110, i8* %tmp70) - %tmp16 = call i8* @objc_retain(i8* %call7220) nounwind - call void @objc_release(i8* %call6110) nounwind + %call7220 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %call6110, i8* %tmp70) + %tmp16 = call i8* @llvm.objc.retain(i8* %call7220) nounwind + call void @llvm.objc.release(i8* %call6110) nounwind br label %if.end74 if.end74: ; preds = %if.then68, %if.then44 @@ -2964,7 +2964,7 @@ if.end74: ; preds = %if.then68, %if.then land.lhs.true80: ; preds = %if.end74 %tmp82 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_25", align 8 - %call84 = call signext i8 bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to i8 (i8*, i8*)*)(i8* %filename.0.in, i8* %tmp82) + %call84 = call signext i8 bitcast (i8* (i8*, i8*, ...)* @llvm.objc.msgSend to i8 (i8*, i8*)*)(i8* %filename.0.in, i8* %tmp82) %tobool86 = icmp eq i8 %call84, 0 br i1 %tobool86, label %if.then109, label %if.end106 @@ -2972,17 +2972,17 @@ if.end106: ; preds = %land.lhs.true80 %tmp88 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_26", align 8 %tmp90 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_28", align 8 %tmp91 = bitcast %struct._class_t* %tmp88 to i8* - %call9218 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp91, i8* %tmp90, i8* %filename.0.in) + %call9218 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %tmp91, i8* %tmp90, i8* %filename.0.in) %tmp20 = bitcast i8* %call9218 to %5* - %tmp21 = call i8* @objc_retain(i8* %call9218) nounwind + %tmp21 = call i8* @llvm.objc.retain(i8* %call9218) nounwind %tmp22 = bitcast %5* %url.025 to i8* - call void @objc_release(i8* %tmp22) nounwind + call void @llvm.objc.release(i8* %tmp22) nounwind %tmp94 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_29", align 8 %tmp95 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_31", align 8 %tmp96 = bitcast %struct._class_t* %tmp94 to i8* - %call97 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp96, i8* %tmp95) + %call97 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %tmp96, i8* %tmp95) %tmp99 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_33", align 8 - %call10119 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %call97, i8* %tmp99, i8* %call9218, i32 signext 1, %4** %err) + %call10119 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %call97, i8* %tmp99, i8* %call9218, i32 signext 1, %4** %err) %phitmp = icmp eq i8* %call10119, null br i1 %phitmp, label %if.then109, label %end @@ -3000,12 +3000,12 @@ if.then112: ; preds = %if.then109 %tmp118 = load %1*, %1** @NSFilePathErrorKey, align 8 %tmp119 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_53", align 8 %tmp120 = bitcast %struct._class_t* %tmp115 to i8* - %call12113 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp120, i8* %tmp119, %1* %call117, %1* %tmp118, i8* null) + %call12113 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %tmp120, i8* %tmp119, %1* %call117, %1* %tmp118, i8* null) %tmp122 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_55", align 8 %tmp123 = bitcast %struct._class_t* %tmp113 to i8* - %call12414 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp123, i8* %tmp122, %1* %tmp114, i64 258, i8* %call12113) - %tmp23 = call i8* @objc_retain(i8* %call12414) nounwind - %tmp25 = call i8* @objc_autorelease(i8* %tmp23) nounwind + %call12414 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %tmp123, i8* %tmp122, %1* %tmp114, i64 258, i8* %call12113) + %tmp23 = call i8* @llvm.objc.retain(i8* %call12414) nounwind + %tmp25 = call i8* @llvm.objc.autorelease(i8* %tmp23) nounwind %tmp28 = bitcast i8* %tmp25 to %4* store %4* %tmp28, %4** %err, align 8 br label %if.end125 @@ -3015,44 +3015,44 @@ if.end125: ; preds = %if.then112, %if.the %tmp126 = load %struct._class_t*, %struct._class_t** @"\01L_OBJC_CLASSLIST_REFERENCES_$_56", align 8 %tmp128 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_58", align 8 %tmp129 = bitcast %struct._class_t* %tmp126 to i8* - %call13015 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %tmp129, i8* %tmp128, %4* %tmp127) + %call13015 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %tmp129, i8* %tmp128, %4* %tmp127) %tmp131 = load i8*, i8** @"\01L_OBJC_SELECTOR_REFERENCES_60", align 8 - %call13317 = call i8* (i8*, i8*, ...) @objc_msgSend(i8* %call13015, i8* %tmp131) + %call13317 = call i8* (i8*, i8*, ...) @llvm.objc.msgSend(i8* %call13015, i8* %tmp131) br label %end end: ; preds = %if.end125, %if.end106, %if.end, %land.lhs.true, %entry %filename.2 = phi %1* [ %filename.0, %if.end106 ], [ %filename.0, %if.end125 ], [ %tmp, %land.lhs.true ], [ null, %entry ], [ %tmp, %if.end ] %origFilename.0 = phi %1* [ %tmp, %if.end106 ], [ %tmp, %if.end125 ], [ %tmp, %land.lhs.true ], [ null, %entry ], [ %tmp, %if.end ] %url.2 = phi %5* [ %tmp20, %if.end106 ], [ %url.129, %if.end125 ], [ null, %land.lhs.true ], [ null, %entry ], [ %tmp13, %if.end ] - call void @objc_release(i8* %tmp9) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %tmp9) nounwind, !clang.imprecise_release !0 %tmp29 = bitcast %5* %url.2 to i8* - call void @objc_release(i8* %tmp29) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %tmp29) nounwind, !clang.imprecise_release !0 %tmp30 = bitcast %1* %origFilename.0 to i8* - call void @objc_release(i8* %tmp30) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %tmp30) nounwind, !clang.imprecise_release !0 %tmp31 = bitcast %1* %filename.2 to i8* - call void @objc_release(i8* %tmp31) nounwind, !clang.imprecise_release !0 - call void @objc_release(i8* %tmp7) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %tmp31) nounwind, !clang.imprecise_release !0 + call void @llvm.objc.release(i8* %tmp7) nounwind, !clang.imprecise_release !0 ret void } declare i32 @__gxx_personality_v0(...) -declare i32 @objc_sync_enter(i8*) -declare i32 @objc_sync_exit(i8*) +declare i32 @llvm.objc.sync.enter(i8*) +declare i32 @llvm.objc.sync.exit(i8*) ; Make sure that we understand that objc_sync_{enter,exit} are IC_User not ; IC_Call/IC_CallOrUser. ; CHECK-LABEL: define void @test67( -; CHECK-NEXT: call i32 @objc_sync_enter(i8* %x) -; CHECK-NEXT: call i32 @objc_sync_exit(i8* %x) +; CHECK-NEXT: call i32 @llvm.objc.sync.enter(i8* %x) +; CHECK-NEXT: call i32 @llvm.objc.sync.exit(i8* %x) ; CHECK-NEXT: ret void ; CHECK-NEXT: } define void @test67(i8* %x) { - call i8* @objc_retain(i8* %x) - call i32 @objc_sync_enter(i8* %x) - call i32 @objc_sync_exit(i8* %x) - call void @objc_release(i8* %x), !clang.imprecise_release !0 + call i8* @llvm.objc.retain(i8* %x) + call i32 @llvm.objc.sync.enter(i8* %x) + call i32 @llvm.objc.sync.exit(i8* %x) + call void @llvm.objc.release(i8* %x), !clang.imprecise_release !0 ret void } @@ -3069,6 +3069,6 @@ define void @test67(i8* %x) { !4 = !DIFile(filename: "path/to/file", directory: "/path/to/dir") !5 = !{i32 2, !"Debug Info Version", i32 3} -; CHECK: attributes #0 = { nounwind readnone speculatable } ; CHECK: attributes [[NUW]] = { nounwind } +; CHECK: attributes #1 = { nounwind readnone speculatable } ; CHECK: ![[RELEASE]] = !{} |