[PM/AA] Put the 'final' keyword in the correct place. And actually
[oota-llvm.git] / test / MC / AArch64 / arm64-leaf-compact-unwind.s
1 // RUN: llvm-mc -triple=arm64-apple-ios -filetype=obj < %s | \
2 // RUN: llvm-readobj --expand-relocs -sections -section-relocations -section-data | \
3 // RUN: FileCheck %s
4 //
5 // rdar://13070556
6
7 // FIXME: we should add compact unwind support to llvm-objdump -unwind-info
8
9 // CHECK:      Section {
10 // CHECK:        Index: 1
11 // CHECK-NEXT:   Name: __compact_unwind
12 // CHECK-NEXT:   Segment: __LD
13 // CHECK-NEXT:   Address:
14 // CHECK-NEXT:   Size:
15 // CHECK-NEXT:   Offset:
16 // CHECK-NEXT:   Alignment:
17 // CHECK-NEXT:   RelocationOffset:
18 // CHECK-NEXT:   RelocationCount:
19 // CHECK-NEXT:   Type:
20 // CHECK-NEXT:   Attributes [
21 // CHECK-NEXT:     Debug
22 // CHECK-NEXT:   ]
23 // CHECK-NEXT:   Reserved1:
24 // CHECK-NEXT:   Reserved2:
25 // CHECK-NEXT:   Relocations [
26 // CHECK-NEXT:     Relocation {
27 // CHECK-NEXT:       Offset: 0x60
28 // CHECK-NEXT:       PCRel: 0
29 // CHECK-NEXT:       Length: 3
30 // CHECK-NEXT:       Type: ARM64_RELOC_UNSIGNED (0)
31 // CHECK-NEXT:       Section: __text (1)
32 // CHECK-NEXT:     }
33 // CHECK-NEXT:     Relocation {
34 // CHECK-NEXT:       Offset: 0x40
35 // CHECK-NEXT:       PCRel: 0
36 // CHECK-NEXT:       Length: 3
37 // CHECK-NEXT:       Type: ARM64_RELOC_UNSIGNED (0)
38 // CHECK-NEXT:       Section: __text (1)
39 // CHECK-NEXT:     }
40 // CHECK-NEXT:     Relocation {
41 // CHECK-NEXT:       Offset: 0x20
42 // CHECK-NEXT:       PCRel: 0
43 // CHECK-NEXT:       Length: 3
44 // CHECK-NEXT:       Type: ARM64_RELOC_UNSIGNED (0)
45 // CHECK-NEXT:       Section: __text (1)
46 // CHECK-NEXT:     }
47 // CHECK-NEXT:     Relocation {
48 // CHECK-NEXT:       Offset: 0x0
49 // CHECK-NEXT:       PCRel: 0
50 // CHECK-NEXT:       Length: 3
51 // CHECK-NEXT:       Type: ARM64_RELOC_UNSIGNED (0)
52 // CHECK-NEXT:       Section: __text (1)
53 // CHECK-NEXT:     }
54 // CHECK-NEXT:   ]
55 // CHECK-NEXT:   SectionData (
56 // CHECK-NEXT:     0000: 00000000 00000000 08000000 00000002
57 // CHECK-NEXT:     0010: 00000000 00000000 00000000 00000000
58 // CHECK-NEXT:     0020: 08000000 00000000 40000000 00900002
59 // CHECK-NEXT:     0030: 00000000 00000000 00000000 00000000
60 // CHECK-NEXT:     0040: 48000000 00000000 D4000000 0F400002
61 // CHECK-NEXT:     0050: 00000000 00000000 00000000 00000000
62 // CHECK-NEXT:     0060: 1C010000 00000000 54000000 10100202
63 // CHECK-NEXT:     0070: 00000000 00000000 00000000 00000000
64 // CHECK-NEXT:   )
65 // CHECK-NEXT: }
66
67         .section        __TEXT,__text,regular,pure_instructions
68         .globl  _foo1
69         .align  2
70 _foo1:                                  ; @foo1
71         .cfi_startproc
72 ; BB#0:                                 ; %entry
73         add     w0, w0, #42             ; =#42
74         ret
75         .cfi_endproc
76
77         .globl  _foo2
78         .align  2
79 _foo2:                                  ; @foo2
80         .cfi_startproc
81 ; BB#0:                                 ; %entry
82         sub     sp, sp, #144            ; =#144
83 Ltmp2:
84         .cfi_def_cfa_offset 144
85         mov     x9, xzr
86         mov     x8, sp
87 LBB1_1:                                 ; %for.body
88                                         ; =>This Inner Loop Header: Depth=1
89         str     w9, [x8, x9, lsl #2]
90         add     x9, x9, #1              ; =#1
91         cmp     w9, #36                 ; =#36
92         b.ne    LBB1_1
93 ; BB#2:
94         mov     x9, xzr
95         mov     w0, wzr
96 LBB1_3:                                 ; %for.body4
97                                         ; =>This Inner Loop Header: Depth=1
98         ldr     w10, [x8, x9]
99         add     x9, x9, #4              ; =#4
100         cmp     w9, #144                ; =#144
101         add     w0, w10, w0
102         b.ne    LBB1_3
103 ; BB#4:                                 ; %for.end9
104         add     sp, sp, #144            ; =#144
105         ret
106         .cfi_endproc
107
108         .globl  _foo3
109         .align  2
110 _foo3:                                  ; @foo3
111         .cfi_startproc
112 ; BB#0:                                 ; %entry
113         stp     x26, x25, [sp, #-64]!
114         stp     x24, x23, [sp, #16]
115         stp     x22, x21, [sp, #32]
116         stp     x20, x19, [sp, #48]
117 Ltmp3:
118         .cfi_def_cfa_offset 64
119 Ltmp4:
120         .cfi_offset w19, -16
121 Ltmp5:
122         .cfi_offset w20, -24
123 Ltmp6:
124         .cfi_offset w21, -32
125 Ltmp7:
126         .cfi_offset w22, -40
127 Ltmp8:
128         .cfi_offset w23, -48
129 Ltmp9:
130         .cfi_offset w24, -56
131 Ltmp10:
132         .cfi_offset w25, -64
133 Ltmp11:
134         .cfi_offset w26, -72
135 Lloh0:
136         adrp    x8, _bar@GOTPAGE
137 Lloh1:
138         ldr     x8, [x8, _bar@GOTPAGEOFF]
139         ldr     w9, [x8]
140         ldr     w10, [x8]
141         ldr     w11, [x8]
142         ldr     w12, [x8]
143         ldr     w13, [x8]
144         ldr     w14, [x8]
145         ldr     w15, [x8]
146         ldr     w16, [x8]
147         ldr     w17, [x8]
148         ldr     w0, [x8]
149         ldr     w19, [x8]
150         ldr     w20, [x8]
151         ldr     w21, [x8]
152         ldr     w22, [x8]
153         ldr     w23, [x8]
154         ldr     w24, [x8]
155         ldr     w25, [x8]
156         ldr     w8, [x8]
157         add     w9, w10, w9
158         add     w9, w9, w11
159         add     w9, w9, w12
160         add     w9, w9, w13
161         add     w9, w9, w14
162         add     w9, w9, w15
163         add     w9, w9, w16
164         add     w9, w9, w17
165         add     w9, w9, w0
166         add     w9, w9, w19
167         add     w9, w9, w20
168         add     w9, w9, w21
169         add     w9, w9, w22
170         add     w9, w9, w23
171         add     w9, w9, w24
172         add     w9, w9, w25
173         sub     w8, w8, w9
174         sub     w8, w8, w7, lsl #1
175         sub     w8, w8, w6, lsl #1
176         sub     w8, w8, w5, lsl #1
177         sub     w8, w8, w4, lsl #1
178         sub     w8, w8, w3, lsl #1
179         sub     w8, w8, w2, lsl #1
180         sub     w0, w8, w1, lsl #1
181         ldp     x20, x19, [sp, #48]
182         ldp     x22, x21, [sp, #32]
183         ldp     x24, x23, [sp, #16]
184         ldp     x26, x25, [sp], #64
185         ret
186         .loh AdrpLdrGot Lloh0, Lloh1
187         .cfi_endproc
188
189         .globl  _foo4
190         .align  2
191 _foo4:                                  ; @foo4
192         .cfi_startproc
193 ; BB#0:                                 ; %entry
194         stp     x28, x27, [sp, #-16]!
195         sub     sp, sp, #512            ; =#512
196 Ltmp12:
197         .cfi_def_cfa_offset 528
198 Ltmp13:
199         .cfi_offset w27, -16
200 Ltmp14:
201         .cfi_offset w28, -24
202                                         ; kill: W0<def> W0<kill> X0<def>
203         mov     x9, xzr
204         ubfx    x10, x0, #0, #32
205         mov     x8, sp
206 LBB3_1:                                 ; %for.body
207                                         ; =>This Inner Loop Header: Depth=1
208         add     w11, w10, w9
209         str     w11, [x8, x9, lsl #2]
210         add     x9, x9, #1              ; =#1
211         cmp     w9, #128                ; =#128
212         b.ne    LBB3_1
213 ; BB#2:                                 ; %for.cond2.preheader
214         mov     x9, xzr
215         mov     w0, wzr
216         add     x8, x8, w5, sxtw #2
217 LBB3_3:                                 ; %for.body4
218                                         ; =>This Inner Loop Header: Depth=1
219         ldr     w10, [x8, x9]
220         add     x9, x9, #4              ; =#4
221         cmp     w9, #512                ; =#512
222         add     w0, w10, w0
223         b.ne    LBB3_3
224 ; BB#4:                                 ; %for.end11
225         add     sp, sp, #512            ; =#512
226         ldp     x28, x27, [sp], #16
227         ret
228         .cfi_endproc
229
230         .comm   _bar,4,2                ; @bar
231
232 .subsections_via_symbols