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