Index: test/Transforms/NaCl/globalcleanup.ll |
diff --git a/test/Transforms/NaCl/globalcleanup.ll b/test/Transforms/NaCl/globalcleanup.ll |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5f976e22da6a544ade497382e34c7662401e7113 |
--- /dev/null |
+++ b/test/Transforms/NaCl/globalcleanup.ll |
@@ -0,0 +1,56 @@ |
+; RUN: opt < %s -nacl-global-cleanup -S | FileCheck %s |
+; RUN: opt < %s -nacl-global-cleanup -S | FileCheck -check-prefix=GV %s |
+ |
+@llvm.compiler.used = appending global [0 x i8*] zeroinitializer, section "llvm.metadata" |
+@llvm.used = appending global [0 x i8*] zeroinitializer, section "llvm.metadata" |
+ |
+; GV-NOT: llvm.used |
+; GV-NOT: llvm.compiler.used |
+ |
+@extern_weak_const = extern_weak constant i32 |
+@extern_weak_gv = extern_weak global i32 |
+ |
+; GV-NOT: @extern_weak_const |
+; GV-NOT: @extern_weak_gv |
+ |
+; CHECK: @weak_gv = internal global |
+@weak_gv = weak global i32 0 |
+ |
+; CHECK: define void @_start |
+define void @_start() { |
+ ret void |
+} |
+ |
+define i32* @ewgv() { |
+; CHECK: %bc = getelementptr i8* null, i32 0 |
+ %bc = getelementptr i8* bitcast (i32* @extern_weak_gv to i8*), i32 0 |
+; CHECK: ret i32* null |
+ ret i32* @extern_weak_gv |
+} |
+ |
+define i32* @ewc() { |
+; CHECK: %bc = getelementptr i8* null, i32 0 |
+ %bc = getelementptr i8* bitcast (i32* @extern_weak_const to i8*), i32 0 |
+; CHECK: ret i32* null |
+ ret i32* @extern_weak_gv |
+} |
+ |
+; Make sure @weak_gv is actually used. |
+define i32* @wgv() { |
+; CHECK: ret i32* @weak_gv |
+ ret i32* @weak_gv |
+} |
+ |
+; GV-NOT: @extern_weak_func |
+declare extern_weak i32 @extern_weak_func() |
+; CHECK: @ewf |
+define i32 @ewf() { |
+; CHECK: %ret = call i32 null() |
+ %ret = call i32 @extern_weak_func() |
+ ret i32 %ret |
+} |
+ |
+; CHECK: define internal void @weak_func |
+define weak void @weak_func() { |
+ ret void |
+} |