| 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 |