diff options
author | Dan Gohman <gohman@apple.com> | 2012-07-23 19:27:31 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2012-07-23 19:27:31 +0000 |
commit | f64ff8ed3a5b5b3c5b2fd2f16dc32b4aadc06004 (patch) | |
tree | 3578945d4cac15cf9d64e7395c74f2351f8b2c37 /llvm/test/Transforms/ObjCARC/basic.ll | |
parent | adec58c0915baabb20000d03af7872ad7dc898ea (diff) | |
download | bcm5719-llvm-f64ff8ed3a5b5b3c5b2fd2f16dc32b4aadc06004.tar.gz bcm5719-llvm-f64ff8ed3a5b5b3c5b2fd2f16dc32b4aadc06004.zip |
An objc_retain can serve as a may-use for a different pointer.
rdar://11931823.
llvm-svn: 160637
Diffstat (limited to 'llvm/test/Transforms/ObjCARC/basic.ll')
-rw-r--r-- | llvm/test/Transforms/ObjCARC/basic.ll | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/test/Transforms/ObjCARC/basic.ll b/llvm/test/Transforms/ObjCARC/basic.ll index ba2f778a28e..d9bb3f25bd7 100644 --- a/llvm/test/Transforms/ObjCARC/basic.ll +++ b/llvm/test/Transforms/ObjCARC/basic.ll @@ -1871,6 +1871,30 @@ return: ; preds = %if.then, %entry ret i8* %retval } +; An objc_retain can serve as a may-use for a different pointer. +; rdar://11931823 + +; CHECK: define void @test66( +; CHECK: %tmp7 = tail call i8* @objc_retain(i8* %cond) nounwind +; CHECK: tail call void @objc_release(i8* %cond) nounwind +; CHECK: } +define void @test66(i8* %tmp5, i8* %bar, i1 %tobool, i1 %tobool1, i8* %call) { +entry: + br i1 %tobool, label %cond.true, label %cond.end + +cond.true: + br label %cond.end + +cond.end: ; preds = %cond.true, %entry + %cond = phi i8* [ %tmp5, %cond.true ], [ %call, %entry ] + %tmp7 = tail call i8* @objc_retain(i8* %cond) nounwind + tail call void @objc_release(i8* %call) nounwind + %tmp8 = select i1 %tobool1, i8* %cond, i8* %bar + %tmp9 = tail call i8* @objc_retain(i8* %tmp8) nounwind + tail call void @objc_release(i8* %cond) nounwind + ret void +} + declare void @bar(i32 ()*) ; A few real-world testcases. |