blob: 8765a6d1267ce91de67df20edf314c5e0a1c0e81 [file] [log] [blame]
Tim Northover3b0846e2014-05-24 12:50:23 +00001; RUN: llc -mtriple=aarch64-linux-gnu -verify-machineinstrs -relocation-model=pic %s -o - | FileCheck %s
Tim Northovere0e3aef2013-01-31 12:12:40 +00002
3@var = global i32 0
4
Tim Northovere0e3aef2013-01-31 12:12:40 +00005define i32 @get_globalvar() {
Stephen Lind24ab202013-07-14 06:24:09 +00006; CHECK-LABEL: get_globalvar:
Tim Northovere0e3aef2013-01-31 12:12:40 +00007
David Blaikiea79ac142015-02-27 21:17:42 +00008 %val = load i32, i32* @var
Tim Northovere0e3aef2013-01-31 12:12:40 +00009; CHECK: adrp x[[GOTHI:[0-9]+]], :got:var
Tim Northoverc398cd52014-04-14 12:50:58 +000010; CHECK: ldr x[[GOTLOC:[0-9]+]], [x[[GOTHI]], {{#?}}:got_lo12:var]
Tim Northovere0e3aef2013-01-31 12:12:40 +000011; CHECK: ldr w0, [x[[GOTLOC]]]
12
Tim Northovere0e3aef2013-01-31 12:12:40 +000013 ret i32 %val
14}
15
16define i32* @get_globalvaraddr() {
Stephen Lind24ab202013-07-14 06:24:09 +000017; CHECK-LABEL: get_globalvaraddr:
Tim Northovere0e3aef2013-01-31 12:12:40 +000018
David Blaikiea79ac142015-02-27 21:17:42 +000019 %val = load i32, i32* @var
Tim Northovere0e3aef2013-01-31 12:12:40 +000020; CHECK: adrp x[[GOTHI:[0-9]+]], :got:var
Tim Northoverc398cd52014-04-14 12:50:58 +000021; CHECK: ldr x0, [x[[GOTHI]], {{#?}}:got_lo12:var]
Tim Northovere0e3aef2013-01-31 12:12:40 +000022
Tim Northovere0e3aef2013-01-31 12:12:40 +000023 ret i32* @var
24}
25
26@hiddenvar = hidden global i32 0
27
28define i32 @get_hiddenvar() {
Stephen Lind24ab202013-07-14 06:24:09 +000029; CHECK-LABEL: get_hiddenvar:
Tim Northovere0e3aef2013-01-31 12:12:40 +000030
David Blaikiea79ac142015-02-27 21:17:42 +000031 %val = load i32, i32* @hiddenvar
Tim Northovere0e3aef2013-01-31 12:12:40 +000032; CHECK: adrp x[[HI:[0-9]+]], hiddenvar
Tim Northoverc398cd52014-04-14 12:50:58 +000033; CHECK: ldr w0, [x[[HI]], {{#?}}:lo12:hiddenvar]
Tim Northovere0e3aef2013-01-31 12:12:40 +000034
Tim Northovere0e3aef2013-01-31 12:12:40 +000035 ret i32 %val
36}
37
38define i32* @get_hiddenvaraddr() {
Stephen Lind24ab202013-07-14 06:24:09 +000039; CHECK-LABEL: get_hiddenvaraddr:
Tim Northovere0e3aef2013-01-31 12:12:40 +000040
David Blaikiea79ac142015-02-27 21:17:42 +000041 %val = load i32, i32* @hiddenvar
Tim Northovere0e3aef2013-01-31 12:12:40 +000042; CHECK: adrp [[HI:x[0-9]+]], hiddenvar
Tim Northoverc398cd52014-04-14 12:50:58 +000043; CHECK: add x0, [[HI]], {{#?}}:lo12:hiddenvar
Tim Northovere0e3aef2013-01-31 12:12:40 +000044
Tim Northovere0e3aef2013-01-31 12:12:40 +000045 ret i32* @hiddenvar
46}
47
48define void()* @get_func() {
Stephen Lind24ab202013-07-14 06:24:09 +000049; CHECK-LABEL: get_func:
Tim Northovere0e3aef2013-01-31 12:12:40 +000050
51 ret void()* bitcast(void()*()* @get_func to void()*)
52; CHECK: adrp x[[GOTHI:[0-9]+]], :got:get_func
Tim Northoverc398cd52014-04-14 12:50:58 +000053; CHECK: ldr x0, [x[[GOTHI]], {{#?}}:got_lo12:get_func]
Stephen Linf799e3f2013-07-13 20:38:47 +000054}