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