Home | History | Annotate | Download | only in GlobalOpt
      1 ; RUN: opt < %s -globalopt -S | FileCheck %s
      2 
      3 %0 = type { i32, void ()* }
      4 %struct.A = type { i8 }
      5 %struct.B = type { }
      6 
      7 @a = global %struct.A zeroinitializer, align 1
      8 @__dso_handle = external global i8*
      9 @llvm.global_ctors = appending global [1 x %0] [%0 { i32 65535, void ()* @_GLOBAL__I_a }]
     10 
     11 ; CHECK-NOT: call i32 @__cxa_atexit
     12 
     13 define internal void @__cxx_global_var_init() nounwind section "__TEXT,__StaticInit,regular,pure_instructions" {
     14   %1 = call i32 @__cxa_atexit(void (i8*)* bitcast (void (%struct.A*)* @_ZN1AD1Ev to void (i8*)*), i8* getelementptr inbounds (%struct.A* @a, i32 0, i32 0), i8* bitcast (i8** @__dso_handle to i8*))
     15   ret void
     16 }
     17 
     18 define linkonce_odr void @_ZN1AD1Ev(%struct.A* %this) nounwind align 2 {
     19   %t = bitcast %struct.A* %this to %struct.B*
     20   call void @_ZN1BD1Ev(%struct.B* %t)
     21   ret void
     22 }
     23 
     24 declare i32 @__cxa_atexit(void (i8*)*, i8*, i8*)
     25 
     26 define linkonce_odr void @_ZN1BD1Ev(%struct.B* %this) nounwind align 2 {
     27   ret void
     28 }
     29 
     30 define internal void @_GLOBAL__I_a() nounwind section "__TEXT,__StaticInit,regular,pure_instructions" {
     31   call void @__cxx_global_var_init()
     32   ret void
     33 }
     34