a6bc54d9066f0c1e7f7bb319c53fc7281b3195e2
[oota-llvm.git] / test / LTO / X86 / linkonce_odr_func.ll
1 ; RUN: llvm-lto -o %t2 -dso-symbol=foo1 -dso-symbol=foo2 -dso-symbol=foo3 \
2 ; RUN:     -dso-symbol=foo4 -dso-symbol=v1 -dso-symbol=v2 %s -O0
3 ; RUN: llvm-nm %t2 | FileCheck %s
4
5 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
6 target triple = "x86_64-unknown-linux-gnu"
7
8 ; CHECK: t foo1
9 define linkonce_odr void @foo1() noinline {
10   ret void
11 }
12
13 ; CHECK: W foo2
14 define linkonce_odr void @foo2() noinline {
15   ret void
16 }
17
18 ; CHECK: t foo3
19 define linkonce_odr void @foo3() noinline {
20   ret void
21 }
22
23 ; CHECK: W foo4
24 define linkonce_odr void @foo4() noinline {
25   ret void
26 }
27
28 ; CHECK: r v1
29 @v1 = linkonce_odr constant i32 32
30
31 define i32 @useV1() {
32   %x = load i32, i32* @v1
33   ret i32 %x
34 }
35
36 ; CHECK: V v2
37 @v2 = linkonce_odr global i32 32
38
39 define i32 @useV2() {
40   %x = load i32, i32* @v2
41   ret i32 %x
42 }
43
44 declare void @f(void()*)
45
46 declare void @p()
47
48 define void @bar() {
49 bb0:
50   call void @foo1()
51   call void @f(void()* @foo2)
52   invoke void @foo3() to label %bb1 unwind label %clean
53 bb1:
54   invoke void @f(void()* @foo4) to label %bb2 unwind label %clean
55 bb2:
56   ret void
57 clean:
58   landingpad {i32, i32} personality void()* @p cleanup
59   ret void
60 }