Skip to content

Commit 67b0753

Browse files
committed
[ARM] Add a baseline elf-preemption test
This is based on the RISC-V elf-preemption.ll (converted to opaque pointers) and is useful for test coverage for the patch series starting with D131392.
1 parent adb0cd6 commit 67b0753

File tree

1 file changed

+192
-0
lines changed

1 file changed

+192
-0
lines changed
Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -mtriple=armv7-linux-gnueabi -relocation-model=static < %s \
3+
; RUN: | FileCheck %s --check-prefix=STATIC
4+
; RUN: llc -mtriple=armv7-linux-gnueabi -relocation-model=pic < %s \
5+
; RUN: | FileCheck %s --check-prefix=PIC
6+
7+
@preemptable_var = dso_preemptable global i32 42
8+
define ptr @get_preemptable_var() nounwind {
9+
; STATIC-LABEL: get_preemptable_var:
10+
; STATIC: @ %bb.0:
11+
; STATIC-NEXT: movw r0, :lower16:preemptable_var
12+
; STATIC-NEXT: movt r0, :upper16:preemptable_var
13+
; STATIC-NEXT: bx lr
14+
;
15+
; PIC-LABEL: get_preemptable_var:
16+
; PIC: @ %bb.0:
17+
; PIC-NEXT: ldr r0, .LCPI0_0
18+
; PIC-NEXT: .LPC0_0:
19+
; PIC-NEXT: ldr r0, [pc, r0]
20+
; PIC-NEXT: bx lr
21+
; PIC-NEXT: .p2align 2
22+
; PIC-NEXT: @ %bb.1:
23+
; PIC-NEXT: .LCPI0_0:
24+
; PIC-NEXT: .Ltmp0:
25+
; PIC-NEXT: .long preemptable_var(GOT_PREL)-((.LPC0_0+8)-.Ltmp0)
26+
ret ptr @preemptable_var
27+
}
28+
29+
@dsolocal_var = dso_local global i32 42
30+
define ptr @get_dsolocal_var() nounwind {
31+
; STATIC-LABEL: get_dsolocal_var:
32+
; STATIC: @ %bb.0:
33+
; STATIC-NEXT: movw r0, :lower16:dsolocal_var
34+
; STATIC-NEXT: movt r0, :upper16:dsolocal_var
35+
; STATIC-NEXT: bx lr
36+
;
37+
; PIC-LABEL: get_dsolocal_var:
38+
; PIC: @ %bb.0:
39+
; PIC-NEXT: ldr r0, .LCPI1_0
40+
; PIC-NEXT: .LPC1_0:
41+
; PIC-NEXT: add r0, pc, r0
42+
; PIC-NEXT: bx lr
43+
; PIC-NEXT: .p2align 2
44+
; PIC-NEXT: @ %bb.1:
45+
; PIC-NEXT: .LCPI1_0:
46+
; PIC-NEXT: .long dsolocal_var-(.LPC1_0+8)
47+
ret ptr @dsolocal_var
48+
}
49+
50+
@weak_dsolocal_var = weak dso_local global i32 42
51+
define ptr @get_weak_dsolocal_var() nounwind {
52+
; STATIC-LABEL: get_weak_dsolocal_var:
53+
; STATIC: @ %bb.0:
54+
; STATIC-NEXT: movw r0, :lower16:weak_dsolocal_var
55+
; STATIC-NEXT: movt r0, :upper16:weak_dsolocal_var
56+
; STATIC-NEXT: bx lr
57+
;
58+
; PIC-LABEL: get_weak_dsolocal_var:
59+
; PIC: @ %bb.0:
60+
; PIC-NEXT: ldr r0, .LCPI2_0
61+
; PIC-NEXT: .LPC2_0:
62+
; PIC-NEXT: add r0, pc, r0
63+
; PIC-NEXT: bx lr
64+
; PIC-NEXT: .p2align 2
65+
; PIC-NEXT: @ %bb.1:
66+
; PIC-NEXT: .LCPI2_0:
67+
; PIC-NEXT: .long weak_dsolocal_var-(.LPC2_0+8)
68+
ret ptr @weak_dsolocal_var
69+
}
70+
71+
@hidden_var = hidden global i32 42
72+
define ptr @get_hidden_var() nounwind {
73+
; STATIC-LABEL: get_hidden_var:
74+
; STATIC: @ %bb.0:
75+
; STATIC-NEXT: movw r0, :lower16:hidden_var
76+
; STATIC-NEXT: movt r0, :upper16:hidden_var
77+
; STATIC-NEXT: bx lr
78+
;
79+
; PIC-LABEL: get_hidden_var:
80+
; PIC: @ %bb.0:
81+
; PIC-NEXT: ldr r0, .LCPI3_0
82+
; PIC-NEXT: .LPC3_0:
83+
; PIC-NEXT: add r0, pc, r0
84+
; PIC-NEXT: bx lr
85+
; PIC-NEXT: .p2align 2
86+
; PIC-NEXT: @ %bb.1:
87+
; PIC-NEXT: .LCPI3_0:
88+
; PIC-NEXT: .long hidden_var-(.LPC3_0+8)
89+
ret ptr @hidden_var
90+
}
91+
92+
@protected_var = protected global i32 42
93+
define ptr @get_protected_var() nounwind {
94+
; STATIC-LABEL: get_protected_var:
95+
; STATIC: @ %bb.0:
96+
; STATIC-NEXT: movw r0, :lower16:protected_var
97+
; STATIC-NEXT: movt r0, :upper16:protected_var
98+
; STATIC-NEXT: bx lr
99+
;
100+
; PIC-LABEL: get_protected_var:
101+
; PIC: @ %bb.0:
102+
; PIC-NEXT: ldr r0, .LCPI4_0
103+
; PIC-NEXT: .LPC4_0:
104+
; PIC-NEXT: add r0, pc, r0
105+
; PIC-NEXT: bx lr
106+
; PIC-NEXT: .p2align 2
107+
; PIC-NEXT: @ %bb.1:
108+
; PIC-NEXT: .LCPI4_0:
109+
; PIC-NEXT: .long protected_var-(.LPC4_0+8)
110+
ret ptr @protected_var
111+
}
112+
113+
define dso_preemptable ptr @preemptable_func() nounwind {
114+
; STATIC-LABEL: preemptable_func:
115+
; STATIC: @ %bb.0:
116+
; STATIC-NEXT: movw r0, :lower16:preemptable_func
117+
; STATIC-NEXT: movt r0, :upper16:preemptable_func
118+
; STATIC-NEXT: bx lr
119+
;
120+
; PIC-LABEL: preemptable_func:
121+
; PIC: @ %bb.0:
122+
; PIC-NEXT: ldr r0, .LCPI5_0
123+
; PIC-NEXT: .LPC5_0:
124+
; PIC-NEXT: ldr r0, [pc, r0]
125+
; PIC-NEXT: bx lr
126+
; PIC-NEXT: .p2align 2
127+
; PIC-NEXT: @ %bb.1:
128+
; PIC-NEXT: .LCPI5_0:
129+
; PIC-NEXT: .Ltmp1:
130+
; PIC-NEXT: .long preemptable_func(GOT_PREL)-((.LPC5_0+8)-.Ltmp1)
131+
ret ptr @preemptable_func
132+
}
133+
134+
define dso_local ptr @dsolocal_func() nounwind {
135+
; STATIC-LABEL: dsolocal_func:
136+
; STATIC: @ %bb.0:
137+
; STATIC-NEXT: movw r0, :lower16:dsolocal_func
138+
; STATIC-NEXT: movt r0, :upper16:dsolocal_func
139+
; STATIC-NEXT: bx lr
140+
;
141+
; PIC-LABEL: dsolocal_func:
142+
; PIC: @ %bb.0:
143+
; PIC-NEXT: ldr r0, .LCPI6_0
144+
; PIC-NEXT: .LPC6_0:
145+
; PIC-NEXT: add r0, pc, r0
146+
; PIC-NEXT: bx lr
147+
; PIC-NEXT: .p2align 2
148+
; PIC-NEXT: @ %bb.1:
149+
; PIC-NEXT: .LCPI6_0:
150+
; PIC-NEXT: .long dsolocal_func-(.LPC6_0+8)
151+
ret ptr @dsolocal_func
152+
}
153+
154+
define weak dso_local ptr @weak_dsolocal_func() nounwind {
155+
; STATIC-LABEL: weak_dsolocal_func:
156+
; STATIC: @ %bb.0:
157+
; STATIC-NEXT: movw r0, :lower16:weak_dsolocal_func
158+
; STATIC-NEXT: movt r0, :upper16:weak_dsolocal_func
159+
; STATIC-NEXT: bx lr
160+
;
161+
; PIC-LABEL: weak_dsolocal_func:
162+
; PIC: @ %bb.0:
163+
; PIC-NEXT: ldr r0, .LCPI7_0
164+
; PIC-NEXT: .LPC7_0:
165+
; PIC-NEXT: add r0, pc, r0
166+
; PIC-NEXT: bx lr
167+
; PIC-NEXT: .p2align 2
168+
; PIC-NEXT: @ %bb.1:
169+
; PIC-NEXT: .LCPI7_0:
170+
; PIC-NEXT: .long weak_dsolocal_func-(.LPC7_0+8)
171+
ret ptr @weak_dsolocal_func
172+
}
173+
174+
;; call .Ldsolocal_func$local either resolves to a constant at assembly time
175+
;; or produces a relocation referencing a non-preemptible local symbol.
176+
define dso_local void @call_dsolocal_func() nounwind {
177+
; STATIC-LABEL: call_dsolocal_func:
178+
; STATIC: @ %bb.0:
179+
; STATIC-NEXT: .save {r11, lr}
180+
; STATIC-NEXT: push {r11, lr}
181+
; STATIC-NEXT: bl dsolocal_func
182+
; STATIC-NEXT: pop {r11, pc}
183+
;
184+
; PIC-LABEL: call_dsolocal_func:
185+
; PIC: @ %bb.0:
186+
; PIC-NEXT: .save {r11, lr}
187+
; PIC-NEXT: push {r11, lr}
188+
; PIC-NEXT: bl dsolocal_func
189+
; PIC-NEXT: pop {r11, pc}
190+
call ptr @dsolocal_func()
191+
ret void
192+
}

0 commit comments

Comments
 (0)