xref: /aosp_15_r20/external/llvm/test/CodeGen/AArch64/arm64-ld-from-st.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple aarch64--none-eabi -verify-machineinstrs | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr64
4*9880d681SAndroid Build Coastguard Worker; CHECK: mov x0, x1
5*9880d681SAndroid Build Coastguard Workerdefine i64 @Str64Ldr64(i64* nocapture %P, i64 %v, i64 %n) {
6*9880d681SAndroid Build Coastguard Workerentry:
7*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i64*
8*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
9*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
10*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i64, i64* %0, i64 1
11*9880d681SAndroid Build Coastguard Worker  %1 = load i64, i64* %arrayidx1
12*9880d681SAndroid Build Coastguard Worker  ret i64 %1
13*9880d681SAndroid Build Coastguard Worker}
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr32_0
16*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x1, #0xffffffff
17*9880d681SAndroid Build Coastguard Workerdefine i32 @Str64Ldr32_0(i64* nocapture %P, i64 %v, i64 %n) {
18*9880d681SAndroid Build Coastguard Workerentry:
19*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i32*
20*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
21*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
22*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i32, i32* %0, i64 2
23*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* %arrayidx1
24*9880d681SAndroid Build Coastguard Worker  ret i32 %1
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr32_1
28*9880d681SAndroid Build Coastguard Worker; CHECK: lsr x0, x1, #32
29*9880d681SAndroid Build Coastguard Workerdefine i32 @Str64Ldr32_1(i64* nocapture %P, i64 %v, i64 %n) {
30*9880d681SAndroid Build Coastguard Workerentry:
31*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i32*
32*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
33*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
34*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i32, i32* %0, i64 3
35*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* %arrayidx1
36*9880d681SAndroid Build Coastguard Worker  ret i32 %1
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr16_0
40*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x1, #0xffff
41*9880d681SAndroid Build Coastguard Workerdefine i16 @Str64Ldr16_0(i64* nocapture %P, i64 %v, i64 %n) {
42*9880d681SAndroid Build Coastguard Workerentry:
43*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i16*
44*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
45*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
46*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 4
47*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
48*9880d681SAndroid Build Coastguard Worker  ret i16 %1
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr16_1
52*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #16, #16
53*9880d681SAndroid Build Coastguard Workerdefine i16 @Str64Ldr16_1(i64* nocapture %P, i64 %v, i64 %n) {
54*9880d681SAndroid Build Coastguard Workerentry:
55*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i16*
56*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
57*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
58*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 5
59*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
60*9880d681SAndroid Build Coastguard Worker  ret i16 %1
61*9880d681SAndroid Build Coastguard Worker}
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr16_2
64*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #32, #16
65*9880d681SAndroid Build Coastguard Workerdefine i16 @Str64Ldr16_2(i64* nocapture %P, i64 %v, i64 %n) {
66*9880d681SAndroid Build Coastguard Workerentry:
67*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i16*
68*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
69*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
70*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 6
71*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
72*9880d681SAndroid Build Coastguard Worker  ret i16 %1
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr16_3
76*9880d681SAndroid Build Coastguard Worker; CHECK: lsr x0, x1, #48
77*9880d681SAndroid Build Coastguard Workerdefine i16 @Str64Ldr16_3(i64* nocapture %P, i64 %v, i64 %n) {
78*9880d681SAndroid Build Coastguard Workerentry:
79*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i16*
80*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
81*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
82*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 7
83*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
84*9880d681SAndroid Build Coastguard Worker  ret i16 %1
85*9880d681SAndroid Build Coastguard Worker}
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_0
88*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x1, #0xff
89*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_0(i64* nocapture %P, i64 %v, i64 %n) {
90*9880d681SAndroid Build Coastguard Workerentry:
91*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
92*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
93*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
94*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 8
95*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
96*9880d681SAndroid Build Coastguard Worker  ret i8 %1
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_1
100*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #8, #8
101*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_1(i64* nocapture %P, i64 %v, i64 %n) {
102*9880d681SAndroid Build Coastguard Workerentry:
103*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
104*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
105*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
106*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 9
107*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
108*9880d681SAndroid Build Coastguard Worker  ret i8 %1
109*9880d681SAndroid Build Coastguard Worker}
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_2
112*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #16, #8
113*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_2(i64* nocapture %P, i64 %v, i64 %n) {
114*9880d681SAndroid Build Coastguard Workerentry:
115*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
116*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
117*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
118*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 10
119*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
120*9880d681SAndroid Build Coastguard Worker  ret i8 %1
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_3
124*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #24, #8
125*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_3(i64* nocapture %P, i64 %v, i64 %n) {
126*9880d681SAndroid Build Coastguard Workerentry:
127*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
128*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
129*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
130*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 11
131*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
132*9880d681SAndroid Build Coastguard Worker  ret i8 %1
133*9880d681SAndroid Build Coastguard Worker}
134*9880d681SAndroid Build Coastguard Worker
135*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_4
136*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #32, #8
137*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_4(i64* nocapture %P, i64 %v, i64 %n) {
138*9880d681SAndroid Build Coastguard Workerentry:
139*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
140*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
141*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
142*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 12
143*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
144*9880d681SAndroid Build Coastguard Worker  ret i8 %1
145*9880d681SAndroid Build Coastguard Worker}
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_5
148*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #40, #8
149*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_5(i64* nocapture %P, i64 %v, i64 %n) {
150*9880d681SAndroid Build Coastguard Workerentry:
151*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
152*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
153*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
154*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 13
155*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
156*9880d681SAndroid Build Coastguard Worker  ret i8 %1
157*9880d681SAndroid Build Coastguard Worker}
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_6
160*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #48, #8
161*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_6(i64* nocapture %P, i64 %v, i64 %n) {
162*9880d681SAndroid Build Coastguard Workerentry:
163*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
164*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
165*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
166*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 14
167*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
168*9880d681SAndroid Build Coastguard Worker  ret i8 %1
169*9880d681SAndroid Build Coastguard Worker}
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_7
172*9880d681SAndroid Build Coastguard Worker; CHECK: lsr x0, x1, #56
173*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_7(i64* nocapture %P, i64 %v, i64 %n) {
174*9880d681SAndroid Build Coastguard Workerentry:
175*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
176*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1
177*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
178*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 15
179*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
180*9880d681SAndroid Build Coastguard Worker  ret i8 %1
181*9880d681SAndroid Build Coastguard Worker}
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr32
184*9880d681SAndroid Build Coastguard Worker; CHECK: mov w0, w1
185*9880d681SAndroid Build Coastguard Workerdefine i32 @Str32Ldr32(i32* nocapture %P, i32 %v, i64 %n) {
186*9880d681SAndroid Build Coastguard Workerentry:
187*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i32*
188*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1
189*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
190*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i32, i32* %0, i64 1
191*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* %arrayidx1
192*9880d681SAndroid Build Coastguard Worker  ret i32 %1
193*9880d681SAndroid Build Coastguard Worker}
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr16_0
196*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xffff
197*9880d681SAndroid Build Coastguard Workerdefine i16 @Str32Ldr16_0(i32* nocapture %P, i32 %v, i64 %n) {
198*9880d681SAndroid Build Coastguard Workerentry:
199*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i16*
200*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1
201*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
202*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 2
203*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
204*9880d681SAndroid Build Coastguard Worker  ret i16 %1
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr16_1
208*9880d681SAndroid Build Coastguard Worker; CHECK: lsr	w0, w1, #16
209*9880d681SAndroid Build Coastguard Workerdefine i16 @Str32Ldr16_1(i32* nocapture %P, i32 %v, i64 %n) {
210*9880d681SAndroid Build Coastguard Workerentry:
211*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i16*
212*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1
213*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
214*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 3
215*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
216*9880d681SAndroid Build Coastguard Worker  ret i16 %1
217*9880d681SAndroid Build Coastguard Worker}
218*9880d681SAndroid Build Coastguard Worker
219*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr8_0
220*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xff
221*9880d681SAndroid Build Coastguard Workerdefine i8 @Str32Ldr8_0(i32* nocapture %P, i32 %v, i64 %n) {
222*9880d681SAndroid Build Coastguard Workerentry:
223*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i8*
224*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1
225*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
226*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 4
227*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
228*9880d681SAndroid Build Coastguard Worker  ret i8 %1
229*9880d681SAndroid Build Coastguard Worker}
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr8_1
232*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx w0, w1, #8, #8
233*9880d681SAndroid Build Coastguard Workerdefine i8 @Str32Ldr8_1(i32* nocapture %P, i32 %v, i64 %n) {
234*9880d681SAndroid Build Coastguard Workerentry:
235*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i8*
236*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1
237*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
238*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 5
239*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
240*9880d681SAndroid Build Coastguard Worker  ret i8 %1
241*9880d681SAndroid Build Coastguard Worker}
242*9880d681SAndroid Build Coastguard Worker
243*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr8_2
244*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx w0, w1, #16, #8
245*9880d681SAndroid Build Coastguard Workerdefine i8 @Str32Ldr8_2(i32* nocapture %P, i32 %v, i64 %n) {
246*9880d681SAndroid Build Coastguard Workerentry:
247*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i8*
248*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1
249*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
250*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 6
251*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
252*9880d681SAndroid Build Coastguard Worker  ret i8 %1
253*9880d681SAndroid Build Coastguard Worker}
254*9880d681SAndroid Build Coastguard Worker
255*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr8_3
256*9880d681SAndroid Build Coastguard Worker; CHECK: lsr w0, w1, #24
257*9880d681SAndroid Build Coastguard Workerdefine i8 @Str32Ldr8_3(i32* nocapture %P, i32 %v, i64 %n) {
258*9880d681SAndroid Build Coastguard Workerentry:
259*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i8*
260*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1
261*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
262*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 7
263*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
264*9880d681SAndroid Build Coastguard Worker  ret i8 %1
265*9880d681SAndroid Build Coastguard Worker}
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str16Ldr16
268*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xffff
269*9880d681SAndroid Build Coastguard Workerdefine i16 @Str16Ldr16(i16* nocapture %P, i16 %v, i64 %n) {
270*9880d681SAndroid Build Coastguard Workerentry:
271*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i16* %P to i16*
272*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i16, i16* %P, i64 1
273*9880d681SAndroid Build Coastguard Worker  store i16 %v, i16* %arrayidx0
274*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 1
275*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
276*9880d681SAndroid Build Coastguard Worker  ret i16 %1
277*9880d681SAndroid Build Coastguard Worker}
278*9880d681SAndroid Build Coastguard Worker
279*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str16Ldr8_0
280*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xff
281*9880d681SAndroid Build Coastguard Workerdefine i8 @Str16Ldr8_0(i16* nocapture %P, i16 %v, i64 %n) {
282*9880d681SAndroid Build Coastguard Workerentry:
283*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i16* %P to i8*
284*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i16, i16* %P, i64 1
285*9880d681SAndroid Build Coastguard Worker  store i16 %v, i16* %arrayidx0
286*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 2
287*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
288*9880d681SAndroid Build Coastguard Worker  ret i8 %1
289*9880d681SAndroid Build Coastguard Worker}
290*9880d681SAndroid Build Coastguard Worker
291*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str16Ldr8_1
292*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx w0, w1, #8, #8
293*9880d681SAndroid Build Coastguard Workerdefine i8 @Str16Ldr8_1(i16* nocapture %P, i16 %v, i64 %n) {
294*9880d681SAndroid Build Coastguard Workerentry:
295*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i16* %P to i8*
296*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i16, i16* %P, i64 1
297*9880d681SAndroid Build Coastguard Worker  store i16 %v, i16* %arrayidx0
298*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 3
299*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
300*9880d681SAndroid Build Coastguard Worker  ret i8 %1
301*9880d681SAndroid Build Coastguard Worker}
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Worker
304*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr64
305*9880d681SAndroid Build Coastguard Worker; CHECK: mov x0, x1
306*9880d681SAndroid Build Coastguard Workerdefine i64 @Unscaled_Str64Ldr64(i64* nocapture %P, i64 %v, i64 %n) {
307*9880d681SAndroid Build Coastguard Workerentry:
308*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i64*
309*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
310*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
311*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i64, i64* %0, i64 -1
312*9880d681SAndroid Build Coastguard Worker  %1 = load i64, i64* %arrayidx1
313*9880d681SAndroid Build Coastguard Worker  ret i64 %1
314*9880d681SAndroid Build Coastguard Worker}
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr32_0
317*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x1, #0xffffffff
318*9880d681SAndroid Build Coastguard Workerdefine i32 @Unscaled_Str64Ldr32_0(i64* nocapture %P, i64 %v, i64 %n) {
319*9880d681SAndroid Build Coastguard Workerentry:
320*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i32*
321*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
322*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
323*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i32, i32* %0, i64 -2
324*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* %arrayidx1
325*9880d681SAndroid Build Coastguard Worker  ret i32 %1
326*9880d681SAndroid Build Coastguard Worker}
327*9880d681SAndroid Build Coastguard Worker
328*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr32_1
329*9880d681SAndroid Build Coastguard Worker; CHECK: lsr x0, x1, #32
330*9880d681SAndroid Build Coastguard Workerdefine i32 @Unscaled_Str64Ldr32_1(i64* nocapture %P, i64 %v, i64 %n) {
331*9880d681SAndroid Build Coastguard Workerentry:
332*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i32*
333*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
334*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
335*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i32, i32* %0, i64 -1
336*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* %arrayidx1
337*9880d681SAndroid Build Coastguard Worker  ret i32 %1
338*9880d681SAndroid Build Coastguard Worker}
339*9880d681SAndroid Build Coastguard Worker
340*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr16_0
341*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x1, #0xffff
342*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str64Ldr16_0(i64* nocapture %P, i64 %v, i64 %n) {
343*9880d681SAndroid Build Coastguard Workerentry:
344*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i16*
345*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
346*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
347*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -4
348*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
349*9880d681SAndroid Build Coastguard Worker  ret i16 %1
350*9880d681SAndroid Build Coastguard Worker}
351*9880d681SAndroid Build Coastguard Worker
352*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr16_1
353*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #16, #16
354*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str64Ldr16_1(i64* nocapture %P, i64 %v, i64 %n) {
355*9880d681SAndroid Build Coastguard Workerentry:
356*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i16*
357*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
358*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
359*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -3
360*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
361*9880d681SAndroid Build Coastguard Worker  ret i16 %1
362*9880d681SAndroid Build Coastguard Worker}
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr16_2
365*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #32, #16
366*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str64Ldr16_2(i64* nocapture %P, i64 %v, i64 %n) {
367*9880d681SAndroid Build Coastguard Workerentry:
368*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i16*
369*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
370*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
371*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -2
372*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
373*9880d681SAndroid Build Coastguard Worker  ret i16 %1
374*9880d681SAndroid Build Coastguard Worker}
375*9880d681SAndroid Build Coastguard Worker
376*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr16_3
377*9880d681SAndroid Build Coastguard Worker; CHECK: lsr x0, x1, #48
378*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str64Ldr16_3(i64* nocapture %P, i64 %v, i64 %n) {
379*9880d681SAndroid Build Coastguard Workerentry:
380*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i16*
381*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
382*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
383*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -1
384*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
385*9880d681SAndroid Build Coastguard Worker  ret i16 %1
386*9880d681SAndroid Build Coastguard Worker}
387*9880d681SAndroid Build Coastguard Worker
388*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_0
389*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x1, #0xff
390*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_0(i64* nocapture %P, i64 %v, i64 %n) {
391*9880d681SAndroid Build Coastguard Workerentry:
392*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
393*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
394*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
395*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -8
396*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
397*9880d681SAndroid Build Coastguard Worker  ret i8 %1
398*9880d681SAndroid Build Coastguard Worker}
399*9880d681SAndroid Build Coastguard Worker
400*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_1
401*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #8, #8
402*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_1(i64* nocapture %P, i64 %v, i64 %n) {
403*9880d681SAndroid Build Coastguard Workerentry:
404*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
405*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
406*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
407*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -7
408*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
409*9880d681SAndroid Build Coastguard Worker  ret i8 %1
410*9880d681SAndroid Build Coastguard Worker}
411*9880d681SAndroid Build Coastguard Worker
412*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_2
413*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #16, #8
414*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_2(i64* nocapture %P, i64 %v, i64 %n) {
415*9880d681SAndroid Build Coastguard Workerentry:
416*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
417*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
418*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
419*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -6
420*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
421*9880d681SAndroid Build Coastguard Worker  ret i8 %1
422*9880d681SAndroid Build Coastguard Worker}
423*9880d681SAndroid Build Coastguard Worker
424*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_3
425*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #24, #8
426*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_3(i64* nocapture %P, i64 %v, i64 %n) {
427*9880d681SAndroid Build Coastguard Workerentry:
428*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
429*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
430*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
431*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -5
432*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
433*9880d681SAndroid Build Coastguard Worker  ret i8 %1
434*9880d681SAndroid Build Coastguard Worker}
435*9880d681SAndroid Build Coastguard Worker
436*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_4
437*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #32, #8
438*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_4(i64* nocapture %P, i64 %v, i64 %n) {
439*9880d681SAndroid Build Coastguard Workerentry:
440*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
441*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
442*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
443*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -4
444*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
445*9880d681SAndroid Build Coastguard Worker  ret i8 %1
446*9880d681SAndroid Build Coastguard Worker}
447*9880d681SAndroid Build Coastguard Worker
448*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_5
449*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #40, #8
450*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_5(i64* nocapture %P, i64 %v, i64 %n) {
451*9880d681SAndroid Build Coastguard Workerentry:
452*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
453*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
454*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
455*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -3
456*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
457*9880d681SAndroid Build Coastguard Worker  ret i8 %1
458*9880d681SAndroid Build Coastguard Worker}
459*9880d681SAndroid Build Coastguard Worker
460*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_6
461*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #48, #8
462*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_6(i64* nocapture %P, i64 %v, i64 %n) {
463*9880d681SAndroid Build Coastguard Workerentry:
464*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
465*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
466*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
467*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -2
468*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
469*9880d681SAndroid Build Coastguard Worker  ret i8 %1
470*9880d681SAndroid Build Coastguard Worker}
471*9880d681SAndroid Build Coastguard Worker
472*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_7
473*9880d681SAndroid Build Coastguard Worker; CHECK: lsr x0, x1, #56
474*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_7(i64* nocapture %P, i64 %v, i64 %n) {
475*9880d681SAndroid Build Coastguard Workerentry:
476*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i64* %P to i8*
477*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1
478*9880d681SAndroid Build Coastguard Worker  store i64 %v, i64* %arrayidx0
479*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -1
480*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
481*9880d681SAndroid Build Coastguard Worker  ret i8 %1
482*9880d681SAndroid Build Coastguard Worker}
483*9880d681SAndroid Build Coastguard Worker
484*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr32
485*9880d681SAndroid Build Coastguard Worker; CHECK: mov w0, w1
486*9880d681SAndroid Build Coastguard Workerdefine i32 @Unscaled_Str32Ldr32(i32* nocapture %P, i32 %v, i64 %n) {
487*9880d681SAndroid Build Coastguard Workerentry:
488*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i32*
489*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1
490*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
491*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i32, i32* %0, i64 -1
492*9880d681SAndroid Build Coastguard Worker  %1 = load i32, i32* %arrayidx1
493*9880d681SAndroid Build Coastguard Worker  ret i32 %1
494*9880d681SAndroid Build Coastguard Worker}
495*9880d681SAndroid Build Coastguard Worker
496*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr16_0
497*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xffff
498*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str32Ldr16_0(i32* nocapture %P, i32 %v, i64 %n) {
499*9880d681SAndroid Build Coastguard Workerentry:
500*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i16*
501*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1
502*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
503*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -2
504*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
505*9880d681SAndroid Build Coastguard Worker  ret i16 %1
506*9880d681SAndroid Build Coastguard Worker}
507*9880d681SAndroid Build Coastguard Worker
508*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr16_1
509*9880d681SAndroid Build Coastguard Worker; CHECK: lsr	w0, w1, #16
510*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str32Ldr16_1(i32* nocapture %P, i32 %v, i64 %n) {
511*9880d681SAndroid Build Coastguard Workerentry:
512*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i16*
513*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1
514*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
515*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -1
516*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
517*9880d681SAndroid Build Coastguard Worker  ret i16 %1
518*9880d681SAndroid Build Coastguard Worker}
519*9880d681SAndroid Build Coastguard Worker
520*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr8_0
521*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xff
522*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str32Ldr8_0(i32* nocapture %P, i32 %v, i64 %n) {
523*9880d681SAndroid Build Coastguard Workerentry:
524*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i8*
525*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1
526*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
527*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -4
528*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
529*9880d681SAndroid Build Coastguard Worker  ret i8 %1
530*9880d681SAndroid Build Coastguard Worker}
531*9880d681SAndroid Build Coastguard Worker
532*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr8_1
533*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx w0, w1, #8, #8
534*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str32Ldr8_1(i32* nocapture %P, i32 %v, i64 %n) {
535*9880d681SAndroid Build Coastguard Workerentry:
536*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i8*
537*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1
538*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
539*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -3
540*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
541*9880d681SAndroid Build Coastguard Worker  ret i8 %1
542*9880d681SAndroid Build Coastguard Worker}
543*9880d681SAndroid Build Coastguard Worker
544*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr8_2
545*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx w0, w1, #16, #8
546*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str32Ldr8_2(i32* nocapture %P, i32 %v, i64 %n) {
547*9880d681SAndroid Build Coastguard Workerentry:
548*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i8*
549*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1
550*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
551*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -2
552*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
553*9880d681SAndroid Build Coastguard Worker  ret i8 %1
554*9880d681SAndroid Build Coastguard Worker}
555*9880d681SAndroid Build Coastguard Worker
556*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr8_3
557*9880d681SAndroid Build Coastguard Worker; CHECK: lsr w0, w1, #24
558*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str32Ldr8_3(i32* nocapture %P, i32 %v, i64 %n) {
559*9880d681SAndroid Build Coastguard Workerentry:
560*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i8*
561*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1
562*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
563*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -1
564*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
565*9880d681SAndroid Build Coastguard Worker  ret i8 %1
566*9880d681SAndroid Build Coastguard Worker}
567*9880d681SAndroid Build Coastguard Worker
568*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str16Ldr16
569*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xffff
570*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str16Ldr16(i16* nocapture %P, i16 %v, i64 %n) {
571*9880d681SAndroid Build Coastguard Workerentry:
572*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i16* %P to i16*
573*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i16, i16* %P, i64 -1
574*9880d681SAndroid Build Coastguard Worker  store i16 %v, i16* %arrayidx0
575*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -1
576*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
577*9880d681SAndroid Build Coastguard Worker  ret i16 %1
578*9880d681SAndroid Build Coastguard Worker}
579*9880d681SAndroid Build Coastguard Worker
580*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str16Ldr8_0
581*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xff
582*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str16Ldr8_0(i16* nocapture %P, i16 %v, i64 %n) {
583*9880d681SAndroid Build Coastguard Workerentry:
584*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i16* %P to i8*
585*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i16, i16* %P, i64 -1
586*9880d681SAndroid Build Coastguard Worker  store i16 %v, i16* %arrayidx0
587*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -2
588*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
589*9880d681SAndroid Build Coastguard Worker  ret i8 %1
590*9880d681SAndroid Build Coastguard Worker}
591*9880d681SAndroid Build Coastguard Worker
592*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str16Ldr8_1
593*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx w0, w1, #8, #8
594*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str16Ldr8_1(i16* nocapture %P, i16 %v, i64 %n) {
595*9880d681SAndroid Build Coastguard Workerentry:
596*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i16* %P to i8*
597*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i16, i16* %P, i64 -1
598*9880d681SAndroid Build Coastguard Worker  store i16 %v, i16* %arrayidx0
599*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -1
600*9880d681SAndroid Build Coastguard Worker  %1 = load i8, i8* %arrayidx1
601*9880d681SAndroid Build Coastguard Worker  ret i8 %1
602*9880d681SAndroid Build Coastguard Worker}
603*9880d681SAndroid Build Coastguard Worker
604*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: StrVolatileLdr
605*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh
606*9880d681SAndroid Build Coastguard Workerdefine i16 @StrVolatileLdr(i32* nocapture %P, i32 %v, i64 %n) {
607*9880d681SAndroid Build Coastguard Workerentry:
608*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i16*
609*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1
610*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
611*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 2
612*9880d681SAndroid Build Coastguard Worker  %1 = load volatile i16, i16* %arrayidx1
613*9880d681SAndroid Build Coastguard Worker  ret i16 %1
614*9880d681SAndroid Build Coastguard Worker}
615*9880d681SAndroid Build Coastguard Worker
616*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: StrNotInRangeLdr
617*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh
618*9880d681SAndroid Build Coastguard Workerdefine i16 @StrNotInRangeLdr(i32* nocapture %P, i32 %v, i64 %n) {
619*9880d681SAndroid Build Coastguard Workerentry:
620*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i16*
621*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1
622*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
623*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 1
624*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
625*9880d681SAndroid Build Coastguard Worker  ret i16 %1
626*9880d681SAndroid Build Coastguard Worker}
627*9880d681SAndroid Build Coastguard Worker
628*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_StrNotInRangeLdr
629*9880d681SAndroid Build Coastguard Worker; CHECK: ldurh
630*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_StrNotInRangeLdr(i32* nocapture %P, i32 %v, i64 %n) {
631*9880d681SAndroid Build Coastguard Workerentry:
632*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i16*
633*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1
634*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
635*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -3
636*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
637*9880d681SAndroid Build Coastguard Worker  ret i16 %1
638*9880d681SAndroid Build Coastguard Worker}
639*9880d681SAndroid Build Coastguard Worker
640*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: StrCallLdr
641*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh
642*9880d681SAndroid Build Coastguard Workerdefine i16 @StrCallLdr(i32* nocapture %P, i32 %v, i64 %n) {
643*9880d681SAndroid Build Coastguard Workerentry:
644*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i16*
645*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1
646*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
647*9880d681SAndroid Build Coastguard Worker  %c = call i1 @test_dummy()
648*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 1
649*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
650*9880d681SAndroid Build Coastguard Worker  ret i16 %1
651*9880d681SAndroid Build Coastguard Worker}
652*9880d681SAndroid Build Coastguard Worker
653*9880d681SAndroid Build Coastguard Workerdeclare i1 @test_dummy()
654*9880d681SAndroid Build Coastguard Worker
655*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: StrStrLdr
656*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh
657*9880d681SAndroid Build Coastguard Workerdefine i16 @StrStrLdr(i32 %v, i32* %P, i32* %P2, i32 %n) {
658*9880d681SAndroid Build Coastguard Workerentry:
659*9880d681SAndroid Build Coastguard Worker  %0 = bitcast i32* %P to i16*
660*9880d681SAndroid Build Coastguard Worker  %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1
661*9880d681SAndroid Build Coastguard Worker  store i32 %v, i32* %arrayidx0
662*9880d681SAndroid Build Coastguard Worker  store i32 %n, i32* %P2
663*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 2
664*9880d681SAndroid Build Coastguard Worker  %1 = load i16, i16* %arrayidx1
665*9880d681SAndroid Build Coastguard Worker  ret i16 %1
666*9880d681SAndroid Build Coastguard Worker}
667