1@ This test has a partner (ldr-pseudo-darwin.s) that contains matching
2@ tests for the ldr-pseudo on darwin targets. We need separate files
3@ because the syntax for switching sections and temporary labels differs
4@ between darwin and linux. Any tests added here should have a matching
5@ test added there.
6
7@RUN: llvm-mc -triple   armv7-unknown-linux-gnueabi %s | FileCheck %s
8@RUN: llvm-mc -triple thumbv5-unknown-linux-gnueabi %s | FileCheck %s
9@RUN: llvm-mc -triple thumbv7-unknown-linux-gnueabi %s | FileCheck %s
10
11@
12@ Check that large constants are converted to ldr from constant pool
13@
14@ simple test
15.section b,"ax",%progbits
16@ CHECK-LABEL: f3:
17f3:
18  ldr r0, =0x10001
19@ CHECK: ldr r0, .Ltmp[[TMP0:[0-9]+]]
20
21@ loading multiple constants
22.section c,"ax",%progbits
23@ CHECK-LABEL: f4:
24f4:
25  ldr r0, =0x10002
26@ CHECK: ldr r0, .Ltmp[[TMP1:[0-9]+]]
27  adds r0, r0, #1
28  adds r0, r0, #1
29  adds r0, r0, #1
30  adds r0, r0, #1
31  ldr r0, =0x10003
32@ CHECK: ldr r0, .Ltmp[[TMP2:[0-9]+]]
33  adds r0, r0, #1
34  adds r0, r0, #1
35
36@ TODO: the same constants should have the same constant pool location
37.section d,"ax",%progbits
38@ CHECK-LABEL: f5:
39f5:
40  ldr r0, =0x10004
41@ CHECK: ldr r0, .Ltmp[[TMP3:[0-9]+]]
42  adds r0, r0, #1
43  adds r0, r0, #1
44  adds r0, r0, #1
45  adds r0, r0, #1
46  adds r0, r0, #1
47  adds r0, r0, #1
48  adds r0, r0, #1
49  ldr r0, =0x10004
50@ CHECK: ldr r0, .Ltmp[[TMP4:[0-9]+]]
51  adds r0, r0, #1
52  adds r0, r0, #1
53  adds r0, r0, #1
54  adds r0, r0, #1
55  adds r0, r0, #1
56  adds r0, r0, #1
57
58@ a section defined in multiple pieces should be merged and use a single constant pool
59.section e,"ax",%progbits
60@ CHECK-LABEL: f6:
61f6:
62  ldr r0, =0x10006
63@ CHECK: ldr r0, .Ltmp[[TMP5:[0-9]+]]
64  adds r0, r0, #1
65  adds r0, r0, #1
66  adds r0, r0, #1
67
68.section f, "ax", %progbits
69@ CHECK-LABEL: f7:
70f7:
71  adds r0, r0, #1
72  adds r0, r0, #1
73  adds r0, r0, #1
74
75.section e, "ax", %progbits
76@ CHECK-LABEL: f8:
77f8:
78  adds r0, r0, #1
79  ldr r0, =0x10007
80@ CHECK: ldr r0, .Ltmp[[TMP6:[0-9]+]]
81  adds r0, r0, #1
82  adds r0, r0, #1
83
84@
85@ Check that symbols can be loaded using ldr pseudo
86@
87
88@ load an undefined symbol
89.section g,"ax",%progbits
90@ CHECK-LABEL: f9:
91f9:
92  ldr r0, =foo
93@ CHECK: ldr r0, .Ltmp[[TMP7:[0-9]+]]
94
95@ load a symbol from another section
96.section h,"ax",%progbits
97@ CHECK-LABEL: f10:
98f10:
99  ldr r0, =f5
100@ CHECK: ldr r0, .Ltmp[[TMP8:[0-9]+]]
101
102@ load a symbol from the same section
103.section i,"ax",%progbits
104@ CHECK-LABEL: f11:
105f11:
106  ldr r0, =f12
107@ CHECK: ldr r0, .Ltmp[[TMP9:[0-9]+]]
108
109@ CHECK-LABEL: f12:
110f12:
111  adds r0, r0, #1
112  adds r0, r0, #1
113
114.section j,"ax",%progbits
115@ mix of symbols and constants
116@ CHECK-LABEL: f13:
117f13:
118  adds r0, r0, #1
119  adds r0, r0, #1
120  ldr r0, =0x101
121@ CHECK: ldr r0, .Ltmp[[TMP10:[0-9]+]]
122  adds r0, r0, #1
123  adds r0, r0, #1
124  ldr r0, =bar
125@ CHECK: ldr r0, .Ltmp[[TMP11:[0-9]+]]
126  adds r0, r0, #1
127  adds r0, r0, #1
128@
129@ Check for correct usage in other contexts
130@
131
132@ usage in macro
133.macro useit_in_a_macro
134  ldr r0, =0x10008
135  ldr r0, =baz
136.endm
137.section k,"ax",%progbits
138@ CHECK-LABEL: f14:
139f14:
140  useit_in_a_macro
141@ CHECK: ldr r0, .Ltmp[[TMP12:[0-9]+]]
142@ CHECK: ldr r0, .Ltmp[[TMP13:[0-9]+]]
143
144@ usage with expressions
145.section l, "ax", %progbits
146@ CHECK-LABEL: f15:
147f15:
148  ldr r0, =0x10001+8
149@ CHECK: ldr r0, .Ltmp[[TMP14:[0-9]+]]
150  adds r0, r0, #1
151  ldr r0, =bar+4
152@ CHECK: ldr r0, .Ltmp[[TMP15:[0-9]+]]
153  adds r0, r0, #1
154
155@
156@ Constant Pools
157@
158@ CHECK: .section b,"ax",%progbits
159@ CHECK: .align 2
160@ CHECK: .Ltmp[[TMP0]]
161@ CHECK: .long 65537
162
163@ CHECK: .section c,"ax",%progbits
164@ CHECK: .align 2
165@ CHECK: .Ltmp[[TMP1]]
166@ CHECK: .long 65538
167@ CHECK: .Ltmp[[TMP2]]
168@ CHECK: .long 65539
169
170@ CHECK: .section d,"ax",%progbits
171@ CHECK: .align 2
172@ CHECK: .Ltmp[[TMP3]]
173@ CHECK: .long 65540
174@ CHECK: .Ltmp[[TMP4]]
175@ CHECK: .long 65540
176
177@ CHECK: .section e,"ax",%progbits
178@ CHECK: .align 2
179@ CHECK: .Ltmp[[TMP5]]
180@ CHECK: .long 65542
181@ CHECK: .Ltmp[[TMP6]]
182@ CHECK: .long 65543
183
184@ Should not switch to section because it has no constant pool
185@ CHECK-NOT: .section f,"ax",%progbits
186
187@ CHECK: .section g,"ax",%progbits
188@ CHECK: .align 2
189@ CHECK: .Ltmp[[TMP7]]
190@ CHECK: .long foo
191
192@ CHECK: .section h,"ax",%progbits
193@ CHECK: .align 2
194@ CHECK: .Ltmp[[TMP8]]
195@ CHECK: .long f5
196
197@ CHECK: .section i,"ax",%progbits
198@ CHECK: .align 2
199@ CHECK: .Ltmp[[TMP9]]
200@ CHECK: .long f12
201
202@ CHECK: .section j,"ax",%progbits
203@ CHECK: .align 2
204@ CHECK: .Ltmp[[TMP10]]
205@ CHECK: .long 257
206@ CHECK: .Ltmp[[TMP11]]
207@ CHECK: .long bar
208
209@ CHECK: .section k,"ax",%progbits
210@ CHECK: .align 2
211@ CHECK: .Ltmp[[TMP12]]
212@ CHECK: .long 65544
213@ CHECK: .Ltmp[[TMP13]]
214@ CHECK: .long baz
215
216@ CHECK: .section l,"ax",%progbits
217@ CHECK: .align 2
218@ CHECK: .Ltmp[[TMP14]]
219@ CHECK: .long 65545
220@ CHECK: .Ltmp[[TMP15]]
221@ CHECK: .long bar+4
222