; RUN: opt -S -passes=objc-arc < %s | FileCheck %s ; rdar://11434915 ; Delete the weak calls and replace them with just the net retain. ; CHECK: define void @test0(ptr %p) { ; CHECK-NEXT: call ptr @llvm.objc.retain(ptr %p) ; CHECK-NEXT: ret void define void @test0(ptr %p) { %weakBlock = alloca ptr, align 8 %tmp7 = call ptr @llvm.objc.initWeak(ptr %weakBlock, ptr %p) nounwind %tmp26 = call ptr @llvm.objc.loadWeakRetained(ptr %weakBlock) nounwind call void @llvm.objc.destroyWeak(ptr %weakBlock) nounwind ret void } ; CHECK: define ptr @test1(ptr %p) { ; CHECK-NEXT: call ptr @llvm.objc.retain(ptr %p) ; CHECK-NEXT: ret ptr %p define ptr @test1(ptr %p) { %weakBlock = alloca ptr, align 8 %tmp7 = call ptr @llvm.objc.initWeak(ptr %weakBlock, ptr %p) nounwind %tmp26 = call ptr @llvm.objc.loadWeakRetained(ptr %weakBlock) nounwind call void @llvm.objc.destroyWeak(ptr %weakBlock) nounwind ret ptr %tmp26 } ; CHECK: define ptr @test2(ptr %p, ptr %q) { ; CHECK-NEXT: call ptr @llvm.objc.retain(ptr %q) ; CHECK-NEXT: ret ptr %q define ptr @test2(ptr %p, ptr %q) { %weakBlock = alloca ptr, align 8 %tmp7 = call ptr @llvm.objc.initWeak(ptr %weakBlock, ptr %p) nounwind %tmp19 = call ptr @llvm.objc.storeWeak(ptr %weakBlock, ptr %q) nounwind %tmp26 = call ptr @llvm.objc.loadWeakRetained(ptr %weakBlock) nounwind call void @llvm.objc.destroyWeak(ptr %weakBlock) nounwind ret ptr %tmp26 } declare ptr @llvm.objc.initWeak(ptr, ptr) declare void @llvm.objc.destroyWeak(ptr) declare ptr @llvm.objc.loadWeakRetained(ptr) declare ptr @llvm.objc.storeWeak(ptr %weakBlock, ptr %q)