brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 859f881 Raw
122 lines · plain
1; REQUIRES: x862; RUN: rm -rf %t && split-file %s %t && cd %t3; RUN: llvm-as a.ll -o a.bc4; RUN: llvm-as %p/Inputs/internalize-exportdyn.ll -o b.bc5; RUN: llvm-mc -filetype=obj -triple=x86_64 lib.s -o lib.o6; RUN: ld.lld a.bc b.bc lib.o -o out --export-dynamic -save-temps -pie7; RUN: llvm-dis < out.0.2.internalize.bc | FileCheck %s8; RUN: ld.lld a.bc b.bc lib.o -o out2 -shared -save-temps9; RUN: llvm-dis < out2.0.2.internalize.bc | FileCheck %s --check-prefix=DSO10 11;--- a.ll12target triple = "x86_64-unknown-linux-gnu"13target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"14 15$ext_and_ext = comdat any16$lo_and_ext = comdat any17$lo_and_wo = comdat any18$wo_and_lo = comdat any19 20@c = linkonce_odr constant i32 121@g = linkonce_odr global i32 122@u_c = linkonce_odr unnamed_addr constant i32 123@u_g = linkonce_odr unnamed_addr global i32 124@lu_c = linkonce_odr local_unnamed_addr constant i32 125@lu_g = linkonce_odr local_unnamed_addr global i32 126 27declare void @lib(i64)28 29define void @_start() {30  ret void31}32 33define void @foo() {34  ret void35}36 37define hidden void @bar() {38  ret void39}40 41define linkonce_odr void @zed() local_unnamed_addr {42  ret void43}44 45define linkonce_odr void @zed2() unnamed_addr {46  ret void47}48 49define linkonce_odr void @bah() {50  ret void51}52 53define linkonce_odr void @baz() {54  ret void55}56 57@use_baz = global ptr @baz58 59;; Test comdat symbols that are prevailing in this module and non-prevailing in the other module.60define void @ext_and_ext() local_unnamed_addr comdat {61  call void @foo(i64 1)62  ret void63}64 65;; linkonce_odr in this module and external in the other module.66define linkonce_odr void @lo_and_ext() local_unnamed_addr comdat {67  call void @foo(i64 1)68  ret void69}70 71;; linkonce_odr in this module and weak_odr in the other module.72define linkonce_odr void @lo_and_wo() local_unnamed_addr comdat {73  ret void74}75 76define weak_odr void @wo_and_lo() local_unnamed_addr comdat {77  ret void78}79 80; Check what gets internalized.81; CHECK: @c = weak_odr dso_local constant i32 182; CHECK: @g = weak_odr dso_local global i32 183; CHECK: @u_c = internal unnamed_addr constant i32 184; CHECK: @u_g = internal unnamed_addr global i32 185; CHECK: @lu_c = internal constant i32 186; CHECK: @lu_g = weak_odr dso_local global i32 187; CHECK: define dso_local void @_start()88; CHECK: define dso_local void @foo()89; CHECK: define internal void @bar()90; CHECK: define internal void @zed()91; CHECK: define internal void @zed2()92; CHECK: define weak_odr dso_local void @bah()93; CHECK: define weak_odr dso_local void @baz()94; CHECK: define dso_local void @ext_and_ext() comdat95; CHECK-NEXT: call void @foo(i64 1)96; CHECK: define internal void @lo_and_ext() comdat97; CHECK-NEXT: call void @foo(i64 1)98; CHECK: define weak_odr dso_local void @lo_and_wo() comdat99; CHECK: define weak_odr dso_local void @wo_and_lo() comdat100 101; DSO: @c = weak_odr constant i32 1102; DSO: @g = weak_odr global i32 1103; DSO: @u_c = internal unnamed_addr constant i32 1104; DSO: @u_g = internal unnamed_addr global i32 1105; DSO: @lu_c = internal constant i32 1106; DSO: @lu_g = weak_odr global i32 1107; DSO: define void @_start()108; DSO: define void @foo()109; DSO: define internal void @bar()110; DSO: define internal void @zed()111; DSO: define internal void @zed2()112; DSO: define weak_odr void @bah()113; DSO: define weak_odr void @baz()114; DSO: define void @ext_and_ext() comdat115; DSO: define internal void @lo_and_ext() comdat116; DSO: define weak_odr void @lo_and_wo() comdat117; DSO: define weak_odr void @wo_and_lo() comdat118 119;--- lib.s120.globl lib121lib:122