xref: /llvm-project/llvm/test/CodeGen/M68k/CodeModel/Medium/medium-pie-global-access.ll (revision 4cce10743d2275710d3d2e0de8013386a9799092)
1*4cce1074Sknickish; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*4cce1074Sknickish; RUN: llc < %s -O2 -mtriple=m68k -verify-machineinstrs \
3*4cce1074Sknickish; RUN:              -code-model=medium -relocation-model=pic \
4*4cce1074Sknickish; RUN:   | FileCheck %s
5*4cce1074Sknickish
6*4cce1074Sknickish; External Linkage
7*4cce1074Sknickish@a = global i32 0, align 4
8*4cce1074Sknickish
9*4cce1074Sknickishdefine i32 @my_access_global_a() #0 {
10*4cce1074Sknickish; CHECK-LABEL: my_access_global_a:
11*4cce1074Sknickish; CHECK:         .cfi_startproc
12*4cce1074Sknickish; CHECK-NEXT:  ; %bb.0: ; %entry
13*4cce1074Sknickish; CHECK-NEXT:    move.l (a@GOTPCREL,%pc), %a0
14*4cce1074Sknickish; CHECK-NEXT:    move.l (%a0), %d0
15*4cce1074Sknickish; CHECK-NEXT:    rts
16*4cce1074Sknickishentry:
17*4cce1074Sknickish  %0 = load i32, ptr @a, align 4
18*4cce1074Sknickish  ret i32 %0
19*4cce1074Sknickish}
20*4cce1074Sknickish
21*4cce1074Sknickish; WeakAny Linkage
22*4cce1074Sknickish@b = weak global i32 0, align 4
23*4cce1074Sknickish
24*4cce1074Sknickishdefine i32 @my_access_global_b() #0 {
25*4cce1074Sknickish; CHECK-LABEL: my_access_global_b:
26*4cce1074Sknickish; CHECK:         .cfi_startproc
27*4cce1074Sknickish; CHECK-NEXT:  ; %bb.0: ; %entry
28*4cce1074Sknickish; CHECK-NEXT:    move.l (b@GOTPCREL,%pc), %a0
29*4cce1074Sknickish; CHECK-NEXT:    move.l (%a0), %d0
30*4cce1074Sknickish; CHECK-NEXT:    rts
31*4cce1074Sknickishentry:
32*4cce1074Sknickish %0 = load i32, ptr @b, align 4
33*4cce1074Sknickish ret i32 %0
34*4cce1074Sknickish}
35*4cce1074Sknickish
36*4cce1074Sknickish; Internal Linkage
37*4cce1074Sknickish@c = internal global i32 0, align 4
38*4cce1074Sknickish
39*4cce1074Sknickishdefine i32 @my_access_global_c() #0 {
40*4cce1074Sknickish; CHECK-LABEL: my_access_global_c:
41*4cce1074Sknickish; CHECK:         .cfi_startproc
42*4cce1074Sknickish; CHECK-NEXT:  ; %bb.0: ; %entry
43*4cce1074Sknickish; CHECK-NEXT:    lea (_GLOBAL_OFFSET_TABLE_@GOTPCREL,%pc), %a0
44*4cce1074Sknickish; CHECK-NEXT:    move.l #c@GOTOFF, %d0
45*4cce1074Sknickish; CHECK-NEXT:    move.l (0,%a0,%d0), %d0
46*4cce1074Sknickish; CHECK-NEXT:    rts
47*4cce1074Sknickishentry:
48*4cce1074Sknickish %0 = load i32, ptr @c, align 4
49*4cce1074Sknickish ret i32 %0
50*4cce1074Sknickish}
51*4cce1074Sknickish
52*4cce1074Sknickish; External Linkage, only declaration.
53*4cce1074Sknickish@d = external global i32, align 4
54*4cce1074Sknickish
55*4cce1074Sknickishdefine i32 @my_access_global_load_d() #0 {
56*4cce1074Sknickish; CHECK-LABEL: my_access_global_load_d:
57*4cce1074Sknickish; CHECK:         .cfi_startproc
58*4cce1074Sknickish; CHECK-NEXT:  ; %bb.0: ; %entry
59*4cce1074Sknickish; CHECK-NEXT:    move.l (d@GOTPCREL,%pc), %a0
60*4cce1074Sknickish; CHECK-NEXT:    move.l (%a0), %d0
61*4cce1074Sknickish; CHECK-NEXT:    rts
62*4cce1074Sknickishentry:
63*4cce1074Sknickish %0 = load i32, ptr @d, align 4
64*4cce1074Sknickish ret i32 %0
65*4cce1074Sknickish}
66*4cce1074Sknickish
67*4cce1074Sknickish; External Linkage, only declaration, store a value.
68*4cce1074Sknickishdefine i32 @my_access_global_store_d() #0 {
69*4cce1074Sknickish; CHECK-LABEL: my_access_global_store_d:
70*4cce1074Sknickish; CHECK:         .cfi_startproc
71*4cce1074Sknickish; CHECK-NEXT:  ; %bb.0: ; %entry
72*4cce1074Sknickish; CHECK-NEXT:    move.l (d@GOTPCREL,%pc), %a0
73*4cce1074Sknickish; CHECK-NEXT:    move.l #2, (%a0)
74*4cce1074Sknickish; CHECK-NEXT:    moveq #0, %d0
75*4cce1074Sknickish; CHECK-NEXT:    rts
76*4cce1074Sknickishentry:
77*4cce1074Sknickish store i32 2, ptr @d, align 4
78*4cce1074Sknickish ret i32 0
79*4cce1074Sknickish}
80*4cce1074Sknickish
81*4cce1074Sknickish; External Linkage, function pointer access.
82*4cce1074Sknickishdeclare i32 @access_fp(ptr)
83*4cce1074Sknickishdeclare i32 @foo()
84*4cce1074Sknickish
85*4cce1074Sknickishdefine i32 @my_access_fp_foo() #0 {
86*4cce1074Sknickish; CHECK-LABEL: my_access_fp_foo:
87*4cce1074Sknickish; CHECK:         .cfi_startproc
88*4cce1074Sknickish; CHECK-NEXT:  ; %bb.0: ; %entry
89*4cce1074Sknickish; CHECK-NEXT:    suba.l #4, %sp
90*4cce1074Sknickish; CHECK-NEXT:    .cfi_def_cfa_offset -8
91*4cce1074Sknickish; CHECK-NEXT:    move.l (foo@GOTPCREL,%pc), (%sp)
92*4cce1074Sknickish; CHECK-NEXT:    jsr (access_fp@PLT,%pc)
93*4cce1074Sknickish; CHECK-NEXT:    adda.l #4, %sp
94*4cce1074Sknickish; CHECK-NEXT:    rts
95*4cce1074Sknickishentry:
96*4cce1074Sknickish %call = call i32 @access_fp(ptr @foo)
97*4cce1074Sknickish ret i32 %call
98*4cce1074Sknickish}
99*4cce1074Sknickish
100*4cce1074Sknickish; LinkOnceODR Linkage, function pointer access.
101*4cce1074Sknickish
102*4cce1074Sknickish$bar = comdat any
103*4cce1074Sknickish
104*4cce1074Sknickishdefine linkonce_odr i32 @bar() comdat {
105*4cce1074Sknickish; CHECK-LABEL: bar:
106*4cce1074Sknickish; CHECK:         .cfi_startproc
107*4cce1074Sknickish; CHECK-NEXT:  ; %bb.0: ; %entry
108*4cce1074Sknickish; CHECK-NEXT:    moveq #0, %d0
109*4cce1074Sknickish; CHECK-NEXT:    rts
110*4cce1074Sknickishentry:
111*4cce1074Sknickish ret i32 0
112*4cce1074Sknickish}
113*4cce1074Sknickish
114*4cce1074Sknickishdefine i32 @my_access_fp_bar() #0 {
115*4cce1074Sknickish; CHECK-LABEL: my_access_fp_bar:
116*4cce1074Sknickish; CHECK:         .cfi_startproc
117*4cce1074Sknickish; CHECK-NEXT:  ; %bb.0: ; %entry
118*4cce1074Sknickish; CHECK-NEXT:    suba.l #4, %sp
119*4cce1074Sknickish; CHECK-NEXT:    .cfi_def_cfa_offset -8
120*4cce1074Sknickish; CHECK-NEXT:    move.l (bar@GOTPCREL,%pc), (%sp)
121*4cce1074Sknickish; CHECK-NEXT:    jsr (access_fp@PLT,%pc)
122*4cce1074Sknickish; CHECK-NEXT:    adda.l #4, %sp
123*4cce1074Sknickish; CHECK-NEXT:    rts
124*4cce1074Sknickishentry:
125*4cce1074Sknickish %call = call i32 @access_fp(ptr @bar)
126*4cce1074Sknickish ret i32 %call
127*4cce1074Sknickish}
128*4cce1074Sknickish
129*4cce1074Sknickish!llvm.module.flags = !{!0, !1}
130*4cce1074Sknickish!0 = !{i32 1, !"PIC Level", i32 1}
131*4cce1074Sknickish!1 = !{i32 1, !"PIE Level", i32 1}
132