xref: /llvm-project/llvm/test/Transforms/GlobalOpt/unnamed-addr.ll (revision d586bd5ca231a6022f439d4c6e43cfeeb53eb1d6)
1; RUN: opt -passes=globalopt -S < %s | FileCheck %s
2
3@a = internal global i32 0, align 4
4@b = internal global i32 0, align 4
5@c = internal global i32 0, align 4
6@d = internal constant [4 x i8] c"foo\00", align 1
7@e = linkonce_odr global i32 0
8@f = internal addrspace(3) global float undef, align 4
9
10; CHECK: @a = internal global i32 0, align 4
11; CHECK: @b = internal global i32 0, align 4
12; CHECK: @c = internal unnamed_addr global i32 0, align 4
13; CHECK: @d = internal unnamed_addr constant [4 x i8] c"foo\00", align 1
14; CHECK: @e = linkonce_odr local_unnamed_addr global i32 0
15; CHECK: @f = internal unnamed_addr addrspace(3) global float undef, align 4
16
17; CHECK: define internal fastcc void @used_internal() unnamed_addr {
18define internal void @used_internal() {
19  ret void
20}
21
22define i32 @get_e() {
23       call void @used_internal()
24       %t = load i32, ptr @e
25       ret i32 %t
26}
27
28define void @set_e(i32 %x) {
29       store i32 %x, ptr @e
30       ret void
31}
32
33define i1 @bah(i64 %i) nounwind readonly optsize ssp {
34entry:
35  %arrayidx4 = getelementptr inbounds [4 x i8], ptr @d, i64 0, i64 %i
36  %tmp5 = load i8, ptr %arrayidx4, align 1
37  %tmp6 = load i8, ptr @d, align 1
38  %cmp = icmp eq i8 %tmp5, %tmp6
39  ret i1 %cmp
40}
41
42define void @baz(i32 %x) {
43entry:
44  store i32 %x, ptr @a, align 4
45  store i32 %x, ptr @b, align 4
46  store i32 %x, ptr @c, align 4
47  ret void
48}
49
50define i32 @foo(ptr %x) nounwind readnone optsize ssp {
51entry:
52  %cmp = icmp eq ptr %x, @a
53  %conv = zext i1 %cmp to i32
54  ret i32 %conv
55}
56
57define i32 @bar() {
58entry:
59  switch i64 ptrtoint (ptr @b to i64), label %sw.epilog [
60    i64 1, label %return
61    i64 0, label %return
62  ]
63
64sw.epilog:
65  ret i32 0
66
67return:
68  ret i32 1
69}
70
71define i32 @zed() {
72entry:
73  %tmp1 = load i32, ptr @c, align 4
74  ret i32 %tmp1
75}
76
77define float @use_addrspace_cast_for_load() {
78  %p = addrspacecast ptr addrspace(3) @f to ptr
79  %v = load float, ptr %p
80  ret float %v
81}
82
83define void @use_addrspace_cast_for_store(float %x) {
84  %p = addrspacecast ptr addrspace(3) @f to ptr
85  store float %x, ptr %p
86  ret void
87}
88