1; RUN: opt -passes=objc-arc -S < %s | FileCheck -check-prefix=ENABLE -check-prefix=CHECK %s 2; RUN: opt -passes=objc-arc -arc-opt-max-ptr-states=1 -S < %s | FileCheck -check-prefix=DISABLE -check-prefix=CHECK %s 3 4@g0 = common global ptr null, align 8 5 6; CHECK: call ptr @llvm.objc.retain 7; ENABLE-NOT: call ptr @llvm.objc.retain 8; DISABLE: call ptr @llvm.objc.retain 9; CHECK: call void @llvm.objc.release 10; ENABLE-NOT: call void @llvm.objc.release 11; DISABLE: call void @llvm.objc.release 12 13define void @foo0(ptr %a) { 14 %1 = tail call ptr @llvm.objc.retain(ptr %a) 15 %2 = tail call ptr @llvm.objc.retain(ptr %a) 16 %3 = load ptr, ptr @g0, align 8 17 store ptr %a, ptr @g0, align 8 18 tail call void @llvm.objc.release(ptr %3) 19 tail call void @llvm.objc.release(ptr %a), !clang.imprecise_release !0 20 ret void 21} 22 23declare ptr @llvm.objc.retain(ptr) 24declare void @llvm.objc.release(ptr) 25 26!0 = !{} 27