xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/fast-isel-intrinsic.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-apple-ios -verify-machineinstrs | FileCheck %s --check-prefix=ARM --check-prefix=ARM-MACHO
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-linux-gnueabi -verify-machineinstrs | FileCheck %s --check-prefix=ARM --check-prefix=ARM-ELF
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios -verify-machineinstrs | FileCheck %s --check-prefix=THUMB
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-apple-ios -mattr=+long-calls -verify-machineinstrs | FileCheck %s --check-prefix=ARM-LONG --check-prefix=ARM-LONG-MACHO
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-linux-gnueabi -mattr=+long-calls -verify-machineinstrs | FileCheck %s --check-prefix=ARM-LONG --check-prefix=ARM-LONG-ELF
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios -mattr=+long-calls -verify-machineinstrs | FileCheck %s --check-prefix=THUMB-LONG
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker; Note that some of these tests assume that relocations are either
9*9880d681SAndroid Build Coastguard Worker; movw/movt or constant pool loads. Different platforms will select
10*9880d681SAndroid Build Coastguard Worker; different approaches.
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker@message1 = global [60 x i8] c"The LLVM Compiler Infrastructure\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00", align 1
13*9880d681SAndroid Build Coastguard Worker@temp = common global [60 x i8] zeroinitializer, align 1
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerdefine void @t1() nounwind ssp {
16*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t1:
17*9880d681SAndroid Build Coastguard Worker; ARM: {{(movw r0, :lower16:_?message1)|(ldr r0, .LCPI)}}
18*9880d681SAndroid Build Coastguard Worker; ARM: {{(movt r0, :upper16:_?message1)|(ldr r0, \[r0\])}}
19*9880d681SAndroid Build Coastguard Worker; ARM: add r0, r0, #5
20*9880d681SAndroid Build Coastguard Worker; ARM: movw r1, #64
21*9880d681SAndroid Build Coastguard Worker; ARM: movw r2, #10
22*9880d681SAndroid Build Coastguard Worker; ARM: and r1, r1, #255
23*9880d681SAndroid Build Coastguard Worker; ARM: bl {{_?}}memset
24*9880d681SAndroid Build Coastguard Worker; ARM-LONG-LABEL: t1:
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: {{(movw r3, :lower16:L_memset\$non_lazy_ptr)|(ldr r3, .LCPI)}}
27*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: {{(movt r3, :upper16:L_memset\$non_lazy_ptr)?}}
28*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: ldr r3, [r3]
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Worker; ARM-LONG-ELF: movw r3, :lower16:memset
31*9880d681SAndroid Build Coastguard Worker; ARM-LONG-ELF: movt r3, :upper16:memset
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker; ARM-LONG: blx r3
34*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t1:
35*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movw r0, :lower16:_?message1)|(ldr.n r0, .LCPI)}}
36*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movt r0, :upper16:_?message1)|(ldr r0, \[r0\])}}
37*9880d681SAndroid Build Coastguard Worker; THUMB: adds r0, #5
38*9880d681SAndroid Build Coastguard Worker; THUMB: movs r1, #64
39*9880d681SAndroid Build Coastguard Worker; THUMB: movs r2, #10
40*9880d681SAndroid Build Coastguard Worker; THUMB: and r1, r1, #255
41*9880d681SAndroid Build Coastguard Worker; THUMB: bl {{_?}}memset
42*9880d681SAndroid Build Coastguard Worker; THUMB-LONG-LABEL: t1:
43*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: movw r3, :lower16:L_memset$non_lazy_ptr
44*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: movt r3, :upper16:L_memset$non_lazy_ptr
45*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: ldr r3, [r3]
46*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: blx r3
47*9880d681SAndroid Build Coastguard Worker  call void @llvm.memset.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @message1, i32 0, i32 5), i8 64, i32 10, i32 4, i1 false)
48*9880d681SAndroid Build Coastguard Worker  ret void
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerdefine void @t2() nounwind ssp {
54*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t2:
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr r0, .LCPI)}}
57*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}}
58*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: ldr r0, [r0]
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movw r0, :lower16:temp
61*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movt r0, :upper16:temp
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Worker; ARM: add r1, r0, #4
64*9880d681SAndroid Build Coastguard Worker; ARM: add r0, r0, #16
65*9880d681SAndroid Build Coastguard Worker; ARM: movw r2, #17
66*9880d681SAndroid Build Coastguard Worker; ARM: str r0, [sp[[SLOT:[, #0-9]*]]] @ 4-byte Spill
67*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r1
68*9880d681SAndroid Build Coastguard Worker; ARM: ldr r1, [sp[[SLOT]]] @ 4-byte Reload
69*9880d681SAndroid Build Coastguard Worker; ARM: bl {{_?}}memcpy
70*9880d681SAndroid Build Coastguard Worker; ARM-LONG-LABEL: t2:
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: {{(movw r3, :lower16:L_memcpy\$non_lazy_ptr)|(ldr r3, .LCPI)}}
73*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: {{(movt r3, :upper16:L_memcpy\$non_lazy_ptr)?}}
74*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: ldr r3, [r3]
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker; ARM-LONG-ELF: movw r3, :lower16:memcpy
77*9880d681SAndroid Build Coastguard Worker; ARM-LONG-ELF: movt r3, :upper16:memcpy
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker; ARM-LONG: blx r3
80*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t2:
81*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr.n r0, .LCPI)}}
82*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}}
83*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r0, [r0]
84*9880d681SAndroid Build Coastguard Worker; THUMB: adds r1, r0, #4
85*9880d681SAndroid Build Coastguard Worker; THUMB: adds r0, #16
86*9880d681SAndroid Build Coastguard Worker; THUMB: movs r2, #17
87*9880d681SAndroid Build Coastguard Worker; THUMB: str r0, [sp[[SLOT:[, #0-9]*]]] @ 4-byte Spill
88*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, r1
89*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r1,  [sp[[SLOT]]] @ 4-byte Reload
90*9880d681SAndroid Build Coastguard Worker; THUMB: bl {{_?}}memcpy
91*9880d681SAndroid Build Coastguard Worker; THUMB-LONG-LABEL: t2:
92*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: movw r3, :lower16:L_memcpy$non_lazy_ptr
93*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: movt r3, :upper16:L_memcpy$non_lazy_ptr
94*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: ldr r3, [r3]
95*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: blx r3
96*9880d681SAndroid Build Coastguard Worker  call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 16), i32 17, i32 4, i1 false)
97*9880d681SAndroid Build Coastguard Worker  ret void
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Workerdefine void @t3() nounwind ssp {
103*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t3:
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr r0, .LCPI)}}
106*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}}
107*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: ldr r0, [r0]
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movw r0, :lower16:temp
110*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movt r0, :upper16:temp
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Worker; ARM: add r1, r0, #4
114*9880d681SAndroid Build Coastguard Worker; ARM: add r0, r0, #16
115*9880d681SAndroid Build Coastguard Worker; ARM: movw r2, #10
116*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r1
117*9880d681SAndroid Build Coastguard Worker; ARM: bl {{_?}}memmove
118*9880d681SAndroid Build Coastguard Worker; ARM-LONG-LABEL: t3:
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: {{(movw r3, :lower16:L_memmove\$non_lazy_ptr)|(ldr r3, .LCPI)}}
121*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: {{(movt r3, :upper16:L_memmove\$non_lazy_ptr)?}}
122*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: ldr r3, [r3]
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker; ARM-LONG-ELF: movw r3, :lower16:memmove
125*9880d681SAndroid Build Coastguard Worker; ARM-LONG-ELF: movt r3, :upper16:memmove
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Worker; ARM-LONG: blx r3
128*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t3:
129*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr.n r0, .LCPI)}}
130*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}}
131*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r0, [r0]
132*9880d681SAndroid Build Coastguard Worker; THUMB: adds r1, r0, #4
133*9880d681SAndroid Build Coastguard Worker; THUMB: adds r0, #16
134*9880d681SAndroid Build Coastguard Worker; THUMB: movs r2, #10
135*9880d681SAndroid Build Coastguard Worker; THUMB: str r0, [sp[[SLOT:[, #0-9]*]]] @ 4-byte Spill
136*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, r1
137*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r1,  [sp[[SLOT]]] @ 4-byte Reload
138*9880d681SAndroid Build Coastguard Worker; THUMB: bl {{_?}}memmove
139*9880d681SAndroid Build Coastguard Worker; THUMB-LONG-LABEL: t3:
140*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: movw r3, :lower16:L_memmove$non_lazy_ptr
141*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: movt r3, :upper16:L_memmove$non_lazy_ptr
142*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: ldr r3, [r3]
143*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: blx r3
144*9880d681SAndroid Build Coastguard Worker  call void @llvm.memmove.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 16), i32 10, i32 1, i1 false)
145*9880d681SAndroid Build Coastguard Worker  ret void
146*9880d681SAndroid Build Coastguard Worker}
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Workerdefine void @t4() nounwind ssp {
149*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t4:
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr r0, .LCPI)}}
152*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}}
153*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: ldr r0, [r0]
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movw r0, :lower16:temp
156*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movt r0, :upper16:temp
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker; ARM: ldr r1, [r0, #16]
159*9880d681SAndroid Build Coastguard Worker; ARM: str r1, [r0, #4]
160*9880d681SAndroid Build Coastguard Worker; ARM: ldr r1, [r0, #20]
161*9880d681SAndroid Build Coastguard Worker; ARM: str r1, [r0, #8]
162*9880d681SAndroid Build Coastguard Worker; ARM: ldrh r1, [r0, #24]
163*9880d681SAndroid Build Coastguard Worker; ARM: strh r1, [r0, #12]
164*9880d681SAndroid Build Coastguard Worker; ARM: bx lr
165*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t4:
166*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr.n r0, .LCPI)}}
167*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}}
168*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r0, [r0]
169*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r1, [r0, #16]
170*9880d681SAndroid Build Coastguard Worker; THUMB: str r1, [r0, #4]
171*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r1, [r0, #20]
172*9880d681SAndroid Build Coastguard Worker; THUMB: str r1, [r0, #8]
173*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r1, [r0, #24]
174*9880d681SAndroid Build Coastguard Worker; THUMB: strh r1, [r0, #12]
175*9880d681SAndroid Build Coastguard Worker; THUMB: bx lr
176*9880d681SAndroid Build Coastguard Worker  call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 16), i32 10, i32 4, i1 false)
177*9880d681SAndroid Build Coastguard Worker  ret void
178*9880d681SAndroid Build Coastguard Worker}
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Workerdefine void @t5() nounwind ssp {
183*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t5:
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr r0, .LCPI)}}
186*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}}
187*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: ldr r0, [r0]
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movw r0, :lower16:temp
190*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movt r0, :upper16:temp
191*9880d681SAndroid Build Coastguard Worker
192*9880d681SAndroid Build Coastguard Worker; ARM: ldrh r1, [r0, #16]
193*9880d681SAndroid Build Coastguard Worker; ARM: strh r1, [r0, #4]
194*9880d681SAndroid Build Coastguard Worker; ARM: ldrh r1, [r0, #18]
195*9880d681SAndroid Build Coastguard Worker; ARM: strh r1, [r0, #6]
196*9880d681SAndroid Build Coastguard Worker; ARM: ldrh r1, [r0, #20]
197*9880d681SAndroid Build Coastguard Worker; ARM: strh r1, [r0, #8]
198*9880d681SAndroid Build Coastguard Worker; ARM: ldrh r1, [r0, #22]
199*9880d681SAndroid Build Coastguard Worker; ARM: strh r1, [r0, #10]
200*9880d681SAndroid Build Coastguard Worker; ARM: ldrh r1, [r0, #24]
201*9880d681SAndroid Build Coastguard Worker; ARM: strh r1, [r0, #12]
202*9880d681SAndroid Build Coastguard Worker; ARM: bx lr
203*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t5:
204*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr.n r0, .LCPI)}}
205*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}}
206*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r0, [r0]
207*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r1, [r0, #16]
208*9880d681SAndroid Build Coastguard Worker; THUMB: strh r1, [r0, #4]
209*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r1, [r0, #18]
210*9880d681SAndroid Build Coastguard Worker; THUMB: strh r1, [r0, #6]
211*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r1, [r0, #20]
212*9880d681SAndroid Build Coastguard Worker; THUMB: strh r1, [r0, #8]
213*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r1, [r0, #22]
214*9880d681SAndroid Build Coastguard Worker; THUMB: strh r1, [r0, #10]
215*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r1, [r0, #24]
216*9880d681SAndroid Build Coastguard Worker; THUMB: strh r1, [r0, #12]
217*9880d681SAndroid Build Coastguard Worker; THUMB: bx lr
218*9880d681SAndroid Build Coastguard Worker  call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 16), i32 10, i32 2, i1 false)
219*9880d681SAndroid Build Coastguard Worker  ret void
220*9880d681SAndroid Build Coastguard Worker}
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Workerdefine void @t6() nounwind ssp {
223*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t6:
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr r0, .LCPI)}}
226*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}}
227*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: ldr r0, [r0]
228*9880d681SAndroid Build Coastguard Worker
229*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movw r0, :lower16:temp
230*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movt r0, :upper16:temp
231*9880d681SAndroid Build Coastguard Worker
232*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #16]
233*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #4]
234*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #17]
235*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #5]
236*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #18]
237*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #6]
238*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #19]
239*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #7]
240*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #20]
241*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #8]
242*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #21]
243*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #9]
244*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #22]
245*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #10]
246*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #23]
247*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #11]
248*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #24]
249*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #12]
250*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #25]
251*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #13]
252*9880d681SAndroid Build Coastguard Worker; ARM: bx lr
253*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t6:
254*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr.n r0, .LCPI)}}
255*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}}
256*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r0, [r0]
257*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #16]
258*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #4]
259*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #17]
260*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #5]
261*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #18]
262*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #6]
263*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #19]
264*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #7]
265*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #20]
266*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #8]
267*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #21]
268*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #9]
269*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #22]
270*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #10]
271*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #23]
272*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #11]
273*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #24]
274*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #12]
275*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #25]
276*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #13]
277*9880d681SAndroid Build Coastguard Worker; THUMB: bx lr
278*9880d681SAndroid Build Coastguard Worker  call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 16), i32 10, i32 1, i1 false)
279*9880d681SAndroid Build Coastguard Worker  ret void
280*9880d681SAndroid Build Coastguard Worker}
281*9880d681SAndroid Build Coastguard Worker
282*9880d681SAndroid Build Coastguard Worker; rdar://13202135
283*9880d681SAndroid Build Coastguard Workerdefine void @t7() nounwind ssp {
284*9880d681SAndroid Build Coastguard Worker; Just make sure this doesn't assert when we have an odd length and an alignment of 2.
285*9880d681SAndroid Build Coastguard Worker  call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 16), i32 3, i32 2, i1 false)
286*9880d681SAndroid Build Coastguard Worker  ret void
287*9880d681SAndroid Build Coastguard Worker}
288*9880d681SAndroid Build Coastguard Worker
289*9880d681SAndroid Build Coastguard Workerdefine i32 @t8(i32 %x) nounwind {
290*9880d681SAndroid Build Coastguard Workerentry:
291*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t8:
292*9880d681SAndroid Build Coastguard Worker; ARM-NOT: FastISel missed call:   %expval = call i32 @llvm.expect.i32(i32 %x, i32 1)
293*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t8:
294*9880d681SAndroid Build Coastguard Worker; THUMB-NOT: FastISel missed call:   %expval = call i32 @llvm.expect.i32(i32 %x, i32 1)
295*9880d681SAndroid Build Coastguard Worker  %expval = call i32 @llvm.expect.i32(i32 %x, i32 1)
296*9880d681SAndroid Build Coastguard Worker  ret i32 %expval
297*9880d681SAndroid Build Coastguard Worker}
298*9880d681SAndroid Build Coastguard Worker
299*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.expect.i32(i32, i32) nounwind readnone
300