65 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 52; RUN: opt -p globalopt -S %s | FileCheck %s3 4@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 }]5 6@foo = internal global ptr null7 8declare void @user(ptr)9 10;.11; 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 }]12; CHECK: @foo = internal global ptr null13;.14define void @ctor() {15; CHECK-LABEL: define void @ctor() {16; CHECK-NEXT: [[ENTRY:.*:]]17; CHECK-NEXT: [[DST:%.*]] = alloca ptr, align 818; CHECK-NEXT: store ptr ptrauth (ptr @foo, i32 0), ptr [[DST]], align 819; CHECK-NEXT: call void @user(ptr [[DST]])20; CHECK-NEXT: ret void21;22entry:23 %dst = alloca ptr, align 824 store ptr ptrauth (ptr @foo, i32 0), ptr %dst, align 825 call void @user(ptr %dst)26 ret void27}28 29define void @ctor_nocfi() {30; CHECK-LABEL: define void @ctor_nocfi() {31; CHECK-NEXT: [[ENTRY:.*:]]32; CHECK-NEXT: [[DST:%.*]] = alloca ptr, align 833; CHECK-NEXT: store ptr no_cfi @foo, ptr [[DST]], align 834; CHECK-NEXT: call void @user(ptr [[DST]])35; CHECK-NEXT: ret void36;37entry:38 %dst = alloca ptr, align 839 store ptr no_cfi @foo, ptr %dst, align 840 call void @user(ptr %dst)41 ret void42}43 44define void @fn() {45; CHECK-LABEL: define void @fn() {46; CHECK-NEXT: ret void47;48 ret void49}50 51define void @ctor_dso_local_equivalent() {52; CHECK-LABEL: define void @ctor_dso_local_equivalent() {53; CHECK-NEXT: [[ENTRY:.*:]]54; CHECK-NEXT: [[DST:%.*]] = alloca ptr, align 855; CHECK-NEXT: store ptr dso_local_equivalent @fn, ptr [[DST]], align 856; CHECK-NEXT: call void @user(ptr [[DST]])57; CHECK-NEXT: ret void58;59entry:60 %dst = alloca ptr, align 861 store ptr dso_local_equivalent @fn, ptr %dst, align 862 call void @user(ptr %dst)63 ret void64}65