OLD | NEW |
1 ; RUN: opt < %s -nacl-global-cleanup -S | FileCheck %s | 1 ; RUN: opt < %s -nacl-global-cleanup -S | FileCheck %s |
2 ; RUN: opt < %s -nacl-global-cleanup -S | FileCheck -check-prefix=GV %s | 2 ; RUN: opt < %s -nacl-global-cleanup -S | FileCheck -check-prefix=GV %s |
3 | 3 |
4 @a = global i8 42 | 4 @a = global i8 42 |
5 | 5 |
6 @llvm.compiler.used = appending global [1 x i8*] [i8* @a], section "llvm.metadat
a" | 6 @llvm.compiler.used = appending global [1 x i8*] [i8* @a], section "llvm.metadat
a" |
7 ; GV-NOT: llvm.compiler.used | 7 ; GV-NOT: llvm.compiler.used |
8 | 8 |
9 @llvm.used = appending global [1 x i8*] [i8* @a], section "llvm.metadata" | 9 @llvm.used = appending global [1 x i8*] [i8* @a], section "llvm.metadata" |
10 ; The used list remains unchanged. | 10 ; The used list remains unchanged. |
11 ; CHECK: llvm.used | 11 ; CHECK: llvm.used |
12 | 12 |
13 @extern_weak_const = extern_weak constant i32 | 13 @extern_weak_const = extern_weak constant i32 |
14 @extern_weak_gv = extern_weak global i32 | 14 @extern_weak_gv = extern_weak global i32 |
15 | 15 |
16 ; GV-NOT: @extern_weak_const | 16 ; GV-NOT: @extern_weak_const |
17 ; GV-NOT: @extern_weak_gv | 17 ; GV-NOT: @extern_weak_gv |
18 | 18 |
19 ; CHECK: @weak_gv = internal global | 19 ; CHECK: @weak_gv = internal global |
20 @weak_gv = weak global i32 0 | 20 @weak_gv = weak global i32 0 |
21 | 21 |
22 ; CHECK: define void @_start | 22 ; CHECK: define void @_start |
23 define void @_start() { | 23 define void @_start() { |
24 ret void | 24 ret void |
25 } | 25 } |
26 | 26 |
27 define i32* @ewgv() { | 27 define i32* @ewgv() { |
28 ; CHECK: %bc = getelementptr i8* null, i32 0 | 28 ; CHECK: %bc = getelementptr i8, i8* null, i32 0 |
29 %bc = getelementptr i8* bitcast (i32* @extern_weak_gv to i8*), i32 0 | 29 %bc = getelementptr i8, i8* bitcast (i32* @extern_weak_gv to i8*), i32 0 |
30 ; CHECK: ret i32* null | 30 ; CHECK: ret i32* null |
31 ret i32* @extern_weak_gv | 31 ret i32* @extern_weak_gv |
32 } | 32 } |
33 | 33 |
34 define i32* @ewc() { | 34 define i32* @ewc() { |
35 ; CHECK: %bc = getelementptr i8* null, i32 0 | 35 ; CHECK: %bc = getelementptr i8, i8* null, i32 0 |
36 %bc = getelementptr i8* bitcast (i32* @extern_weak_const to i8*), i32 0 | 36 %bc = getelementptr i8, i8* bitcast (i32* @extern_weak_const to i8*), i32 0 |
37 ; CHECK: ret i32* null | 37 ; CHECK: ret i32* null |
38 ret i32* @extern_weak_gv | 38 ret i32* @extern_weak_gv |
39 } | 39 } |
40 | 40 |
41 ; Make sure @weak_gv is actually used. | 41 ; Make sure @weak_gv is actually used. |
42 define i32* @wgv() { | 42 define i32* @wgv() { |
43 ; CHECK: ret i32* @weak_gv | 43 ; CHECK: ret i32* @weak_gv |
44 ret i32* @weak_gv | 44 ret i32* @weak_gv |
45 } | 45 } |
46 | 46 |
47 ; GV-NOT: @extern_weak_func | 47 ; GV-NOT: @extern_weak_func |
48 declare extern_weak i32 @extern_weak_func() | 48 declare extern_weak i32 @extern_weak_func() |
49 ; CHECK: @ewf | 49 ; CHECK: @ewf |
50 define i32 @ewf() { | 50 define i32 @ewf() { |
51 ; CHECK: %ret = call i32 null() | 51 ; CHECK: %ret = call i32 null() |
52 %ret = call i32 @extern_weak_func() | 52 %ret = call i32 @extern_weak_func() |
53 ret i32 %ret | 53 ret i32 %ret |
54 } | 54 } |
55 | 55 |
56 ; CHECK: define internal void @weak_func | 56 ; CHECK: define internal void @weak_func |
57 define weak void @weak_func() { | 57 define weak void @weak_func() { |
58 ret void | 58 ret void |
59 } | 59 } |
OLD | NEW |