diff options
| author | Dan Gohman <gohman@apple.com> | 2011-10-17 18:48:25 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2011-10-17 18:48:25 +0000 |
| commit | 1736c14b857c24f613d3e5d6daed725b0543e5f5 (patch) | |
| tree | 7c94a7a6153913d6702435a83560c4a17c46d399 /llvm/test | |
| parent | 63a4ea185965b3278fb07b7b865910eb18ee83ad (diff) | |
| download | bcm5719-llvm-1736c14b857c24f613d3e5d6daed725b0543e5f5.tar.gz bcm5719-llvm-1736c14b857c24f613d3e5d6daed725b0543e5f5.zip | |
Suppress partial retain+release elimination when there's a
possibility that it will span multiple CFG diamonds/triangles which
could have different controlling predicates. rdar://10282956
llvm-svn: 142222
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/Transforms/ObjCARC/basic.ll | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/llvm/test/Transforms/ObjCARC/basic.ll b/llvm/test/Transforms/ObjCARC/basic.ll index 575cf42d4e6..861173b9c9e 100644 --- a/llvm/test/Transforms/ObjCARC/basic.ll +++ b/llvm/test/Transforms/ObjCARC/basic.ll @@ -86,6 +86,37 @@ alt_return: ret void } +; Don't do partial elimination into two different CFG diamonds. + +; CHECK: define void @test1b( +; CHECK: entry: +; CHECK: tail call i8* @objc_retain(i8* %x) nounwind +; CHECK-NOT: @objc_ +; CHECK: if.end5: +; CHECK: tail call void @objc_release(i8* %x) nounwind, !clang.imprecise_release !0 +; CHECK-NOT: @objc_ +; CHECK: } +define void @test1b(i8* %x, i1 %p, i1 %q) { +entry: + tail call i8* @objc_retain(i8* %x) nounwind + br i1 %p, label %if.then, label %if.end + +if.then: ; preds = %entry + tail call void @callee() + br label %if.end + +if.end: ; preds = %if.then, %entry + br i1 %q, label %if.then3, label %if.end5 + +if.then3: ; preds = %if.end + tail call void @use_pointer(i8* %x) + br label %if.end5 + +if.end5: ; preds = %if.then3, %if.end + tail call void @objc_release(i8* %x) nounwind, !clang.imprecise_release !0 + ret void +} + ; Like test0 but the pointer is passed to an intervening call, ; so the optimization is not safe. |

