| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 5 | 
 | ; RUN: opt -p globalopt -S %s | FileCheck %s | 
 |  | 
 | @llvm.global_ctors = appending global [3 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @ctor, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @ctor_nocfi, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @ctor_dso_local_equivalent, ptr null }] | 
 |  | 
 | @foo = internal global ptr null | 
 |  | 
 | declare void @user(ptr) | 
 |  | 
 | ;. | 
 | ; CHECK: @llvm.global_ctors = appending global [3 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @ctor, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @ctor_nocfi, ptr null }, { i32, ptr, ptr } { i32 65535, ptr @ctor_dso_local_equivalent, ptr null }] | 
 | ; CHECK: @foo = internal global ptr null | 
 | ;. | 
 | define void @ctor() { | 
 | ; CHECK-LABEL: define void @ctor() { | 
 | ; CHECK-NEXT:  [[ENTRY:.*:]] | 
 | ; CHECK-NEXT:    [[DST:%.*]] = alloca ptr, align 8 | 
 | ; CHECK-NEXT:    store ptr ptrauth (ptr @foo, i32 0), ptr [[DST]], align 8 | 
 | ; CHECK-NEXT:    call void @user(ptr [[DST]]) | 
 | ; CHECK-NEXT:    ret void | 
 | ; | 
 | entry: | 
 |   %dst = alloca ptr, align 8 | 
 |   store ptr ptrauth (ptr @foo, i32 0), ptr %dst, align 8 | 
 |   call void @user(ptr %dst) | 
 |   ret void | 
 | } | 
 |  | 
 | define void @ctor_nocfi() { | 
 | ; CHECK-LABEL: define void @ctor_nocfi() { | 
 | ; CHECK-NEXT:  [[ENTRY:.*:]] | 
 | ; CHECK-NEXT:    [[DST:%.*]] = alloca ptr, align 8 | 
 | ; CHECK-NEXT:    store ptr no_cfi @foo, ptr [[DST]], align 8 | 
 | ; CHECK-NEXT:    call void @user(ptr [[DST]]) | 
 | ; CHECK-NEXT:    ret void | 
 | ; | 
 | entry: | 
 |   %dst = alloca ptr, align 8 | 
 |   store ptr no_cfi @foo, ptr %dst, align 8 | 
 |   call void @user(ptr %dst) | 
 |   ret void | 
 | } | 
 |  | 
 | define void @fn() { | 
 | ; CHECK-LABEL: define void @fn() { | 
 | ; CHECK-NEXT:    ret void | 
 | ; | 
 |   ret void | 
 | } | 
 |  | 
 | define void @ctor_dso_local_equivalent() { | 
 | ; CHECK-LABEL: define void @ctor_dso_local_equivalent() { | 
 | ; CHECK-NEXT:  [[ENTRY:.*:]] | 
 | ; CHECK-NEXT:    [[DST:%.*]] = alloca ptr, align 8 | 
 | ; CHECK-NEXT:    store ptr dso_local_equivalent @fn, ptr [[DST]], align 8 | 
 | ; CHECK-NEXT:    call void @user(ptr [[DST]]) | 
 | ; CHECK-NEXT:    ret void | 
 | ; | 
 | entry: | 
 |   %dst = alloca ptr, align 8 | 
 |   store ptr dso_local_equivalent @fn, ptr %dst, align 8 | 
 |   call void @user(ptr %dst) | 
 |   ret void | 
 | } |