Home | History | Annotate | Download | only in ObjCARC
      1 ; RUN: opt -S -objc-arc-apelim < %s | FileCheck %s
      2 
      3 ; See PR26774
      4 
      5 @llvm.global_ctors = appending global [2 x { i32, void ()* }] [{ i32, void ()* } { i32 65535, void ()* @_GLOBAL__I_x }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I_y }]
      6 
      7 @x = global i32 0
      8 
      9 declare i32 @bar() nounwind
     10 
     11 define linkonce_odr i32 @foo() nounwind {
     12 entry:
     13   ret i32 5
     14 }
     15 
     16 define internal void @__cxx_global_var_init() {
     17 entry:
     18   %call = call i32 @foo()
     19   store i32 %call, i32* @x, align 4
     20   ret void
     21 }
     22 
     23 define internal void @__dxx_global_var_init() {
     24 entry:
     25   %call = call i32 @bar()
     26   store i32 %call, i32* @x, align 4
     27   ret void
     28 }
     29 
     30 ; CHECK-LABEL: define internal void @_GLOBAL__I_x() {
     31 define internal void @_GLOBAL__I_x() {
     32 entry:
     33 ; CHECK:  call i8* @objc_autoreleasePoolPush()
     34 ; CHECK-NEXT:  call void @__cxx_global_var_init()
     35 ; CHECK-NEXT:  call void @objc_autoreleasePoolPop(i8* %0)
     36 ; CHECK-NEXT:  ret void
     37 
     38   %0 = call i8* @objc_autoreleasePoolPush() nounwind
     39   call void @__cxx_global_var_init()
     40   call void @objc_autoreleasePoolPop(i8* %0) nounwind
     41   ret void
     42 }
     43 
     44 define internal void @_GLOBAL__I_y() {
     45 entry:
     46   %0 = call i8* @objc_autoreleasePoolPush() nounwind
     47   call void @__dxx_global_var_init()
     48   call void @objc_autoreleasePoolPop(i8* %0) nounwind
     49   ret void
     50 }
     51 
     52 declare i8* @objc_autoreleasePoolPush()
     53 declare void @objc_autoreleasePoolPop(i8*)
     54