1
1
; REQUIRES: x86
2
- ; RUN: llvm-as %s -o %t.o
3
- ; RUN: llvm-as %p/Inputs/internalize-exportdyn.ll -o %t2.o
4
- ; RUN: ld.lld %t.o %t2.o -o %t2 --export-dynamic -save-temps
5
- ; RUN: llvm-dis < %t2.0.2.internalize.bc | FileCheck %s
6
- ; RUN: ld.lld %t.o %t2.o -o %t3 -shared -save-temps
7
- ; RUN: llvm-dis < %t3.0.2.internalize.bc | FileCheck %s --check-prefix=DSO
2
+ ; RUN: rm -rf %t && split-file %s %t && cd %t
3
+ ; RUN: llvm-as a.ll -o a.bc
4
+ ; RUN: llvm-as %p/Inputs/internalize-exportdyn.ll -o b.bc
5
+ ; RUN: llvm-mc -filetype=obj -triple=x86_64 lib.s -o lib.o
6
+ ; RUN: ld.lld a.bc b.bc lib.o -o out --export-dynamic -save-temps
7
+ ; RUN: llvm-dis < out.0.2.internalize.bc | FileCheck %s
8
+ ; RUN: ld.lld a.bc b.bc lib.o -o out2 -shared -save-temps
9
+ ; RUN: llvm-dis < out2.0.2.internalize.bc | FileCheck %s --check-prefix=DSO
8
10
11
+ ;--- a.ll
9
12
target triple = "x86_64-unknown-linux-gnu"
10
13
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
11
14
15
+ $ext_and_ext = comdat any
16
+ $lo_and_ext = comdat any
17
+ $lo_and_wo = comdat any
18
+ $wo_and_lo = comdat any
19
+
12
20
@c = linkonce_odr constant i32 1
13
21
@g = linkonce_odr global i32 1
14
22
@u_c = linkonce_odr unnamed_addr constant i32 1
15
23
@u_g = linkonce_odr unnamed_addr global i32 1
16
24
@lu_c = linkonce_odr local_unnamed_addr constant i32 1
17
25
@lu_g = linkonce_odr local_unnamed_addr global i32 1
18
26
27
+ declare void @lib (i64 )
28
+
19
29
define void @_start () {
20
30
ret void
21
31
}
@@ -46,6 +56,24 @@ define linkonce_odr void @baz() {
46
56
47
57
@use_baz = global ptr @baz
48
58
59
+ define void @ext_and_ext () local_unnamed_addr comdat {
60
+ call void @foo (i64 1 )
61
+ ret void
62
+ }
63
+
64
+ define linkonce_odr void @lo_and_ext () local_unnamed_addr comdat {
65
+ call void @foo (i64 1 )
66
+ ret void
67
+ }
68
+
69
+ define linkonce_odr void @lo_and_wo () local_unnamed_addr comdat {
70
+ ret void
71
+ }
72
+
73
+ define weak_odr void @wo_and_lo () local_unnamed_addr comdat {
74
+ ret void
75
+ }
76
+
49
77
; Check what gets internalized.
50
78
; CHECK: @c = weak_odr dso_local constant i32 1
51
79
; CHECK: @g = weak_odr dso_local global i32 1
@@ -60,6 +88,12 @@ define linkonce_odr void @baz() {
60
88
; CHECK: define internal void @zed2()
61
89
; CHECK: define weak_odr dso_local void @bah()
62
90
; CHECK: define weak_odr dso_local void @baz()
91
+ ; CHECK: define dso_local void @ext_and_ext() comdat
92
+ ; CHECK-NEXT: call void @foo(i64 1)
93
+ ; CHECK: define internal void @lo_and_ext() comdat
94
+ ; CHECK-NEXT: call void @foo(i64 1)
95
+ ; CHECK: define internal void @lo_and_wo() comdat
96
+ ; CHECK: define weak_odr dso_local void @wo_and_lo() comdat
63
97
64
98
; DSO: @c = weak_odr constant i32 1
65
99
; DSO: @g = weak_odr global i32 1
@@ -74,3 +108,11 @@ define linkonce_odr void @baz() {
74
108
; DSO: define internal void @zed2()
75
109
; DSO: define weak_odr void @bah()
76
110
; DSO: define weak_odr void @baz()
111
+ ; DSO: define void @ext_and_ext() comdat
112
+ ; DSO: define internal void @lo_and_ext() comdat
113
+ ; DSO: define internal void @lo_and_wo() comdat
114
+ ; DSO: define weak_odr void @wo_and_lo() comdat
115
+
116
+ ;--- lib.s
117
+ .globl lib
118
+ lib:
0 commit comments