brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · c609042 Raw
234 lines · plain
1; RUN: llc -mtriple=x86_64-linux-gnu -relocation-model=pic -data-sections -o - %s --asm-verbose=0 | FileCheck %s -check-prefixes=CHECK2 3; Just ensure that we can write to an object file without error.4; RUN: llc -filetype=obj -mtriple=x86_64-linux-gnu -relocation-model=pic -data-sections -o /dev/null %s5 6declare void @extern_func()7 8; CHECK: call_extern_func:9; CHECK:       callq extern_func@PLT10define void @call_extern_func() {11  call void dso_local_equivalent @extern_func()12  ret void13}14 15declare hidden void @hidden_func()16declare protected void @protected_func()17declare dso_local void @dso_local_func()18define internal void @internal_func() {19entry:20  ret void21}22define private void @private_func() {23entry:24  ret void25}26 27; CHECK: call_hidden_func:28; CHECK:   callq hidden_func{{$}}29define void @call_hidden_func() {30  call void dso_local_equivalent @hidden_func()31  ret void32}33 34; CHECK: call_protected_func:35; CHECK:   callq protected_func{{$}}36define void @call_protected_func() {37  call void dso_local_equivalent @protected_func()38  ret void39}40 41; CHECK: call_dso_local_func:42; CHECK:   callq dso_local_func{{$}}43define void @call_dso_local_func() {44  call void dso_local_equivalent @dso_local_func()45  ret void46}47 48; CHECK: call_internal_func:49; CHECK:   callq internal_func{{$}}50define void @call_internal_func() {51  call void dso_local_equivalent @internal_func()52  ret void53}54 55define void @aliasee_func() {56entry:57  ret void58}59 60@alias_func = alias void (), ptr @aliasee_func61@dso_local_alias_func = dso_local alias void (), ptr @aliasee_func62 63; CHECK: call_alias_func:64; CHECK:   callq alias_func@PLT65define void @call_alias_func() {66  call void dso_local_equivalent @alias_func()67  ret void68}69 70; CHECK: call_dso_local_alias_func:71; CHECK:   callq .Ldso_local_alias_func$local{{$}}72define void @call_dso_local_alias_func() {73  call void dso_local_equivalent @dso_local_alias_func()74  ret void75}76 77@ifunc_func = ifunc void (), ptr @resolver78@dso_local_ifunc_func = dso_local ifunc void (), ptr @resolver79 80define internal ptr @resolver() {81entry:82  ret ptr null83}84 85; If an ifunc is not dso_local already, then we should still emit a stub for it86; to ensure it will be dso_local.87; CHECK: call_ifunc_func:88; CHECK:   callq ifunc_func@PLT89define void @call_ifunc_func() {90  call void dso_local_equivalent @ifunc_func()91  ret void92}93 94; CHECK: call_dso_local_ifunc_func:95; CHECK:   callq dso_local_ifunc_func{{$}}96define void @call_dso_local_ifunc_func() {97  call void dso_local_equivalent @dso_local_ifunc_func()98  ret void99}100 101;; PR57815102;; Ensure dso_local_equivalent works the exact same way as the previous103;; examples but with forward-referenced symbols.104 105; CHECK: call_forward_func:106; CHECK:   callq forward_extern_func@PLT107define void @call_forward_func() {108  call void dso_local_equivalent @forward_extern_func()109  ret void110}111 112; CHECK: call_forward_hidden_func:113; CHECK:   callq forward_hidden_func{{$}}114define void @call_forward_hidden_func() {115  call void dso_local_equivalent @forward_hidden_func()116  ret void117}118 119; CHECK: call_forward_protected_func:120; CHECK:   callq forward_protected_func{{$}}121define void @call_forward_protected_func() {122  call void dso_local_equivalent @forward_protected_func()123  ret void124}125 126; CHECK: call_forward_dso_local_func:127; CHECK:   callq forward_dso_local_func{{$}}128define void @call_forward_dso_local_func() {129  call void dso_local_equivalent @forward_dso_local_func()130  ret void131}132 133; CHECK: call_forward_internal_func:134; CHECK:   callq forward_internal_func{{$}}135define void @call_forward_internal_func() {136  call void dso_local_equivalent @forward_internal_func()137  ret void138}139 140declare hidden void @forward_hidden_func()141declare protected void @forward_protected_func()142declare dso_local void @forward_dso_local_func()143define internal void @forward_internal_func() {144entry:145  ret void146}147define private void @forward_private_func() {148entry:149  ret void150}151 152; CHECK: call_forward_alias_func:153; CHECK:   callq forward_alias_func@PLT154define void @call_forward_alias_func() {155  call void dso_local_equivalent @forward_alias_func()156  ret void157}158 159; CHECK: call_forward_dso_local_alias_func:160; CHECK:   callq .Lforward_dso_local_alias_func$local{{$}}161define void @call_forward_dso_local_alias_func() {162  call void dso_local_equivalent @forward_dso_local_alias_func()163  ret void164}165 166define void @forward_aliasee_func() {167entry:168  ret void169}170 171@forward_alias_func = alias void (), ptr @forward_aliasee_func172@forward_dso_local_alias_func = dso_local alias void (), ptr @forward_aliasee_func173 174; If an ifunc is not dso_local already, then we should still emit a stub for it175; to ensure it will be dso_local.176; CHECK: call_forward_ifunc_func:177; CHECK:   callq forward_ifunc_func@PLT178define void @call_forward_ifunc_func() {179  call void dso_local_equivalent @forward_ifunc_func()180  ret void181}182 183; CHECK: call_forward_dso_local_ifunc_func:184; CHECK:   callq forward_dso_local_ifunc_func{{$}}185define void @call_forward_dso_local_ifunc_func() {186  call void dso_local_equivalent @forward_dso_local_ifunc_func()187  ret void188}189 190@forward_ifunc_func = ifunc void (), ptr @resolver191@forward_dso_local_ifunc_func = dso_local ifunc void (), ptr @resolver192 193;; Test "no-named" variables194; CHECK: call_no_name_hidden:195; CHECK:   callq __unnamed_{{[0-9]+}}{{$}}196define void @call_no_name_hidden() {197  call void dso_local_equivalent @0()198  ret void199}200 201; CHECK: call_no_name_extern:202; CHECK:   callq __unnamed_{{[0-9]+}}@PLT203define void @call_no_name_extern() {204  call void dso_local_equivalent @1()205  ret void206}207 208declare hidden void @0()209declare void @1()210declare void @forward_extern_func()211 212;; Note that we keep this at the very end because llc emits this after all the213;; functions.214; CHECK-LABEL: _ZTV1B:215; CHECK:         .long   0216; CHECK-NEXT:    .long   0217; CHECK-NEXT:    .long   f0@PLT-_ZTV1B-8218; CHECK-NEXT:    .long   f1@PLT-_ZTV1B-8219; CHECK-NEXT:    .long   f2@PLT-_ZTV1B-8220 221@_ZTV1B = dso_local constant { [5 x i32] } { [5 x i32] [222  i32 0,223  i32 0,224  i32 trunc (i64 sub (i64 ptrtoint (ptr dso_local_equivalent @f0 to i64), i64 ptrtoint (ptr getelementptr inbounds ({ [7 x i32] }, ptr @_ZTV1B, i32 0, i32 0, i32 2) to i64)) to i32),225  i32 trunc (i64 sub (i64 ptrtoint (ptr dso_local_equivalent @f1 to i64), i64 ptrtoint (ptr getelementptr inbounds ({ [7 x i32] }, ptr @_ZTV1B, i32 0, i32 0, i32 2) to i64)) to i32),226  i32 trunc (i64 sub (i64 ptrtoint (ptr dso_local_equivalent @f2 to i64), i64 ptrtoint (ptr getelementptr inbounds ({ [7 x i32] }, ptr @_ZTV1B, i32 0, i32 0, i32 2) to i64)) to i32)227] }228 229declare void @f0()230declare void @f1()231define dso_local void @f2() {232  ret void233}234