| ; RUN: opt -S -basicaa -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* @objc_retain(i8* %p) |
| ; CHECK-NEXT: ret void |
| |
| define void @test0(i8* %p) { |
| %weakBlock = alloca i8*, align 8 |
| %tmp7 = call i8* @objc_initWeak(i8** %weakBlock, i8* %p) nounwind |
| %tmp26 = call i8* @objc_loadWeakRetained(i8** %weakBlock) nounwind |
| call void @objc_destroyWeak(i8** %weakBlock) nounwind |
| ret void |
| } |
| |
| ; CHECK: define i8* @test1(i8* %p) { |
| ; CHECK-NEXT: call i8* @objc_retain(i8* %p) |
| ; CHECK-NEXT: ret i8* %p |
| |
| define i8* @test1(i8* %p) { |
| %weakBlock = alloca i8*, align 8 |
| %tmp7 = call i8* @objc_initWeak(i8** %weakBlock, i8* %p) nounwind |
| %tmp26 = call i8* @objc_loadWeakRetained(i8** %weakBlock) nounwind |
| call void @objc_destroyWeak(i8** %weakBlock) nounwind |
| ret i8* %tmp26 |
| } |
| |
| ; CHECK: define i8* @test2(i8* %p, i8* %q) { |
| ; CHECK-NEXT: call i8* @objc_retain(i8* %q) |
| ; CHECK-NEXT: ret i8* %q |
| |
| define i8* @test2(i8* %p, i8* %q) { |
| %weakBlock = alloca i8*, align 8 |
| %tmp7 = call i8* @objc_initWeak(i8** %weakBlock, i8* %p) nounwind |
| %tmp19 = call i8* @objc_storeWeak(i8** %weakBlock, i8* %q) nounwind |
| %tmp26 = call i8* @objc_loadWeakRetained(i8** %weakBlock) nounwind |
| call void @objc_destroyWeak(i8** %weakBlock) nounwind |
| ret i8* %tmp26 |
| } |
| |
| declare i8* @objc_initWeak(i8**, i8*) |
| declare void @objc_destroyWeak(i8**) |
| declare i8* @objc_loadWeakRetained(i8**) |
| declare i8* @objc_storeWeak(i8** %weakBlock, i8* %q) |