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