1*9880d681SAndroid Build Coastguard Worker; RUN: opt -S -basicaa -objc-arc < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; rdar://11434915 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; Delete the weak calls and replace them with just the net retain. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; CHECK: define void @test0(i8* %p) { 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call i8* @objc_retain(i8* %p) 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret void 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine void @test0(i8* %p) { 11*9880d681SAndroid Build Coastguard Worker %weakBlock = alloca i8*, align 8 12*9880d681SAndroid Build Coastguard Worker %tmp7 = call i8* @objc_initWeak(i8** %weakBlock, i8* %p) nounwind 13*9880d681SAndroid Build Coastguard Worker %tmp26 = call i8* @objc_loadWeakRetained(i8** %weakBlock) nounwind 14*9880d681SAndroid Build Coastguard Worker call void @objc_destroyWeak(i8** %weakBlock) nounwind 15*9880d681SAndroid Build Coastguard Worker ret void 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker; CHECK: define i8* @test1(i8* %p) { 19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call i8* @objc_retain(i8* %p) 20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i8* %p 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdefine i8* @test1(i8* %p) { 23*9880d681SAndroid Build Coastguard Worker %weakBlock = alloca i8*, align 8 24*9880d681SAndroid Build Coastguard Worker %tmp7 = call i8* @objc_initWeak(i8** %weakBlock, i8* %p) nounwind 25*9880d681SAndroid Build Coastguard Worker %tmp26 = call i8* @objc_loadWeakRetained(i8** %weakBlock) nounwind 26*9880d681SAndroid Build Coastguard Worker call void @objc_destroyWeak(i8** %weakBlock) nounwind 27*9880d681SAndroid Build Coastguard Worker ret i8* %tmp26 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; CHECK: define i8* @test2(i8* %p, i8* %q) { 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call i8* @objc_retain(i8* %q) 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i8* %q 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerdefine i8* @test2(i8* %p, i8* %q) { 35*9880d681SAndroid Build Coastguard Worker %weakBlock = alloca i8*, align 8 36*9880d681SAndroid Build Coastguard Worker %tmp7 = call i8* @objc_initWeak(i8** %weakBlock, i8* %p) nounwind 37*9880d681SAndroid Build Coastguard Worker %tmp19 = call i8* @objc_storeWeak(i8** %weakBlock, i8* %q) nounwind 38*9880d681SAndroid Build Coastguard Worker %tmp26 = call i8* @objc_loadWeakRetained(i8** %weakBlock) nounwind 39*9880d681SAndroid Build Coastguard Worker call void @objc_destroyWeak(i8** %weakBlock) nounwind 40*9880d681SAndroid Build Coastguard Worker ret i8* %tmp26 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdeclare i8* @objc_initWeak(i8**, i8*) 44*9880d681SAndroid Build Coastguard Workerdeclare void @objc_destroyWeak(i8**) 45*9880d681SAndroid Build Coastguard Workerdeclare i8* @objc_loadWeakRetained(i8**) 46*9880d681SAndroid Build Coastguard Workerdeclare i8* @objc_storeWeak(i8** %weakBlock, i8* %q) 47