diff options
Diffstat (limited to 'test/Transforms/ObjCARC/contract-storestrong-ivar.ll')
-rw-r--r-- | test/Transforms/ObjCARC/contract-storestrong-ivar.ll | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/test/Transforms/ObjCARC/contract-storestrong-ivar.ll b/test/Transforms/ObjCARC/contract-storestrong-ivar.ll new file mode 100644 index 0000000000..4ad78e7534 --- /dev/null +++ b/test/Transforms/ObjCARC/contract-storestrong-ivar.ll @@ -0,0 +1,31 @@ +; RUN: opt -objc-arc-contract -S < %s | FileCheck %s + +; CHECK: call void @objc_storeStrong(i8** + +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" +target triple = "x86_64-apple-darwin11.0.0" + +%0 = type opaque +%1 = type opaque + +@"OBJC_IVAR_$_Controller.preferencesController" = external global i64, section "__DATA, __objc_const", align 8 + +declare i8* @objc_retain(i8*) + +declare void @objc_release(i8*) + +define hidden void @y(%0* nocapture %self, %1* %preferencesController) nounwind { +entry: + %ivar = load i64* @"OBJC_IVAR_$_Controller.preferencesController", align 8 + %tmp = bitcast %0* %self to i8* + %add.ptr = getelementptr inbounds i8* %tmp, i64 %ivar + %tmp1 = bitcast i8* %add.ptr to %1** + %tmp2 = load %1** %tmp1, align 8 + %tmp3 = bitcast %1* %preferencesController to i8* + %tmp4 = tail call i8* @objc_retain(i8* %tmp3) nounwind + %tmp5 = bitcast %1* %tmp2 to i8* + tail call void @objc_release(i8* %tmp5) nounwind + %tmp6 = bitcast i8* %tmp4 to %1* + store %1* %tmp6, %1** %tmp1, align 8 + ret void +} |