xref: /llvm-project/llvm/test/Transforms/GlobalOpt/issue62384.ll (revision b52db60cbbb2b258acb4aad056aba7ad3ca572fa)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2; RUN: opt -S -p=globalopt %s | FileCheck %s
3
4
5@llvm.used = appending global [1 x ptr] [ptr @ctor]
6@gv0 = internal addrspace(1) global ptr null
7@gv1 = internal addrspace(1) global ptr addrspace(3) null
8@gv2 = internal addrspace(1) global ptr addrspace(1) null
9@gv3 = internal addrspace(1) global ptr addrspace(1) null
10
11define internal void @ctor() {
12; CHECK-LABEL: define internal void @ctor() {
13; CHECK-NEXT:    tail call fastcc void @init0(ptr addrspacecast (ptr addrspace(1) null to ptr))
14; CHECK-NEXT:    tail call fastcc void @init1(ptr addrspacecast (ptr addrspace(3) null to ptr))
15; CHECK-NEXT:    tail call fastcc void @init2(ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)))
16; CHECK-NEXT:    tail call fastcc void @init3(ptr addrspace(1) addrspacecast (ptr addrspace(2) null to ptr addrspace(1)))
17; CHECK-NEXT:    ret void
18;
19  tail call void @init0(ptr addrspacecast (ptr addrspace(1) null to ptr))
20  tail call void @init1(ptr addrspacecast (ptr addrspace(3) null to ptr))
21  tail call void @init2(ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)))
22  tail call void @init3(ptr addrspace(1) addrspacecast (ptr addrspace(2) null to ptr addrspace(1)))
23  ret void
24}
25
26define internal void @init0(ptr %T) {
27; CHECK-LABEL: define internal fastcc void @init0
28; CHECK-SAME: (ptr [[T:%.*]]) unnamed_addr {
29; CHECK-NEXT:    [[LD:%.*]] = load ptr, ptr addrspace(1) @gv0, align 8
30; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[LD]], null
31; CHECK-NEXT:    store ptr addrspacecast (ptr addrspace(1) null to ptr), ptr addrspace(1) @gv0, align 8
32; CHECK-NEXT:    ret void
33;
34  %ld = load ptr, ptr addrspace(1) @gv0, align 8
35  %cmp = icmp eq ptr %ld, null
36  store ptr addrspacecast (ptr addrspace(1) null to ptr), ptr addrspace(1) @gv0, align 8
37  ret void
38}
39
40define internal void @init1(ptr %T) {
41; CHECK-LABEL: define internal fastcc void @init1
42; CHECK-SAME: (ptr [[T:%.*]]) unnamed_addr {
43; CHECK-NEXT:    [[LD:%.*]] = load ptr addrspace(3), ptr addrspace(1) @gv1, align 4
44; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr addrspace(3) [[LD]], null
45; CHECK-NEXT:    store ptr addrspacecast (ptr addrspace(3) null to ptr), ptr addrspace(1) @gv1, align 8
46; CHECK-NEXT:    ret void
47;
48  %ld = load ptr addrspace(3), ptr addrspace(1) @gv1, align 4
49  %cmp = icmp eq ptr addrspace(3) %ld, null
50  store ptr addrspacecast (ptr addrspace(3) null to ptr), ptr addrspace(1) @gv1, align 8
51  ret void
52}
53
54define internal void @init2(ptr addrspace(1) %T) {
55; CHECK-LABEL: define internal fastcc void @init2
56; CHECK-SAME: (ptr addrspace(1) [[T:%.*]]) unnamed_addr {
57; CHECK-NEXT:    [[LD:%.*]] = load ptr addrspace(1), ptr addrspace(1) @gv2, align 4
58; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr addrspace(1) [[LD]], null
59; CHECK-NEXT:    store ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)), ptr addrspace(1) @gv2, align 8
60; CHECK-NEXT:    ret void
61;
62  %ld = load ptr addrspace(1), ptr addrspace(1) @gv2, align 4
63  %cmp = icmp eq ptr addrspace(1) %ld, null
64  store ptr addrspace(1) addrspacecast (ptr null to ptr addrspace(1)), ptr addrspace(1) @gv2, align 8
65  ret void
66}
67
68define internal void @init3(ptr addrspace(1) %T) {
69; CHECK-LABEL: define internal fastcc void @init3
70; CHECK-SAME: (ptr addrspace(1) [[T:%.*]]) unnamed_addr {
71; CHECK-NEXT:    [[LD:%.*]] = load ptr addrspace(1), ptr addrspace(1) @gv3, align 4
72; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr addrspace(1) [[LD]], null
73; CHECK-NEXT:    store ptr addrspace(1) addrspacecast (ptr addrspace(2) null to ptr addrspace(1)), ptr addrspace(1) @gv3, align 8
74; CHECK-NEXT:    ret void
75;
76  %ld = load ptr addrspace(1), ptr addrspace(1) @gv3, align 4
77  %cmp = icmp eq ptr addrspace(1) %ld, null
78  store ptr addrspace(1) addrspacecast (ptr addrspace(2) null to ptr addrspace(1)), ptr addrspace(1) @gv3, align 8
79  ret void
80}
81