brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.1 KiB · 4711360 Raw
195 lines · cpp
1// RUN: %clang_cc1 -triple powerpc-ibm-aix-xcoff -emit-llvm -x c++ \2// RUN:     -std=c++2a < %s | \3// RUN:   FileCheck --check-prefixes=CHECK,CHECK32 %s4 5// RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -emit-llvm -x c++ \6// RUN:     -std=c++2a < %s | \7// RUN:   FileCheck --check-prefixes=CHECK,CHECK64 %s8 9namespace test1 {10  struct Test1 {11    Test1();12    ~Test1();13  } t1, t2;14} // namespace test115 16namespace test2 {17  int foo() { return 3; }18  int x = foo();19} // namespace test220 21namespace test3 {22  struct Test3 {23    constexpr Test3() {};24    ~Test3() {};25  };26 27  constinit Test3 t;28} // namespace test329 30namespace test4 {31  struct Test4 {32    Test4();33    ~Test4();34  };35 36  void f() {37    static Test4 staticLocal;38  }39} // namespace test440 41// CHECK: @_ZGVZN5test41fEvE11staticLocal = internal global i64 0, align 842// CHECK: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I__, ptr null }]43// CHECK: @llvm.global_dtors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__D_a, ptr null }]44 45// CHECK: define internal void @__cxx_global_var_init() [[ATTR:#[0-9]+]] {46// CHECK: entry:47// CHECK:   call void @_ZN5test15Test1C1Ev(ptr {{[^,]*}} @_ZN5test12t1E)48// CHECK:   %0 = call i32 @atexit(ptr @__dtor__ZN5test12t1E)49// CHECK:   ret void50// CHECK: }51 52// CHECK: define internal void @__dtor__ZN5test12t1E() [[ATTR:#[0-9]+]] {53// CHECK: entry:54// CHECK:   call void @_ZN5test15Test1D1Ev(ptr @_ZN5test12t1E)55// CHECK:   ret void56// CHECK: }57 58// CHECK: declare i32 @atexit(ptr)59 60// CHECK: define internal void @__finalize__ZN5test12t1E() [[ATTR:#[0-9]+]] {61// CHECK: entry:62// CHECK:   %0 = call i32 @unatexit(ptr @__dtor__ZN5test12t1E)63// CHECK:   %needs_destruct = icmp eq i32 %0, 064// CHECK:   br i1 %needs_destruct, label %destruct.call, label %destruct.end65 66// CHECK: destruct.call:67// CHECK:   call void @__dtor__ZN5test12t1E()68// CHECK:   br label %destruct.end69 70// CHECK: destruct.end:71// CHECK:   ret void72// CHECK: }73 74// CHECK: declare i32 @unatexit(ptr)75 76// CHECK: define internal void @__cxx_global_var_init.1() [[ATTR:#[0-9]+]] {77// CHECK: entry:78// CHECK:   call void @_ZN5test15Test1C1Ev(ptr {{[^,]*}} @_ZN5test12t2E)79// CHECK:   %0 = call i32 @atexit(ptr @__dtor__ZN5test12t2E)80// CHECK:   ret void81// CHECK: }82 83// CHECK: define internal void @__dtor__ZN5test12t2E() [[ATTR:#[0-9]+]] {84// CHECK: entry:85// CHECK:   call void @_ZN5test15Test1D1Ev(ptr @_ZN5test12t2E)86// CHECK:   ret void87// CHECK: }88 89// CHECK: define internal void @__finalize__ZN5test12t2E() [[ATTR:#[0-9]+]] {90// CHECK: entry:91// CHECK:   %0 = call i32 @unatexit(ptr @__dtor__ZN5test12t2E)92// CHECK:   %needs_destruct = icmp eq i32 %0, 093// CHECK:   br i1 %needs_destruct, label %destruct.call, label %destruct.end94 95// CHECK: destruct.call:96// CHECK:   call void @__dtor__ZN5test12t2E()97// CHECK:   br label %destruct.end98 99// CHECK: destruct.end:100// CHECK:   ret void101// CHECK: }102 103// CHECK: define internal void @__cxx_global_var_init.2() [[ATTR:#[0-9]+]] {104// CHECK: entry:105// CHECK32: %call = call noundef i32 @_ZN5test23fooEv()106// CHECK64: %call = call noundef signext i32 @_ZN5test23fooEv()107// CHECK:   store i32 %call, ptr @_ZN5test21xE108// CHECK:   ret void109// CHECK: }110 111// CHECK: define internal void @__cxx_global_var_init.3() [[ATTR:#[0-9]+]] {112// CHECK: entry:113// CHECK:   %0 = call i32 @atexit(ptr @__dtor__ZN5test31tE)114// CHECK:   ret void115// CHECK: }116 117// CHECK: define internal void @__dtor__ZN5test31tE() [[ATTR:#[0-9]+]] {118// CHECK: entry:119// CHECK:   call void @_ZN5test35Test3D1Ev(ptr @_ZN5test31tE)120// CHECK:   ret void121// CHECK: }122 123// CHECK: define internal void @__finalize__ZN5test31tE() [[ATTR:#[0-9]+]] {124// CHECK: entry:125// CHECK:   %0 = call i32 @unatexit(ptr @__dtor__ZN5test31tE)126// CHECK:   %needs_destruct = icmp eq i32 %0, 0127// CHECK:   br i1 %needs_destruct, label %destruct.call, label %destruct.end128 129// CHECK: destruct.call:130// CHECK:   call void @__dtor__ZN5test31tE()131// CHECK:   br label %destruct.end132 133// CHECK: destruct.end:134// CHECK:   ret void135// CHECK: }136 137// CHECK: define void @_ZN5test41fEv() [[ATTR:#[0-9]+]] {138// CHECK: entry:139// CHECK:   %0 = load atomic i8, ptr @_ZGVZN5test41fEvE11staticLocal acquire, align 8140// CHECK:   %guard.uninitialized = icmp eq i8 %0, 0141// CHECK:   br i1 %guard.uninitialized, label %init.check, label %init.end142 143// CHECK: init.check:144// CHECK:   %1 = call i32 @__cxa_guard_acquire(ptr @_ZGVZN5test41fEvE11staticLocal)145// CHECK:   %tobool = icmp ne i32 %1, 0146// CHECK:   br i1 %tobool, label %init, label %init.end147 148// CHECK: init:149// CHECK:   call void @_ZN5test45Test4C1Ev(ptr {{[^,]*}} @_ZZN5test41fEvE11staticLocal)150// CHECK:   %2 = call i32 @atexit(ptr @__dtor__ZZN5test41fEvE11staticLocal)151// CHECK:   call void @__cxa_guard_release(ptr @_ZGVZN5test41fEvE11staticLocal)152// CHECK:   br label %init.end153 154// CHECK: init.end:155// CHECK:   ret void156// CHECK: }157 158// CHECK: define internal void @__dtor__ZZN5test41fEvE11staticLocal() [[ATTR:#[0-9]+]] {159// CHECK: entry:160// CHECK:   call void @_ZN5test45Test4D1Ev(ptr @_ZZN5test41fEvE11staticLocal)161// CHECK:   ret void162// CHECK: }163 164// CHECK: define internal void @__finalize__ZZN5test41fEvE11staticLocal() [[ATTR:#[0-9]+]] {165// CHECK: entry:166// CHECK:   %0 = call i32 @unatexit(ptr @__dtor__ZZN5test41fEvE11staticLocal)167// CHECK:   %needs_destruct = icmp eq i32 %0, 0168// CHECK:   br i1 %needs_destruct, label %destruct.call, label %destruct.end169 170// CHECK: destruct.call:171// CHECK:   call void @__dtor__ZZN5test41fEvE11staticLocal()172// CHECK:   br label %destruct.end173 174// CHECK: destruct.end:175// CHECK:   ret void176// CHECK: }177 178// CHECK: define internal void @_GLOBAL__sub_I__() [[ATTR:#[0-9]+]] {179// CHECK: entry:180// CHECK:   call void @__cxx_global_var_init()181// CHECK:   call void @__cxx_global_var_init.1()182// CHECK:   call void @__cxx_global_var_init.2()183// CHECK:   call void @__cxx_global_var_init.3()184// CHECK:   ret void185// CHECK: }186 187// CHECK: define internal void @_GLOBAL__D_a() [[ATTR:#[0-9]+]] {188// CHECK: entry:189// CHECK:   call void @__finalize__ZZN5test41fEvE11staticLocal()190// CHECK:   call void @__finalize__ZN5test31tE()191// CHECK:   call void @__finalize__ZN5test12t2E()192// CHECK:   call void @__finalize__ZN5test12t1E()193// CHECK:   ret void194// CHECK: }195