blob: d54e74e7b11c9a97d13c6f973845c5c1f44da5e8 [file] [log] [blame]
Mehdi Aminia71a5a62016-04-21 05:47:17 +00001; RUN: opt -module-summary %s -o %t1.bc
2; RUN: opt -module-summary %p/Inputs/alias_import.ll -o %t2.bc
3; RUN: llvm-lto -thinlto-action=thinlink -o %t.index.bc %t1.bc %t2.bc
Joel E. Denny9fa9c932018-07-11 20:25:49 +00004; RUN: llvm-lto -thinlto-action=promote -thinlto-index %t.index.bc %t2.bc -o - | llvm-dis -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix=PROMOTE
5; RUN: llvm-lto -thinlto-action=import -thinlto-index %t.index.bc %t1.bc -o - | llvm-dis -o - | FileCheck -allow-deprecated-dag-overlap %s --check-prefix=IMPORT
Mehdi Aminia71a5a62016-04-21 05:47:17 +00006
Teresa Johnson81bbf742017-12-16 00:18:12 +00007; Alias can't point to "available_externally", so they are implemented by
8; importing the alias as an available_externally definition copied from the
9; aliasee's body.
Mehdi Aminia71a5a62016-04-21 05:47:17 +000010; PROMOTE-DAG: @globalfuncAlias = alias void (...), bitcast (void ()* @globalfunc to void (...)*)
11; PROMOTE-DAG: @globalfuncWeakAlias = weak alias void (...), bitcast (void ()* @globalfunc to void (...)*)
Peter Collingbourne73589f32016-07-07 18:31:51 +000012; PROMOTE-DAG: @globalfuncLinkonceAlias = weak alias void (...), bitcast (void ()* @globalfunc to void (...)*)
Mehdi Aminia71a5a62016-04-21 05:47:17 +000013; PROMOTE-DAG: @globalfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @globalfunc to void (...)*)
Peter Collingbourne73589f32016-07-07 18:31:51 +000014; PROMOTE-DAG: @globalfuncLinkonceODRAlias = weak_odr alias void (...), bitcast (void ()* @globalfunc to void (...)*)
Teresa Johnson4fef68c2016-11-14 19:21:41 +000015; PROMOTE-DAG: @internalfuncAlias = alias void (...), bitcast (void ()* @internalfunc to void (...)*)
16; PROMOTE-DAG: @internalfuncWeakAlias = weak alias void (...), bitcast (void ()* @internalfunc to void (...)*)
17; PROMOTE-DAG: @internalfuncLinkonceAlias = weak alias void (...), bitcast (void ()* @internalfunc to void (...)*)
18; PROMOTE-DAG: @internalfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @internalfunc to void (...)*)
19; PROMOTE-DAG: @internalfuncLinkonceODRAlias = weak_odr alias void (...), bitcast (void ()* @internalfunc to void (...)*)
Mehdi Aminia71a5a62016-04-21 05:47:17 +000020; PROMOTE-DAG: @linkoncefuncAlias = alias void (...), bitcast (void ()* @linkoncefunc to void (...)*)
21; PROMOTE-DAG: @linkoncefuncWeakAlias = weak alias void (...), bitcast (void ()* @linkoncefunc to void (...)*)
Peter Collingbourne73589f32016-07-07 18:31:51 +000022; PROMOTE-DAG: @linkoncefuncLinkonceAlias = weak alias void (...), bitcast (void ()* @linkoncefunc to void (...)*)
Mehdi Aminia71a5a62016-04-21 05:47:17 +000023; PROMOTE-DAG: @linkoncefuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @linkoncefunc to void (...)*)
Peter Collingbourne73589f32016-07-07 18:31:51 +000024; PROMOTE-DAG: @linkoncefuncLinkonceODRAlias = weak_odr alias void (...), bitcast (void ()* @linkoncefunc to void (...)*)
Mehdi Aminia71a5a62016-04-21 05:47:17 +000025; PROMOTE-DAG: @weakfuncAlias = alias void (...), bitcast (void ()* @weakfunc to void (...)*)
26; PROMOTE-DAG: @weakfuncWeakAlias = weak alias void (...), bitcast (void ()* @weakfunc to void (...)*)
Peter Collingbourne73589f32016-07-07 18:31:51 +000027; PROMOTE-DAG: @weakfuncLinkonceAlias = weak alias void (...), bitcast (void ()* @weakfunc to void (...)*)
Mehdi Aminia71a5a62016-04-21 05:47:17 +000028; PROMOTE-DAG: @weakfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @weakfunc to void (...)*)
Peter Collingbourne73589f32016-07-07 18:31:51 +000029; PROMOTE-DAG: @weakfuncLinkonceODRAlias = weak_odr alias void (...), bitcast (void ()* @weakfunc to void (...)*)
Mehdi Aminia71a5a62016-04-21 05:47:17 +000030; PROMOTE-DAG: @weakODRfuncAlias = alias void (...), bitcast (void ()* @weakODRfunc to void (...)*)
31; PROMOTE-DAG: @weakODRfuncWeakAlias = weak alias void (...), bitcast (void ()* @weakODRfunc to void (...)*)
Peter Collingbourne73589f32016-07-07 18:31:51 +000032; PROMOTE-DAG: @weakODRfuncLinkonceAlias = weak alias void (...), bitcast (void ()* @weakODRfunc to void (...)*)
Mehdi Aminia71a5a62016-04-21 05:47:17 +000033; PROMOTE-DAG: @weakODRfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @weakODRfunc to void (...)*)
Peter Collingbourne73589f32016-07-07 18:31:51 +000034; PROMOTE-DAG: @weakODRfuncLinkonceODRAlias = weak_odr alias void (...), bitcast (void ()* @weakODRfunc to void (...)*)
Mehdi Aminia71a5a62016-04-21 05:47:17 +000035; PROMOTE-DAG: @linkonceODRfuncAlias = alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*)
36; PROMOTE-DAG: @linkonceODRfuncWeakAlias = weak alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*)
37; PROMOTE-DAG: @linkonceODRfuncWeakODRAlias = weak_odr alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*)
Peter Collingbourne73589f32016-07-07 18:31:51 +000038; PROMOTE-DAG: @linkonceODRfuncLinkonceAlias = weak alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*)
Mehdi Aminia71a5a62016-04-21 05:47:17 +000039; PROMOTE-DAG: @linkonceODRfuncLinkonceODRAlias = weak_odr alias void (...), bitcast (void ()* @linkonceODRfunc to void (...)*)
40
Mehdi Aminia71a5a62016-04-21 05:47:17 +000041; PROMOTE-DAG: define void @globalfunc()
Teresa Johnson4fef68c2016-11-14 19:21:41 +000042; PROMOTE-DAG: define internal void @internalfunc()
Teresa Johnson3bc8abd2016-10-30 05:15:23 +000043; PROMOTE-DAG: define weak_odr void @linkonceODRfunc()
Mehdi Aminia71a5a62016-04-21 05:47:17 +000044; PROMOTE-DAG: define weak_odr void @weakODRfunc()
Teresa Johnson3bc8abd2016-10-30 05:15:23 +000045; PROMOTE-DAG: define weak void @linkoncefunc()
Mehdi Aminia71a5a62016-04-21 05:47:17 +000046; PROMOTE-DAG: define weak void @weakfunc()
47
Teresa Johnson81bbf742017-12-16 00:18:12 +000048; On the import side now, verify that aliases are imported unless they
49; are preemptible (non-ODR weak/linkonce).
50; IMPORT-DAG: declare void @linkonceODRfuncWeakAlias
51; IMPORT-DAG: declare void @linkonceODRfuncLinkonceAlias
52; IMPORT-DAG: define available_externally void @linkonceODRfuncAlias
53; IMPORT-DAG: define available_externally void @linkonceODRfuncWeakODRAlias
54; IMPORT-DAG: define available_externally void @linkonceODRfuncLinkonceODRAlias
55; IMPORT-DAG: define available_externally void @globalfuncAlias()
Mehdi Aminia71a5a62016-04-21 05:47:17 +000056; IMPORT-DAG: declare void @globalfuncWeakAlias()
57; IMPORT-DAG: declare void @globalfuncLinkonceAlias()
Teresa Johnson81bbf742017-12-16 00:18:12 +000058; IMPORT-DAG: define available_externally void @globalfuncWeakODRAlias()
59; IMPORT-DAG: define available_externally void @globalfuncLinkonceODRAlias()
Rafael Espindolae4b02312018-01-11 22:15:05 +000060; IMPORT-DAG: define available_externally dso_local void @internalfuncAlias()
Mehdi Aminia71a5a62016-04-21 05:47:17 +000061; IMPORT-DAG: declare void @internalfuncWeakAlias()
62; IMPORT-DAG: declare void @internalfuncLinkonceAlias()
Rafael Espindolae4b02312018-01-11 22:15:05 +000063; IMPORT-DAG: define available_externally dso_local void @internalfuncWeakODRAlias()
64; IMPORT-DAG: define available_externally dso_local void @internalfuncLinkonceODRAlias()
Teresa Johnson81bbf742017-12-16 00:18:12 +000065; IMPORT-DAG: define available_externally void @weakODRfuncAlias()
Mehdi Aminia71a5a62016-04-21 05:47:17 +000066; IMPORT-DAG: declare void @weakODRfuncWeakAlias()
67; IMPORT-DAG: declare void @weakODRfuncLinkonceAlias()
Teresa Johnson81bbf742017-12-16 00:18:12 +000068; IMPORT-DAG: define available_externally void @weakODRfuncWeakODRAlias()
69; IMPORT-DAG: define available_externally void @weakODRfuncLinkonceODRAlias()
70; IMPORT-DAG: define available_externally void @linkoncefuncAlias()
Mehdi Aminia71a5a62016-04-21 05:47:17 +000071; IMPORT-DAG: declare void @linkoncefuncWeakAlias()
72; IMPORT-DAG: declare void @linkoncefuncLinkonceAlias()
Teresa Johnson81bbf742017-12-16 00:18:12 +000073; IMPORT-DAG: define available_externally void @linkoncefuncWeakODRAlias()
74; IMPORT-DAG: define available_externally void @linkoncefuncLinkonceODRAlias()
75; IMPORT-DAG: define available_externally void @weakfuncAlias()
Mehdi Aminia71a5a62016-04-21 05:47:17 +000076; IMPORT-DAG: declare void @weakfuncWeakAlias()
77; IMPORT-DAG: declare void @weakfuncLinkonceAlias()
Teresa Johnson81bbf742017-12-16 00:18:12 +000078; IMPORT-DAG: define available_externally void @weakfuncWeakODRAlias()
79; IMPORT-DAG: define available_externally void @weakfuncLinkonceODRAlias()
80; IMPORT-DAG: define available_externally void @linkonceODRfuncAlias()
David Blaikie2f0cc472017-07-27 15:09:06 +000081; IMPORT-DAG: declare void @linkonceODRfuncWeakAlias()
Teresa Johnson81bbf742017-12-16 00:18:12 +000082; IMPORT-DAG: define available_externally void @linkonceODRfuncWeakODRAlias()
David Blaikie2f0cc472017-07-27 15:09:06 +000083; IMPORT-DAG: declare void @linkonceODRfuncLinkonceAlias()
Teresa Johnson81bbf742017-12-16 00:18:12 +000084; IMPORT-DAG: define available_externally void @linkonceODRfuncLinkonceODRAlias()
Mehdi Aminia71a5a62016-04-21 05:47:17 +000085
86define i32 @main() #0 {
87entry:
88 call void @globalfuncAlias()
89 call void @globalfuncWeakAlias()
90 call void @globalfuncLinkonceAlias()
91 call void @globalfuncWeakODRAlias()
92 call void @globalfuncLinkonceODRAlias()
93
94 call void @internalfuncAlias()
95 call void @internalfuncWeakAlias()
96 call void @internalfuncLinkonceAlias()
97 call void @internalfuncWeakODRAlias()
98 call void @internalfuncLinkonceODRAlias()
99 call void @linkonceODRfuncAlias()
100 call void @linkonceODRfuncWeakAlias()
101 call void @linkonceODRfuncLinkonceAlias()
102 call void @linkonceODRfuncWeakODRAlias()
103 call void @linkonceODRfuncLinkonceODRAlias()
104
105 call void @weakODRfuncAlias()
106 call void @weakODRfuncWeakAlias()
107 call void @weakODRfuncLinkonceAlias()
108 call void @weakODRfuncWeakODRAlias()
109 call void @weakODRfuncLinkonceODRAlias()
110
111 call void @linkoncefuncAlias()
112 call void @linkoncefuncWeakAlias()
113 call void @linkoncefuncLinkonceAlias()
114 call void @linkoncefuncWeakODRAlias()
115 call void @linkoncefuncLinkonceODRAlias()
116
117 call void @weakfuncAlias()
118 call void @weakfuncWeakAlias()
119 call void @weakfuncLinkonceAlias()
120 call void @weakfuncWeakODRAlias()
121 call void @weakfuncLinkonceODRAlias()
122
123 ret i32 0
124}
125
126
127declare void @globalfuncAlias()
128declare void @globalfuncWeakAlias()
129declare void @globalfuncLinkonceAlias()
130declare void @globalfuncWeakODRAlias()
131declare void @globalfuncLinkonceODRAlias()
132
133declare void @internalfuncAlias()
134declare void @internalfuncWeakAlias()
135declare void @internalfuncLinkonceAlias()
136declare void @internalfuncWeakODRAlias()
137declare void @internalfuncLinkonceODRAlias()
138
139declare void @linkonceODRfuncAlias()
140declare void @linkonceODRfuncWeakAlias()
141declare void @linkonceODRfuncLinkonceAlias()
142declare void @linkonceODRfuncWeakODRAlias()
143declare void @linkonceODRfuncLinkonceODRAlias()
144
145declare void @weakODRfuncAlias()
146declare void @weakODRfuncWeakAlias()
147declare void @weakODRfuncLinkonceAlias()
148declare void @weakODRfuncWeakODRAlias()
149declare void @weakODRfuncLinkonceODRAlias()
150
151declare void @linkoncefuncAlias()
152declare void @linkoncefuncWeakAlias()
153declare void @linkoncefuncLinkonceAlias()
154declare void @linkoncefuncWeakODRAlias()
155declare void @linkoncefuncLinkonceODRAlias()
156
157declare void @weakfuncAlias()
158declare void @weakfuncWeakAlias()
159declare void @weakfuncLinkonceAlias()
160declare void @weakfuncWeakODRAlias()
161declare void @weakfuncLinkonceODRAlias()
162
163