1; RUN: opt -S -passes=objc-arc-apelim < %s | FileCheck %s 2; rdar://10227311 3 4@llvm.global_ctors = appending global [2 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I_x, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__I_y, ptr null }] 5 6@x = global i32 0 7 8declare i32 @bar() nounwind 9 10define i32 @foo() nounwind { 11entry: 12 ret i32 5 13} 14 15define internal void @__cxx_global_var_init() { 16entry: 17 %call = call i32 @foo() 18 store i32 %call, ptr @x, align 4 19 ret void 20} 21 22define internal void @__dxx_global_var_init() { 23entry: 24 %call = call i32 @bar() 25 store i32 %call, ptr @x, align 4 26 ret void 27} 28 29; CHECK: define internal void @_GLOBAL__I_x() { 30; CHECK-NOT: @objc 31; CHECK: } 32define internal void @_GLOBAL__I_x() { 33entry: 34 %0 = call ptr @llvm.objc.autoreleasePoolPush() nounwind 35 call void @__cxx_global_var_init() 36 call void @llvm.objc.autoreleasePoolPop(ptr %0) nounwind 37 ret void 38} 39 40; CHECK: define internal void @_GLOBAL__I_y() { 41; CHECK: %0 = call ptr @llvm.objc.autoreleasePoolPush() [[NUW:#[0-9]+]] 42; CHECK: call void @llvm.objc.autoreleasePoolPop(ptr %0) [[NUW]] 43; CHECK: } 44define internal void @_GLOBAL__I_y() { 45entry: 46 %0 = call ptr @llvm.objc.autoreleasePoolPush() nounwind 47 call void @__dxx_global_var_init() 48 call void @llvm.objc.autoreleasePoolPop(ptr %0) nounwind 49 ret void 50} 51 52declare ptr @llvm.objc.autoreleasePoolPush() 53declare void @llvm.objc.autoreleasePoolPop(ptr) 54 55; CHECK: attributes #0 = { nounwind } 56