blob: d3bf001ca307b3bf3556fae8fc290c752fdfc0d3 [file] [log] [blame]
David Greenebb65832021-02-23 10:53:22 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=thumbv6m-none-eabi %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-T1
3; RUN: llc -mtriple=thumbv7m-none-eabi %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-T2
4; RUN: llc -mtriple=armv7a-none-eabi %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-ARM
5
Nikita Popovbed1c7f2022-12-19 12:44:09 +01006define ptr @i32_0(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +00007; CHECK-LABEL: i32_0:
8; CHECK: @ %bb.0:
9; CHECK-NEXT: str r1, [r0]
10; CHECK-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +010011 store i32 %v, ptr %p, align 4
12 ret ptr %p
David Greenebb65832021-02-23 10:53:22 +000013}
14
Nikita Popovbed1c7f2022-12-19 12:44:09 +010015define ptr @i32_3(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +000016; CHECK-T1-LABEL: i32_3:
17; CHECK-T1: @ %bb.0:
18; CHECK-T1-NEXT: movs r2, #3
19; CHECK-T1-NEXT: str r1, [r0, r2]
20; CHECK-T1-NEXT: adds r0, r0, #3
21; CHECK-T1-NEXT: bx lr
22;
23; CHECK-T2-LABEL: i32_3:
24; CHECK-T2: @ %bb.0:
25; CHECK-T2-NEXT: str r1, [r0, #3]!
26; CHECK-T2-NEXT: bx lr
27;
28; CHECK-ARM-LABEL: i32_3:
29; CHECK-ARM: @ %bb.0:
30; CHECK-ARM-NEXT: str r1, [r0, #3]!
31; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +010032 %o = getelementptr inbounds i8, ptr %p, i32 3
33 store i32 %v, ptr %o, align 4
34 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +000035}
36
Nikita Popovbed1c7f2022-12-19 12:44:09 +010037define ptr @i32_4(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +000038; CHECK-T1-LABEL: i32_4:
39; CHECK-T1: @ %bb.0:
40; CHECK-T1-NEXT: str r1, [r0, #4]
41; CHECK-T1-NEXT: adds r0, r0, #4
42; CHECK-T1-NEXT: bx lr
43;
44; CHECK-T2-LABEL: i32_4:
45; CHECK-T2: @ %bb.0:
46; CHECK-T2-NEXT: str r1, [r0, #4]!
47; CHECK-T2-NEXT: bx lr
48;
49; CHECK-ARM-LABEL: i32_4:
50; CHECK-ARM: @ %bb.0:
51; CHECK-ARM-NEXT: str r1, [r0, #4]!
52; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +010053 %o = getelementptr inbounds i8, ptr %p, i32 4
54 store i32 %v, ptr %o, align 4
55 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +000056}
57
Nikita Popovbed1c7f2022-12-19 12:44:09 +010058define ptr @i32_8(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +000059; CHECK-T1-LABEL: i32_8:
60; CHECK-T1: @ %bb.0:
61; CHECK-T1-NEXT: str r1, [r0, #8]
62; CHECK-T1-NEXT: adds r0, #8
63; CHECK-T1-NEXT: bx lr
64;
65; CHECK-T2-LABEL: i32_8:
66; CHECK-T2: @ %bb.0:
67; CHECK-T2-NEXT: str r1, [r0, #8]!
68; CHECK-T2-NEXT: bx lr
69;
70; CHECK-ARM-LABEL: i32_8:
71; CHECK-ARM: @ %bb.0:
72; CHECK-ARM-NEXT: str r1, [r0, #8]!
73; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +010074 %o = getelementptr inbounds i8, ptr %p, i32 8
75 store i32 %v, ptr %o, align 4
76 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +000077}
78
Nikita Popovbed1c7f2022-12-19 12:44:09 +010079define ptr @i32_m1(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +000080; CHECK-T1-LABEL: i32_m1:
81; CHECK-T1: @ %bb.0:
82; CHECK-T1-NEXT: subs r0, r0, #1
83; CHECK-T1-NEXT: str r1, [r0]
84; CHECK-T1-NEXT: bx lr
85;
86; CHECK-T2-LABEL: i32_m1:
87; CHECK-T2: @ %bb.0:
88; CHECK-T2-NEXT: str r1, [r0, #-1]!
89; CHECK-T2-NEXT: bx lr
90;
91; CHECK-ARM-LABEL: i32_m1:
92; CHECK-ARM: @ %bb.0:
93; CHECK-ARM-NEXT: str r1, [r0, #-1]!
94; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +010095 %o = getelementptr inbounds i8, ptr %p, i32 -1
96 store i32 %v, ptr %o, align 4
97 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +000098}
99
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100100define ptr @i32_m4(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +0000101; CHECK-T1-LABEL: i32_m4:
102; CHECK-T1: @ %bb.0:
103; CHECK-T1-NEXT: subs r0, r0, #4
104; CHECK-T1-NEXT: str r1, [r0]
105; CHECK-T1-NEXT: bx lr
106;
107; CHECK-T2-LABEL: i32_m4:
108; CHECK-T2: @ %bb.0:
109; CHECK-T2-NEXT: str r1, [r0, #-4]!
110; CHECK-T2-NEXT: bx lr
111;
112; CHECK-ARM-LABEL: i32_m4:
113; CHECK-ARM: @ %bb.0:
114; CHECK-ARM-NEXT: str r1, [r0, #-4]!
115; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100116 %o = getelementptr inbounds i8, ptr %p, i32 -4
117 store i32 %v, ptr %o, align 4
118 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000119}
120
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100121define ptr @i32_252(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +0000122; CHECK-T1-LABEL: i32_252:
123; CHECK-T1: @ %bb.0:
124; CHECK-T1-NEXT: movs r2, #252
125; CHECK-T1-NEXT: str r1, [r0, r2]
126; CHECK-T1-NEXT: adds r0, #252
127; CHECK-T1-NEXT: bx lr
128;
129; CHECK-T2-LABEL: i32_252:
130; CHECK-T2: @ %bb.0:
131; CHECK-T2-NEXT: str r1, [r0, #252]!
132; CHECK-T2-NEXT: bx lr
133;
134; CHECK-ARM-LABEL: i32_252:
135; CHECK-ARM: @ %bb.0:
136; CHECK-ARM-NEXT: str r1, [r0, #252]!
137; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100138 %o = getelementptr inbounds i8, ptr %p, i32 252
139 store i32 %v, ptr %o, align 4
140 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000141}
142
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100143define ptr @i32_255(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +0000144; CHECK-T1-LABEL: i32_255:
145; CHECK-T1: @ %bb.0:
146; CHECK-T1-NEXT: movs r2, #255
147; CHECK-T1-NEXT: str r1, [r0, r2]
148; CHECK-T1-NEXT: adds r0, #255
149; CHECK-T1-NEXT: bx lr
150;
151; CHECK-T2-LABEL: i32_255:
152; CHECK-T2: @ %bb.0:
153; CHECK-T2-NEXT: str r1, [r0, #255]!
154; CHECK-T2-NEXT: bx lr
155;
156; CHECK-ARM-LABEL: i32_255:
157; CHECK-ARM: @ %bb.0:
158; CHECK-ARM-NEXT: str r1, [r0, #255]!
159; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100160 %o = getelementptr inbounds i8, ptr %p, i32 255
161 store i32 %v, ptr %o, align 4
162 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000163}
164
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100165define ptr @i32_256(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +0000166; CHECK-T1-LABEL: i32_256:
167; CHECK-T1: @ %bb.0:
168; CHECK-T1-NEXT: movs r2, #1
169; CHECK-T1-NEXT: lsls r2, r2, #8
170; CHECK-T1-NEXT: str r1, [r0, r2]
171; CHECK-T1-NEXT: adds r0, r0, r2
172; CHECK-T1-NEXT: bx lr
173;
174; CHECK-T2-LABEL: i32_256:
175; CHECK-T2: @ %bb.0:
176; CHECK-T2-NEXT: str.w r1, [r0, #256]
177; CHECK-T2-NEXT: add.w r0, r0, #256
178; CHECK-T2-NEXT: bx lr
179;
180; CHECK-ARM-LABEL: i32_256:
181; CHECK-ARM: @ %bb.0:
182; CHECK-ARM-NEXT: str r1, [r0, #256]!
183; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100184 %o = getelementptr inbounds i8, ptr %p, i32 256
185 store i32 %v, ptr %o, align 4
186 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000187}
188
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100189define ptr @i32_m252(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +0000190; CHECK-T1-LABEL: i32_m252:
191; CHECK-T1: @ %bb.0:
192; CHECK-T1-NEXT: subs r0, #252
193; CHECK-T1-NEXT: str r1, [r0]
194; CHECK-T1-NEXT: bx lr
195;
196; CHECK-T2-LABEL: i32_m252:
197; CHECK-T2: @ %bb.0:
198; CHECK-T2-NEXT: str r1, [r0, #-252]!
199; CHECK-T2-NEXT: bx lr
200;
201; CHECK-ARM-LABEL: i32_m252:
202; CHECK-ARM: @ %bb.0:
203; CHECK-ARM-NEXT: str r1, [r0, #-252]!
204; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100205 %o = getelementptr inbounds i8, ptr %p, i32 -252
206 store i32 %v, ptr %o, align 4
207 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000208}
209
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100210define ptr @i32_m255(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +0000211; CHECK-T1-LABEL: i32_m255:
212; CHECK-T1: @ %bb.0:
213; CHECK-T1-NEXT: subs r0, #255
214; CHECK-T1-NEXT: str r1, [r0]
215; CHECK-T1-NEXT: bx lr
216;
217; CHECK-T2-LABEL: i32_m255:
218; CHECK-T2: @ %bb.0:
219; CHECK-T2-NEXT: str r1, [r0, #-255]!
220; CHECK-T2-NEXT: bx lr
221;
222; CHECK-ARM-LABEL: i32_m255:
223; CHECK-ARM: @ %bb.0:
224; CHECK-ARM-NEXT: str r1, [r0, #-255]!
225; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100226 %o = getelementptr inbounds i8, ptr %p, i32 -255
227 store i32 %v, ptr %o, align 4
228 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000229}
230
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100231define ptr @i32_m256(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +0000232; CHECK-T1-LABEL: i32_m256:
233; CHECK-T1: @ %bb.0:
234; CHECK-T1-NEXT: movs r2, #255
235; CHECK-T1-NEXT: mvns r2, r2
236; CHECK-T1-NEXT: str r1, [r0, r2]
237; CHECK-T1-NEXT: adds r0, r0, r2
238; CHECK-T1-NEXT: bx lr
239;
240; CHECK-T2-LABEL: i32_m256:
241; CHECK-T2: @ %bb.0:
242; CHECK-T2-NEXT: mvn r2, #255
243; CHECK-T2-NEXT: str r1, [r0, r2]
244; CHECK-T2-NEXT: sub.w r0, r0, #256
245; CHECK-T2-NEXT: bx lr
246;
247; CHECK-ARM-LABEL: i32_m256:
248; CHECK-ARM: @ %bb.0:
249; CHECK-ARM-NEXT: str r1, [r0, #-256]!
250; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100251 %o = getelementptr inbounds i8, ptr %p, i32 -256
252 store i32 %v, ptr %o, align 4
253 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000254}
255
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100256define ptr @i32_4095(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +0000257; CHECK-T1-LABEL: i32_4095:
258; CHECK-T1: @ %bb.0:
259; CHECK-T1-NEXT: ldr r2, .LCPI12_0
260; CHECK-T1-NEXT: str r1, [r0, r2]
261; CHECK-T1-NEXT: adds r0, r0, r2
262; CHECK-T1-NEXT: bx lr
263; CHECK-T1-NEXT: .p2align 2
264; CHECK-T1-NEXT: @ %bb.1:
265; CHECK-T1-NEXT: .LCPI12_0:
266; CHECK-T1-NEXT: .long 4095 @ 0xfff
267;
268; CHECK-T2-LABEL: i32_4095:
269; CHECK-T2: @ %bb.0:
270; CHECK-T2-NEXT: str.w r1, [r0, #4095]
271; CHECK-T2-NEXT: addw r0, r0, #4095
272; CHECK-T2-NEXT: bx lr
273;
274; CHECK-ARM-LABEL: i32_4095:
275; CHECK-ARM: @ %bb.0:
276; CHECK-ARM-NEXT: str r1, [r0, #4095]!
277; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100278 %o = getelementptr inbounds i8, ptr %p, i32 4095
279 store i32 %v, ptr %o, align 4
280 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000281}
282
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100283define ptr @i32_4096(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +0000284; CHECK-T1-LABEL: i32_4096:
285; CHECK-T1: @ %bb.0:
286; CHECK-T1-NEXT: movs r2, #1
287; CHECK-T1-NEXT: lsls r2, r2, #12
288; CHECK-T1-NEXT: str r1, [r0, r2]
289; CHECK-T1-NEXT: adds r0, r0, r2
290; CHECK-T1-NEXT: bx lr
291;
292; CHECK-T2-LABEL: i32_4096:
293; CHECK-T2: @ %bb.0:
294; CHECK-T2-NEXT: mov.w r2, #4096
295; CHECK-T2-NEXT: str r1, [r0, r2]
296; CHECK-T2-NEXT: add.w r0, r0, #4096
297; CHECK-T2-NEXT: bx lr
298;
299; CHECK-ARM-LABEL: i32_4096:
300; CHECK-ARM: @ %bb.0:
301; CHECK-ARM-NEXT: mov r2, #4096
302; CHECK-ARM-NEXT: str r1, [r0, r2]!
303; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100304 %o = getelementptr inbounds i8, ptr %p, i32 4096
305 store i32 %v, ptr %o, align 4
306 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000307}
308
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100309define ptr @i32_m4095(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +0000310; CHECK-T1-LABEL: i32_m4095:
311; CHECK-T1: @ %bb.0:
312; CHECK-T1-NEXT: ldr r2, .LCPI14_0
313; CHECK-T1-NEXT: str r1, [r0, r2]
314; CHECK-T1-NEXT: adds r0, r0, r2
315; CHECK-T1-NEXT: bx lr
316; CHECK-T1-NEXT: .p2align 2
317; CHECK-T1-NEXT: @ %bb.1:
318; CHECK-T1-NEXT: .LCPI14_0:
319; CHECK-T1-NEXT: .long 4294963201 @ 0xfffff001
320;
321; CHECK-T2-LABEL: i32_m4095:
322; CHECK-T2: @ %bb.0:
323; CHECK-T2-NEXT: movw r2, #61441
324; CHECK-T2-NEXT: movt r2, #65535
325; CHECK-T2-NEXT: str r1, [r0, r2]
326; CHECK-T2-NEXT: subw r0, r0, #4095
327; CHECK-T2-NEXT: bx lr
328;
329; CHECK-ARM-LABEL: i32_m4095:
330; CHECK-ARM: @ %bb.0:
331; CHECK-ARM-NEXT: str r1, [r0, #-4095]!
332; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100333 %o = getelementptr inbounds i8, ptr %p, i32 -4095
334 store i32 %v, ptr %o, align 4
335 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000336}
337
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100338define ptr @i32_m4096(ptr %p, i32 %v) {
David Greenebb65832021-02-23 10:53:22 +0000339; CHECK-T1-LABEL: i32_m4096:
340; CHECK-T1: @ %bb.0:
341; CHECK-T1-NEXT: ldr r2, .LCPI15_0
342; CHECK-T1-NEXT: str r1, [r0, r2]
343; CHECK-T1-NEXT: adds r0, r0, r2
344; CHECK-T1-NEXT: bx lr
345; CHECK-T1-NEXT: .p2align 2
346; CHECK-T1-NEXT: @ %bb.1:
347; CHECK-T1-NEXT: .LCPI15_0:
348; CHECK-T1-NEXT: .long 4294963200 @ 0xfffff000
349;
350; CHECK-T2-LABEL: i32_m4096:
351; CHECK-T2: @ %bb.0:
352; CHECK-T2-NEXT: movw r2, #61440
353; CHECK-T2-NEXT: movt r2, #65535
354; CHECK-T2-NEXT: str r1, [r0, r2]
355; CHECK-T2-NEXT: sub.w r0, r0, #4096
356; CHECK-T2-NEXT: bx lr
357;
358; CHECK-ARM-LABEL: i32_m4096:
359; CHECK-ARM: @ %bb.0:
360; CHECK-ARM-NEXT: movw r2, #61440
361; CHECK-ARM-NEXT: movt r2, #65535
362; CHECK-ARM-NEXT: str r1, [r0, r2]!
363; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100364 %o = getelementptr inbounds i8, ptr %p, i32 -4096
365 store i32 %v, ptr %o, align 4
366 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000367}
368
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100369define ptr @i64_0(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000370; CHECK-T1-LABEL: i64_0:
371; CHECK-T1: @ %bb.0:
372; CHECK-T1-NEXT: stm r0!, {r2, r3}
373; CHECK-T1-NEXT: subs r0, #8
374; CHECK-T1-NEXT: bx lr
375;
376; CHECK-T2-LABEL: i64_0:
377; CHECK-T2: @ %bb.0:
378; CHECK-T2-NEXT: strd r2, r3, [r0]
379; CHECK-T2-NEXT: bx lr
380;
381; CHECK-ARM-LABEL: i64_0:
382; CHECK-ARM: @ %bb.0:
383; CHECK-ARM-NEXT: mov r1, r3
384; CHECK-ARM-NEXT: str r2, [r0]
385; CHECK-ARM-NEXT: str r1, [r0, #4]
386; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100387 store i64 %v, ptr %p, align 8
388 ret ptr %p
David Greenebb65832021-02-23 10:53:22 +0000389}
390
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100391define ptr @i64_3(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000392; CHECK-T1-LABEL: i64_3:
393; CHECK-T1: @ %bb.0:
394; CHECK-T1-NEXT: movs r1, #3
395; CHECK-T1-NEXT: str r2, [r0, r1]
396; CHECK-T1-NEXT: adds r0, r0, #3
397; CHECK-T1-NEXT: str r3, [r0, #4]
398; CHECK-T1-NEXT: bx lr
399;
400; CHECK-T2-LABEL: i64_3:
401; CHECK-T2: @ %bb.0:
402; CHECK-T2-NEXT: str r2, [r0, #3]!
403; CHECK-T2-NEXT: str r3, [r0, #4]
404; CHECK-T2-NEXT: bx lr
405;
406; CHECK-ARM-LABEL: i64_3:
407; CHECK-ARM: @ %bb.0:
408; CHECK-ARM-NEXT: str r2, [r0, #3]!
409; CHECK-ARM-NEXT: str r3, [r0, #4]
410; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100411 %o = getelementptr inbounds i8, ptr %p, i32 3
412 store i64 %v, ptr %o, align 8
413 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000414}
415
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100416define ptr @i64_4(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000417; CHECK-T1-LABEL: i64_4:
418; CHECK-T1: @ %bb.0:
419; CHECK-T1-NEXT: str r2, [r0, #4]
420; CHECK-T1-NEXT: str r3, [r0, #8]
421; CHECK-T1-NEXT: adds r0, r0, #4
422; CHECK-T1-NEXT: bx lr
423;
424; CHECK-T2-LABEL: i64_4:
425; CHECK-T2: @ %bb.0:
426; CHECK-T2-NEXT: str r2, [r0, #4]!
427; CHECK-T2-NEXT: str r3, [r0, #4]
428; CHECK-T2-NEXT: bx lr
429;
430; CHECK-ARM-LABEL: i64_4:
431; CHECK-ARM: @ %bb.0:
432; CHECK-ARM-NEXT: str r2, [r0, #4]!
433; CHECK-ARM-NEXT: str r3, [r0, #4]
434; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100435 %o = getelementptr inbounds i8, ptr %p, i32 4
436 store i64 %v, ptr %o, align 8
437 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000438}
439
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100440define ptr @i64_8(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000441; CHECK-T1-LABEL: i64_8:
442; CHECK-T1: @ %bb.0:
443; CHECK-T1-NEXT: str r2, [r0, #8]
444; CHECK-T1-NEXT: str r3, [r0, #12]
445; CHECK-T1-NEXT: adds r0, #8
446; CHECK-T1-NEXT: bx lr
447;
448; CHECK-T2-LABEL: i64_8:
449; CHECK-T2: @ %bb.0:
450; CHECK-T2-NEXT: str r2, [r0, #8]!
451; CHECK-T2-NEXT: str r3, [r0, #4]
452; CHECK-T2-NEXT: bx lr
453;
454; CHECK-ARM-LABEL: i64_8:
455; CHECK-ARM: @ %bb.0:
456; CHECK-ARM-NEXT: str r2, [r0, #8]!
457; CHECK-ARM-NEXT: str r3, [r0, #4]
458; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100459 %o = getelementptr inbounds i8, ptr %p, i32 8
460 store i64 %v, ptr %o, align 8
461 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000462}
463
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100464define ptr @i64_m1(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000465; CHECK-T1-LABEL: i64_m1:
466; CHECK-T1: @ %bb.0:
467; CHECK-T1-NEXT: subs r0, r0, #1
468; CHECK-T1-NEXT: stm r0!, {r2, r3}
469; CHECK-T1-NEXT: subs r0, #8
470; CHECK-T1-NEXT: bx lr
471;
472; CHECK-T2-LABEL: i64_m1:
473; CHECK-T2: @ %bb.0:
474; CHECK-T2-NEXT: str r2, [r0, #-1]!
475; CHECK-T2-NEXT: str r3, [r0, #4]
476; CHECK-T2-NEXT: bx lr
477;
478; CHECK-ARM-LABEL: i64_m1:
479; CHECK-ARM: @ %bb.0:
480; CHECK-ARM-NEXT: str r2, [r0, #-1]!
481; CHECK-ARM-NEXT: str r3, [r0, #4]
482; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100483 %o = getelementptr inbounds i8, ptr %p, i32 -1
484 store i64 %v, ptr %o, align 8
485 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000486}
487
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100488define ptr @i64_m4(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000489; CHECK-T1-LABEL: i64_m4:
490; CHECK-T1: @ %bb.0:
491; CHECK-T1-NEXT: str r3, [r0]
492; CHECK-T1-NEXT: subs r0, r0, #4
493; CHECK-T1-NEXT: str r2, [r0]
494; CHECK-T1-NEXT: bx lr
495;
496; CHECK-T2-LABEL: i64_m4:
497; CHECK-T2: @ %bb.0:
498; CHECK-T2-NEXT: str r3, [r0]
499; CHECK-T2-NEXT: str r2, [r0, #-4]!
500; CHECK-T2-NEXT: bx lr
501;
502; CHECK-ARM-LABEL: i64_m4:
503; CHECK-ARM: @ %bb.0:
504; CHECK-ARM-NEXT: str r3, [r0]
505; CHECK-ARM-NEXT: str r2, [r0, #-4]!
506; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100507 %o = getelementptr inbounds i8, ptr %p, i32 -4
508 store i64 %v, ptr %o, align 8
509 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000510}
511
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100512define ptr @i64_252(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000513; CHECK-T1-LABEL: i64_252:
514; CHECK-T1: @ %bb.0:
515; CHECK-T1-NEXT: movs r1, #252
516; CHECK-T1-NEXT: str r2, [r0, r1]
517; CHECK-T1-NEXT: adds r0, #252
518; CHECK-T1-NEXT: str r3, [r0, #4]
519; CHECK-T1-NEXT: bx lr
520;
521; CHECK-T2-LABEL: i64_252:
522; CHECK-T2: @ %bb.0:
523; CHECK-T2-NEXT: str r2, [r0, #252]!
524; CHECK-T2-NEXT: str r3, [r0, #4]
525; CHECK-T2-NEXT: bx lr
526;
527; CHECK-ARM-LABEL: i64_252:
528; CHECK-ARM: @ %bb.0:
529; CHECK-ARM-NEXT: str r2, [r0, #252]!
530; CHECK-ARM-NEXT: str r3, [r0, #4]
531; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100532 %o = getelementptr inbounds i8, ptr %p, i32 252
533 store i64 %v, ptr %o, align 8
534 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000535}
536
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100537define ptr @i64_255(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000538; CHECK-T1-LABEL: i64_255:
539; CHECK-T1: @ %bb.0:
540; CHECK-T1-NEXT: movs r1, #255
541; CHECK-T1-NEXT: str r2, [r0, r1]
542; CHECK-T1-NEXT: adds r0, #255
543; CHECK-T1-NEXT: str r3, [r0, #4]
544; CHECK-T1-NEXT: bx lr
545;
546; CHECK-T2-LABEL: i64_255:
547; CHECK-T2: @ %bb.0:
548; CHECK-T2-NEXT: str r2, [r0, #255]!
549; CHECK-T2-NEXT: str r3, [r0, #4]
550; CHECK-T2-NEXT: bx lr
551;
552; CHECK-ARM-LABEL: i64_255:
553; CHECK-ARM: @ %bb.0:
554; CHECK-ARM-NEXT: str r2, [r0, #255]!
555; CHECK-ARM-NEXT: str r3, [r0, #4]
556; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100557 %o = getelementptr inbounds i8, ptr %p, i32 255
558 store i64 %v, ptr %o, align 8
559 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000560}
561
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100562define ptr @i64_256(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000563; CHECK-T1-LABEL: i64_256:
564; CHECK-T1: @ %bb.0:
565; CHECK-T1-NEXT: movs r1, #1
566; CHECK-T1-NEXT: lsls r1, r1, #8
567; CHECK-T1-NEXT: str r2, [r0, r1]
568; CHECK-T1-NEXT: adds r0, r0, r1
569; CHECK-T1-NEXT: str r3, [r0, #4]
570; CHECK-T1-NEXT: bx lr
571;
572; CHECK-T2-LABEL: i64_256:
573; CHECK-T2: @ %bb.0:
574; CHECK-T2-NEXT: strd r2, r3, [r0, #256]
575; CHECK-T2-NEXT: add.w r0, r0, #256
576; CHECK-T2-NEXT: bx lr
577;
578; CHECK-ARM-LABEL: i64_256:
579; CHECK-ARM: @ %bb.0:
580; CHECK-ARM-NEXT: str r2, [r0, #256]!
581; CHECK-ARM-NEXT: str r3, [r0, #4]
582; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100583 %o = getelementptr inbounds i8, ptr %p, i32 256
584 store i64 %v, ptr %o, align 8
585 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000586}
587
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100588define ptr @i64_m252(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000589; CHECK-T1-LABEL: i64_m252:
590; CHECK-T1: @ %bb.0:
591; CHECK-T1-NEXT: subs r0, #252
592; CHECK-T1-NEXT: stm r0!, {r2, r3}
593; CHECK-T1-NEXT: subs r0, #8
594; CHECK-T1-NEXT: bx lr
595;
596; CHECK-T2-LABEL: i64_m252:
597; CHECK-T2: @ %bb.0:
598; CHECK-T2-NEXT: str r2, [r0, #-252]!
599; CHECK-T2-NEXT: str r3, [r0, #4]
600; CHECK-T2-NEXT: bx lr
601;
602; CHECK-ARM-LABEL: i64_m252:
603; CHECK-ARM: @ %bb.0:
604; CHECK-ARM-NEXT: str r2, [r0, #-252]!
605; CHECK-ARM-NEXT: str r3, [r0, #4]
606; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100607 %o = getelementptr inbounds i8, ptr %p, i32 -252
608 store i64 %v, ptr %o, align 8
609 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000610}
611
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100612define ptr @i64_m255(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000613; CHECK-T1-LABEL: i64_m255:
614; CHECK-T1: @ %bb.0:
615; CHECK-T1-NEXT: subs r0, #255
616; CHECK-T1-NEXT: stm r0!, {r2, r3}
617; CHECK-T1-NEXT: subs r0, #8
618; CHECK-T1-NEXT: bx lr
619;
620; CHECK-T2-LABEL: i64_m255:
621; CHECK-T2: @ %bb.0:
622; CHECK-T2-NEXT: str r2, [r0, #-255]!
623; CHECK-T2-NEXT: str r3, [r0, #4]
624; CHECK-T2-NEXT: bx lr
625;
626; CHECK-ARM-LABEL: i64_m255:
627; CHECK-ARM: @ %bb.0:
628; CHECK-ARM-NEXT: str r2, [r0, #-255]!
629; CHECK-ARM-NEXT: str r3, [r0, #4]
630; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100631 %o = getelementptr inbounds i8, ptr %p, i32 -255
632 store i64 %v, ptr %o, align 8
633 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000634}
635
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100636define ptr @i64_m256(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000637; CHECK-T1-LABEL: i64_m256:
638; CHECK-T1: @ %bb.0:
639; CHECK-T1-NEXT: movs r1, #255
640; CHECK-T1-NEXT: mvns r1, r1
641; CHECK-T1-NEXT: str r2, [r0, r1]
642; CHECK-T1-NEXT: adds r0, r0, r1
643; CHECK-T1-NEXT: str r3, [r0, #4]
644; CHECK-T1-NEXT: bx lr
645;
646; CHECK-T2-LABEL: i64_m256:
647; CHECK-T2: @ %bb.0:
648; CHECK-T2-NEXT: mvn r1, #255
649; CHECK-T2-NEXT: str r3, [r0, #-252]
650; CHECK-T2-NEXT: str r2, [r0, r1]
651; CHECK-T2-NEXT: sub.w r0, r0, #256
652; CHECK-T2-NEXT: bx lr
653;
654; CHECK-ARM-LABEL: i64_m256:
655; CHECK-ARM: @ %bb.0:
656; CHECK-ARM-NEXT: str r2, [r0, #-256]!
657; CHECK-ARM-NEXT: str r3, [r0, #4]
658; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100659 %o = getelementptr inbounds i8, ptr %p, i32 -256
660 store i64 %v, ptr %o, align 8
661 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000662}
663
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100664define ptr @i64_4095(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000665; CHECK-T1-LABEL: i64_4095:
666; CHECK-T1: @ %bb.0:
667; CHECK-T1-NEXT: ldr r1, .LCPI28_0
668; CHECK-T1-NEXT: str r2, [r0, r1]
669; CHECK-T1-NEXT: adds r0, r0, r1
670; CHECK-T1-NEXT: str r3, [r0, #4]
671; CHECK-T1-NEXT: bx lr
672; CHECK-T1-NEXT: .p2align 2
673; CHECK-T1-NEXT: @ %bb.1:
674; CHECK-T1-NEXT: .LCPI28_0:
675; CHECK-T1-NEXT: .long 4095 @ 0xfff
676;
677; CHECK-T2-LABEL: i64_4095:
678; CHECK-T2: @ %bb.0:
679; CHECK-T2-NEXT: str.w r2, [r0, #4095]
680; CHECK-T2-NEXT: addw r0, r0, #4095
681; CHECK-T2-NEXT: str r3, [r0, #4]
682; CHECK-T2-NEXT: bx lr
683;
684; CHECK-ARM-LABEL: i64_4095:
685; CHECK-ARM: @ %bb.0:
686; CHECK-ARM-NEXT: str r2, [r0, #4095]!
687; CHECK-ARM-NEXT: str r3, [r0, #4]
688; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100689 %o = getelementptr inbounds i8, ptr %p, i32 4095
690 store i64 %v, ptr %o, align 8
691 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000692}
693
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100694define ptr @i64_4096(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000695; CHECK-T1-LABEL: i64_4096:
696; CHECK-T1: @ %bb.0:
697; CHECK-T1-NEXT: movs r1, #1
698; CHECK-T1-NEXT: lsls r1, r1, #12
699; CHECK-T1-NEXT: str r2, [r0, r1]
700; CHECK-T1-NEXT: adds r0, r0, r1
701; CHECK-T1-NEXT: str r3, [r0, #4]
702; CHECK-T1-NEXT: bx lr
703;
704; CHECK-T2-LABEL: i64_4096:
705; CHECK-T2: @ %bb.0:
706; CHECK-T2-NEXT: mov.w r1, #4096
707; CHECK-T2-NEXT: str r2, [r0, r1]
708; CHECK-T2-NEXT: add.w r0, r0, #4096
709; CHECK-T2-NEXT: str r3, [r0, #4]
710; CHECK-T2-NEXT: bx lr
711;
712; CHECK-ARM-LABEL: i64_4096:
713; CHECK-ARM: @ %bb.0:
714; CHECK-ARM-NEXT: mov r1, #4096
715; CHECK-ARM-NEXT: str r2, [r0, r1]!
716; CHECK-ARM-NEXT: str r3, [r0, #4]
717; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100718 %o = getelementptr inbounds i8, ptr %p, i32 4096
719 store i64 %v, ptr %o, align 8
720 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000721}
722
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100723define ptr @i64_m4095(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000724; CHECK-T1-LABEL: i64_m4095:
725; CHECK-T1: @ %bb.0:
726; CHECK-T1-NEXT: ldr r1, .LCPI30_0
727; CHECK-T1-NEXT: str r2, [r0, r1]
728; CHECK-T1-NEXT: adds r0, r0, r1
729; CHECK-T1-NEXT: str r3, [r0, #4]
730; CHECK-T1-NEXT: bx lr
731; CHECK-T1-NEXT: .p2align 2
732; CHECK-T1-NEXT: @ %bb.1:
733; CHECK-T1-NEXT: .LCPI30_0:
734; CHECK-T1-NEXT: .long 4294963201 @ 0xfffff001
735;
736; CHECK-T2-LABEL: i64_m4095:
737; CHECK-T2: @ %bb.0:
738; CHECK-T2-NEXT: movw r1, #61441
739; CHECK-T2-NEXT: movt r1, #65535
740; CHECK-T2-NEXT: str r2, [r0, r1]
741; CHECK-T2-NEXT: subw r0, r0, #4095
742; CHECK-T2-NEXT: str r3, [r0, #4]
743; CHECK-T2-NEXT: bx lr
744;
745; CHECK-ARM-LABEL: i64_m4095:
746; CHECK-ARM: @ %bb.0:
747; CHECK-ARM-NEXT: str r2, [r0, #-4095]!
748; CHECK-ARM-NEXT: str r3, [r0, #4]
749; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100750 %o = getelementptr inbounds i8, ptr %p, i32 -4095
751 store i64 %v, ptr %o, align 8
752 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000753}
754
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100755define ptr @i64_m4096(ptr %p, i64 %v) {
David Greenebb65832021-02-23 10:53:22 +0000756; CHECK-T1-LABEL: i64_m4096:
757; CHECK-T1: @ %bb.0:
758; CHECK-T1-NEXT: ldr r1, .LCPI31_0
759; CHECK-T1-NEXT: str r2, [r0, r1]
760; CHECK-T1-NEXT: adds r0, r0, r1
761; CHECK-T1-NEXT: str r3, [r0, #4]
762; CHECK-T1-NEXT: bx lr
763; CHECK-T1-NEXT: .p2align 2
764; CHECK-T1-NEXT: @ %bb.1:
765; CHECK-T1-NEXT: .LCPI31_0:
766; CHECK-T1-NEXT: .long 4294963200 @ 0xfffff000
767;
768; CHECK-T2-LABEL: i64_m4096:
769; CHECK-T2: @ %bb.0:
770; CHECK-T2-NEXT: movw r1, #61440
771; CHECK-T2-NEXT: movt r1, #65535
772; CHECK-T2-NEXT: str r2, [r0, r1]
773; CHECK-T2-NEXT: sub.w r0, r0, #4096
774; CHECK-T2-NEXT: str r3, [r0, #4]
775; CHECK-T2-NEXT: bx lr
776;
777; CHECK-ARM-LABEL: i64_m4096:
778; CHECK-ARM: @ %bb.0:
779; CHECK-ARM-NEXT: movw r1, #61440
780; CHECK-ARM-NEXT: movt r1, #65535
781; CHECK-ARM-NEXT: str r2, [r0, r1]!
782; CHECK-ARM-NEXT: str r3, [r0, #4]
783; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100784 %o = getelementptr inbounds i8, ptr %p, i32 -4096
785 store i64 %v, ptr %o, align 8
786 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000787}
788
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100789define ptr @i128_0(ptr %p, i128 %v) {
David Greenebb65832021-02-23 10:53:22 +0000790; CHECK-T1-LABEL: i128_0:
791; CHECK-T1: @ %bb.0:
792; CHECK-T1-NEXT: ldr r1, [sp, #4]
793; CHECK-T1-NEXT: str r1, [r0, #12]
794; CHECK-T1-NEXT: ldr r1, [sp]
795; CHECK-T1-NEXT: str r1, [r0, #8]
796; CHECK-T1-NEXT: stm r0!, {r2, r3}
797; CHECK-T1-NEXT: subs r0, #8
798; CHECK-T1-NEXT: bx lr
799;
800; CHECK-T2-LABEL: i128_0:
801; CHECK-T2: @ %bb.0:
802; CHECK-T2-NEXT: ldr r1, [sp, #4]
803; CHECK-T2-NEXT: str r1, [r0, #12]
804; CHECK-T2-NEXT: ldr r1, [sp]
805; CHECK-T2-NEXT: str r1, [r0, #8]
806; CHECK-T2-NEXT: strd r2, r3, [r0]
807; CHECK-T2-NEXT: bx lr
808;
809; CHECK-ARM-LABEL: i128_0:
810; CHECK-ARM: @ %bb.0:
811; CHECK-ARM-NEXT: ldm sp, {r1, r12}
812; CHECK-ARM-NEXT: stm r0, {r2, r3}
813; CHECK-ARM-NEXT: str r1, [r0, #8]
814; CHECK-ARM-NEXT: str r12, [r0, #12]
815; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100816 store i128 %v, ptr %p, align 16
817 ret ptr %p
David Greenebb65832021-02-23 10:53:22 +0000818}
819
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100820define ptr @i128_3(ptr %p, i128 %v) {
David Greenebb65832021-02-23 10:53:22 +0000821; CHECK-T1-LABEL: i128_3:
822; CHECK-T1: @ %bb.0:
823; CHECK-T1-NEXT: movs r1, #3
824; CHECK-T1-NEXT: str r2, [r0, r1]
825; CHECK-T1-NEXT: adds r0, r0, #3
826; CHECK-T1-NEXT: ldr r1, [sp, #4]
827; CHECK-T1-NEXT: str r1, [r0, #12]
828; CHECK-T1-NEXT: ldr r1, [sp]
829; CHECK-T1-NEXT: str r1, [r0, #8]
830; CHECK-T1-NEXT: str r3, [r0, #4]
831; CHECK-T1-NEXT: bx lr
832;
833; CHECK-T2-LABEL: i128_3:
834; CHECK-T2: @ %bb.0:
835; CHECK-T2-NEXT: str r2, [r0, #3]!
836; CHECK-T2-NEXT: ldr r1, [sp, #4]
837; CHECK-T2-NEXT: str r1, [r0, #12]
838; CHECK-T2-NEXT: ldr r1, [sp]
839; CHECK-T2-NEXT: strd r3, r1, [r0, #4]
840; CHECK-T2-NEXT: bx lr
841;
842; CHECK-ARM-LABEL: i128_3:
843; CHECK-ARM: @ %bb.0:
844; CHECK-ARM-NEXT: str r2, [r0, #3]!
845; CHECK-ARM-NEXT: ldm sp, {r1, r12}
846; CHECK-ARM-NEXT: str r3, [r0, #4]
847; CHECK-ARM-NEXT: str r1, [r0, #8]
848; CHECK-ARM-NEXT: str r12, [r0, #12]
849; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100850 %o = getelementptr inbounds i8, ptr %p, i32 3
851 store i128 %v, ptr %o, align 16
852 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000853}
854
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100855define ptr @i128_4(ptr %p, i128 %v) {
David Greenebb65832021-02-23 10:53:22 +0000856; CHECK-T1-LABEL: i128_4:
857; CHECK-T1: @ %bb.0:
858; CHECK-T1-NEXT: ldr r1, [sp, #4]
859; CHECK-T1-NEXT: str r1, [r0, #16]
860; CHECK-T1-NEXT: ldr r1, [sp]
861; CHECK-T1-NEXT: str r1, [r0, #12]
862; CHECK-T1-NEXT: str r3, [r0, #8]
863; CHECK-T1-NEXT: str r2, [r0, #4]
864; CHECK-T1-NEXT: adds r0, r0, #4
865; CHECK-T1-NEXT: bx lr
866;
867; CHECK-T2-LABEL: i128_4:
868; CHECK-T2: @ %bb.0:
869; CHECK-T2-NEXT: str r2, [r0, #4]!
870; CHECK-T2-NEXT: ldr r1, [sp, #4]
871; CHECK-T2-NEXT: str r1, [r0, #12]
872; CHECK-T2-NEXT: ldr r1, [sp]
873; CHECK-T2-NEXT: strd r3, r1, [r0, #4]
874; CHECK-T2-NEXT: bx lr
875;
876; CHECK-ARM-LABEL: i128_4:
877; CHECK-ARM: @ %bb.0:
878; CHECK-ARM-NEXT: str r2, [r0, #4]!
879; CHECK-ARM-NEXT: ldm sp, {r1, r12}
880; CHECK-ARM-NEXT: str r3, [r0, #4]
881; CHECK-ARM-NEXT: str r1, [r0, #8]
882; CHECK-ARM-NEXT: str r12, [r0, #12]
883; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100884 %o = getelementptr inbounds i8, ptr %p, i32 4
885 store i128 %v, ptr %o, align 16
886 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000887}
888
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100889define ptr @i128_8(ptr %p, i128 %v) {
David Greenebb65832021-02-23 10:53:22 +0000890; CHECK-T1-LABEL: i128_8:
891; CHECK-T1: @ %bb.0:
892; CHECK-T1-NEXT: ldr r1, [sp, #4]
893; CHECK-T1-NEXT: str r1, [r0, #20]
894; CHECK-T1-NEXT: ldr r1, [sp]
895; CHECK-T1-NEXT: str r1, [r0, #16]
896; CHECK-T1-NEXT: str r3, [r0, #12]
897; CHECK-T1-NEXT: str r2, [r0, #8]
898; CHECK-T1-NEXT: adds r0, #8
899; CHECK-T1-NEXT: bx lr
900;
901; CHECK-T2-LABEL: i128_8:
902; CHECK-T2: @ %bb.0:
903; CHECK-T2-NEXT: str r2, [r0, #8]!
904; CHECK-T2-NEXT: ldr r1, [sp, #4]
905; CHECK-T2-NEXT: str r1, [r0, #12]
906; CHECK-T2-NEXT: ldr r1, [sp]
907; CHECK-T2-NEXT: strd r3, r1, [r0, #4]
908; CHECK-T2-NEXT: bx lr
909;
910; CHECK-ARM-LABEL: i128_8:
911; CHECK-ARM: @ %bb.0:
912; CHECK-ARM-NEXT: str r2, [r0, #8]!
913; CHECK-ARM-NEXT: ldm sp, {r1, r12}
914; CHECK-ARM-NEXT: str r3, [r0, #4]
915; CHECK-ARM-NEXT: str r1, [r0, #8]
916; CHECK-ARM-NEXT: str r12, [r0, #12]
917; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100918 %o = getelementptr inbounds i8, ptr %p, i32 8
919 store i128 %v, ptr %o, align 16
920 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000921}
922
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100923define ptr @i128_16(ptr %p, i128 %v) {
David Greenebb65832021-02-23 10:53:22 +0000924; CHECK-T1-LABEL: i128_16:
925; CHECK-T1: @ %bb.0:
926; CHECK-T1-NEXT: ldr r1, [sp, #4]
927; CHECK-T1-NEXT: str r1, [r0, #28]
928; CHECK-T1-NEXT: ldr r1, [sp]
929; CHECK-T1-NEXT: str r1, [r0, #24]
930; CHECK-T1-NEXT: str r3, [r0, #20]
931; CHECK-T1-NEXT: str r2, [r0, #16]
932; CHECK-T1-NEXT: adds r0, #16
933; CHECK-T1-NEXT: bx lr
934;
935; CHECK-T2-LABEL: i128_16:
936; CHECK-T2: @ %bb.0:
937; CHECK-T2-NEXT: str r2, [r0, #16]!
938; CHECK-T2-NEXT: ldr r1, [sp, #4]
939; CHECK-T2-NEXT: str r1, [r0, #12]
940; CHECK-T2-NEXT: ldr r1, [sp]
941; CHECK-T2-NEXT: strd r3, r1, [r0, #4]
942; CHECK-T2-NEXT: bx lr
943;
944; CHECK-ARM-LABEL: i128_16:
945; CHECK-ARM: @ %bb.0:
946; CHECK-ARM-NEXT: str r2, [r0, #16]!
947; CHECK-ARM-NEXT: ldm sp, {r1, r12}
948; CHECK-ARM-NEXT: str r3, [r0, #4]
949; CHECK-ARM-NEXT: str r1, [r0, #8]
950; CHECK-ARM-NEXT: str r12, [r0, #12]
951; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100952 %o = getelementptr inbounds i8, ptr %p, i32 16
953 store i128 %v, ptr %o, align 16
954 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000955}
956
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100957define ptr @i128_m1(ptr %p, i128 %v) {
David Greenebb65832021-02-23 10:53:22 +0000958; CHECK-T1-LABEL: i128_m1:
959; CHECK-T1: @ %bb.0:
960; CHECK-T1-NEXT: subs r0, r0, #1
961; CHECK-T1-NEXT: ldr r1, [sp, #4]
962; CHECK-T1-NEXT: str r1, [r0, #12]
963; CHECK-T1-NEXT: ldr r1, [sp]
964; CHECK-T1-NEXT: str r1, [r0, #8]
965; CHECK-T1-NEXT: stm r0!, {r2, r3}
966; CHECK-T1-NEXT: subs r0, #8
967; CHECK-T1-NEXT: bx lr
968;
969; CHECK-T2-LABEL: i128_m1:
970; CHECK-T2: @ %bb.0:
971; CHECK-T2-NEXT: str r2, [r0, #-1]!
972; CHECK-T2-NEXT: ldr r1, [sp, #4]
973; CHECK-T2-NEXT: str r1, [r0, #12]
974; CHECK-T2-NEXT: ldr r1, [sp]
975; CHECK-T2-NEXT: strd r3, r1, [r0, #4]
976; CHECK-T2-NEXT: bx lr
977;
978; CHECK-ARM-LABEL: i128_m1:
979; CHECK-ARM: @ %bb.0:
980; CHECK-ARM-NEXT: str r2, [r0, #-1]!
981; CHECK-ARM-NEXT: ldm sp, {r1, r12}
982; CHECK-ARM-NEXT: str r3, [r0, #4]
983; CHECK-ARM-NEXT: str r1, [r0, #8]
984; CHECK-ARM-NEXT: str r12, [r0, #12]
985; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100986 %o = getelementptr inbounds i8, ptr %p, i32 -1
987 store i128 %v, ptr %o, align 16
988 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +0000989}
990
Nikita Popovbed1c7f2022-12-19 12:44:09 +0100991define ptr @i128_m4(ptr %p, i128 %v) {
David Greenebb65832021-02-23 10:53:22 +0000992; CHECK-T1-LABEL: i128_m4:
993; CHECK-T1: @ %bb.0:
994; CHECK-T1-NEXT: ldr r1, [sp, #4]
995; CHECK-T1-NEXT: str r1, [r0, #8]
996; CHECK-T1-NEXT: ldr r1, [sp]
997; CHECK-T1-NEXT: str r1, [r0, #4]
998; CHECK-T1-NEXT: str r3, [r0]
999; CHECK-T1-NEXT: subs r0, r0, #4
1000; CHECK-T1-NEXT: str r2, [r0]
1001; CHECK-T1-NEXT: bx lr
1002;
1003; CHECK-T2-LABEL: i128_m4:
1004; CHECK-T2: @ %bb.0:
1005; CHECK-T2-NEXT: ldr r1, [sp, #4]
1006; CHECK-T2-NEXT: str r1, [r0, #8]
1007; CHECK-T2-NEXT: ldr r1, [sp]
1008; CHECK-T2-NEXT: strd r3, r1, [r0]
1009; CHECK-T2-NEXT: str r2, [r0, #-4]!
1010; CHECK-T2-NEXT: bx lr
1011;
1012; CHECK-ARM-LABEL: i128_m4:
1013; CHECK-ARM: @ %bb.0:
1014; CHECK-ARM-NEXT: ldm sp, {r1, r12}
1015; CHECK-ARM-NEXT: str r3, [r0]
1016; CHECK-ARM-NEXT: stmib r0, {r1, r12}
1017; CHECK-ARM-NEXT: str r2, [r0, #-4]!
1018; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001019 %o = getelementptr inbounds i8, ptr %p, i32 -4
1020 store i128 %v, ptr %o, align 16
1021 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001022}
1023
1024; i16
1025
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001026define ptr @i16_0(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001027; CHECK-LABEL: i16_0:
1028; CHECK: @ %bb.0:
1029; CHECK-NEXT: strh r1, [r0]
1030; CHECK-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001031 store i16 %v, ptr %p, align 2
1032 ret ptr %p
David Greenebb65832021-02-23 10:53:22 +00001033}
1034
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001035define ptr @i16_3(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001036; CHECK-T1-LABEL: i16_3:
1037; CHECK-T1: @ %bb.0:
1038; CHECK-T1-NEXT: movs r2, #3
1039; CHECK-T1-NEXT: strh r1, [r0, r2]
1040; CHECK-T1-NEXT: adds r0, r0, #3
1041; CHECK-T1-NEXT: bx lr
1042;
1043; CHECK-T2-LABEL: i16_3:
1044; CHECK-T2: @ %bb.0:
1045; CHECK-T2-NEXT: strh r1, [r0, #3]!
1046; CHECK-T2-NEXT: bx lr
1047;
1048; CHECK-ARM-LABEL: i16_3:
1049; CHECK-ARM: @ %bb.0:
1050; CHECK-ARM-NEXT: strh r1, [r0, #3]!
1051; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001052 %o = getelementptr inbounds i8, ptr %p, i32 3
1053 store i16 %v, ptr %o, align 2
1054 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001055}
1056
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001057define ptr @i16_4(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001058; CHECK-T1-LABEL: i16_4:
1059; CHECK-T1: @ %bb.0:
1060; CHECK-T1-NEXT: strh r1, [r0, #4]
1061; CHECK-T1-NEXT: adds r0, r0, #4
1062; CHECK-T1-NEXT: bx lr
1063;
1064; CHECK-T2-LABEL: i16_4:
1065; CHECK-T2: @ %bb.0:
1066; CHECK-T2-NEXT: strh r1, [r0, #4]!
1067; CHECK-T2-NEXT: bx lr
1068;
1069; CHECK-ARM-LABEL: i16_4:
1070; CHECK-ARM: @ %bb.0:
1071; CHECK-ARM-NEXT: strh r1, [r0, #4]!
1072; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001073 %o = getelementptr inbounds i8, ptr %p, i32 4
1074 store i16 %v, ptr %o, align 2
1075 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001076}
1077
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001078define ptr @i16_8(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001079; CHECK-T1-LABEL: i16_8:
1080; CHECK-T1: @ %bb.0:
1081; CHECK-T1-NEXT: strh r1, [r0, #8]
1082; CHECK-T1-NEXT: adds r0, #8
1083; CHECK-T1-NEXT: bx lr
1084;
1085; CHECK-T2-LABEL: i16_8:
1086; CHECK-T2: @ %bb.0:
1087; CHECK-T2-NEXT: strh r1, [r0, #8]!
1088; CHECK-T2-NEXT: bx lr
1089;
1090; CHECK-ARM-LABEL: i16_8:
1091; CHECK-ARM: @ %bb.0:
1092; CHECK-ARM-NEXT: strh r1, [r0, #8]!
1093; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001094 %o = getelementptr inbounds i8, ptr %p, i32 8
1095 store i16 %v, ptr %o, align 2
1096 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001097}
1098
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001099define ptr @i16_m1(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001100; CHECK-T1-LABEL: i16_m1:
1101; CHECK-T1: @ %bb.0:
1102; CHECK-T1-NEXT: subs r0, r0, #1
1103; CHECK-T1-NEXT: strh r1, [r0]
1104; CHECK-T1-NEXT: bx lr
1105;
1106; CHECK-T2-LABEL: i16_m1:
1107; CHECK-T2: @ %bb.0:
1108; CHECK-T2-NEXT: strh r1, [r0, #-1]!
1109; CHECK-T2-NEXT: bx lr
1110;
1111; CHECK-ARM-LABEL: i16_m1:
1112; CHECK-ARM: @ %bb.0:
1113; CHECK-ARM-NEXT: strh r1, [r0, #-1]!
1114; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001115 %o = getelementptr inbounds i8, ptr %p, i32 -1
1116 store i16 %v, ptr %o, align 2
1117 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001118}
1119
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001120define ptr @i16_m4(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001121; CHECK-T1-LABEL: i16_m4:
1122; CHECK-T1: @ %bb.0:
1123; CHECK-T1-NEXT: subs r0, r0, #4
1124; CHECK-T1-NEXT: strh r1, [r0]
1125; CHECK-T1-NEXT: bx lr
1126;
1127; CHECK-T2-LABEL: i16_m4:
1128; CHECK-T2: @ %bb.0:
1129; CHECK-T2-NEXT: strh r1, [r0, #-4]!
1130; CHECK-T2-NEXT: bx lr
1131;
1132; CHECK-ARM-LABEL: i16_m4:
1133; CHECK-ARM: @ %bb.0:
1134; CHECK-ARM-NEXT: strh r1, [r0, #-4]!
1135; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001136 %o = getelementptr inbounds i8, ptr %p, i32 -4
1137 store i16 %v, ptr %o, align 2
1138 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001139}
1140
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001141define ptr @i16_252(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001142; CHECK-T1-LABEL: i16_252:
1143; CHECK-T1: @ %bb.0:
1144; CHECK-T1-NEXT: movs r2, #252
1145; CHECK-T1-NEXT: strh r1, [r0, r2]
1146; CHECK-T1-NEXT: adds r0, #252
1147; CHECK-T1-NEXT: bx lr
1148;
1149; CHECK-T2-LABEL: i16_252:
1150; CHECK-T2: @ %bb.0:
1151; CHECK-T2-NEXT: strh r1, [r0, #252]!
1152; CHECK-T2-NEXT: bx lr
1153;
1154; CHECK-ARM-LABEL: i16_252:
1155; CHECK-ARM: @ %bb.0:
1156; CHECK-ARM-NEXT: strh r1, [r0, #252]!
1157; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001158 %o = getelementptr inbounds i8, ptr %p, i32 252
1159 store i16 %v, ptr %o, align 2
1160 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001161}
1162
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001163define ptr @i16_255(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001164; CHECK-T1-LABEL: i16_255:
1165; CHECK-T1: @ %bb.0:
1166; CHECK-T1-NEXT: movs r2, #255
1167; CHECK-T1-NEXT: strh r1, [r0, r2]
1168; CHECK-T1-NEXT: adds r0, #255
1169; CHECK-T1-NEXT: bx lr
1170;
1171; CHECK-T2-LABEL: i16_255:
1172; CHECK-T2: @ %bb.0:
1173; CHECK-T2-NEXT: strh r1, [r0, #255]!
1174; CHECK-T2-NEXT: bx lr
1175;
1176; CHECK-ARM-LABEL: i16_255:
1177; CHECK-ARM: @ %bb.0:
1178; CHECK-ARM-NEXT: strh r1, [r0, #255]!
1179; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001180 %o = getelementptr inbounds i8, ptr %p, i32 255
1181 store i16 %v, ptr %o, align 2
1182 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001183}
1184
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001185define ptr @i16_256(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001186; CHECK-T1-LABEL: i16_256:
1187; CHECK-T1: @ %bb.0:
1188; CHECK-T1-NEXT: movs r2, #1
1189; CHECK-T1-NEXT: lsls r2, r2, #8
1190; CHECK-T1-NEXT: strh r1, [r0, r2]
1191; CHECK-T1-NEXT: adds r0, r0, r2
1192; CHECK-T1-NEXT: bx lr
1193;
1194; CHECK-T2-LABEL: i16_256:
1195; CHECK-T2: @ %bb.0:
1196; CHECK-T2-NEXT: strh.w r1, [r0, #256]
1197; CHECK-T2-NEXT: add.w r0, r0, #256
1198; CHECK-T2-NEXT: bx lr
1199;
1200; CHECK-ARM-LABEL: i16_256:
1201; CHECK-ARM: @ %bb.0:
1202; CHECK-ARM-NEXT: mov r2, #256
1203; CHECK-ARM-NEXT: strh r1, [r0, r2]!
1204; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001205 %o = getelementptr inbounds i8, ptr %p, i32 256
1206 store i16 %v, ptr %o, align 2
1207 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001208}
1209
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001210define ptr @i16_m252(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001211; CHECK-T1-LABEL: i16_m252:
1212; CHECK-T1: @ %bb.0:
1213; CHECK-T1-NEXT: subs r0, #252
1214; CHECK-T1-NEXT: strh r1, [r0]
1215; CHECK-T1-NEXT: bx lr
1216;
1217; CHECK-T2-LABEL: i16_m252:
1218; CHECK-T2: @ %bb.0:
1219; CHECK-T2-NEXT: strh r1, [r0, #-252]!
1220; CHECK-T2-NEXT: bx lr
1221;
1222; CHECK-ARM-LABEL: i16_m252:
1223; CHECK-ARM: @ %bb.0:
1224; CHECK-ARM-NEXT: strh r1, [r0, #-252]!
1225; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001226 %o = getelementptr inbounds i8, ptr %p, i32 -252
1227 store i16 %v, ptr %o, align 2
1228 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001229}
1230
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001231define ptr @i16_m255(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001232; CHECK-T1-LABEL: i16_m255:
1233; CHECK-T1: @ %bb.0:
1234; CHECK-T1-NEXT: subs r0, #255
1235; CHECK-T1-NEXT: strh r1, [r0]
1236; CHECK-T1-NEXT: bx lr
1237;
1238; CHECK-T2-LABEL: i16_m255:
1239; CHECK-T2: @ %bb.0:
1240; CHECK-T2-NEXT: strh r1, [r0, #-255]!
1241; CHECK-T2-NEXT: bx lr
1242;
1243; CHECK-ARM-LABEL: i16_m255:
1244; CHECK-ARM: @ %bb.0:
1245; CHECK-ARM-NEXT: strh r1, [r0, #-255]!
1246; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001247 %o = getelementptr inbounds i8, ptr %p, i32 -255
1248 store i16 %v, ptr %o, align 2
1249 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001250}
1251
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001252define ptr @i16_m256(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001253; CHECK-T1-LABEL: i16_m256:
1254; CHECK-T1: @ %bb.0:
1255; CHECK-T1-NEXT: movs r2, #255
1256; CHECK-T1-NEXT: mvns r2, r2
1257; CHECK-T1-NEXT: strh r1, [r0, r2]
1258; CHECK-T1-NEXT: adds r0, r0, r2
1259; CHECK-T1-NEXT: bx lr
1260;
1261; CHECK-T2-LABEL: i16_m256:
1262; CHECK-T2: @ %bb.0:
1263; CHECK-T2-NEXT: mvn r2, #255
1264; CHECK-T2-NEXT: strh r1, [r0, r2]
1265; CHECK-T2-NEXT: sub.w r0, r0, #256
1266; CHECK-T2-NEXT: bx lr
1267;
1268; CHECK-ARM-LABEL: i16_m256:
1269; CHECK-ARM: @ %bb.0:
1270; CHECK-ARM-NEXT: mvn r2, #255
1271; CHECK-ARM-NEXT: strh r1, [r0, r2]!
1272; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001273 %o = getelementptr inbounds i8, ptr %p, i32 -256
1274 store i16 %v, ptr %o, align 2
1275 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001276}
1277
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001278define ptr @i16_4095(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001279; CHECK-T1-LABEL: i16_4095:
1280; CHECK-T1: @ %bb.0:
1281; CHECK-T1-NEXT: ldr r2, .LCPI51_0
1282; CHECK-T1-NEXT: strh r1, [r0, r2]
1283; CHECK-T1-NEXT: adds r0, r0, r2
1284; CHECK-T1-NEXT: bx lr
1285; CHECK-T1-NEXT: .p2align 2
1286; CHECK-T1-NEXT: @ %bb.1:
1287; CHECK-T1-NEXT: .LCPI51_0:
1288; CHECK-T1-NEXT: .long 4095 @ 0xfff
1289;
1290; CHECK-T2-LABEL: i16_4095:
1291; CHECK-T2: @ %bb.0:
1292; CHECK-T2-NEXT: strh.w r1, [r0, #4095]
1293; CHECK-T2-NEXT: addw r0, r0, #4095
1294; CHECK-T2-NEXT: bx lr
1295;
1296; CHECK-ARM-LABEL: i16_4095:
1297; CHECK-ARM: @ %bb.0:
1298; CHECK-ARM-NEXT: movw r2, #4095
1299; CHECK-ARM-NEXT: strh r1, [r0, r2]!
1300; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001301 %o = getelementptr inbounds i8, ptr %p, i32 4095
1302 store i16 %v, ptr %o, align 2
1303 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001304}
1305
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001306define ptr @i16_4096(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001307; CHECK-T1-LABEL: i16_4096:
1308; CHECK-T1: @ %bb.0:
1309; CHECK-T1-NEXT: movs r2, #1
1310; CHECK-T1-NEXT: lsls r2, r2, #12
1311; CHECK-T1-NEXT: strh r1, [r0, r2]
1312; CHECK-T1-NEXT: adds r0, r0, r2
1313; CHECK-T1-NEXT: bx lr
1314;
1315; CHECK-T2-LABEL: i16_4096:
1316; CHECK-T2: @ %bb.0:
1317; CHECK-T2-NEXT: mov.w r2, #4096
1318; CHECK-T2-NEXT: strh r1, [r0, r2]
1319; CHECK-T2-NEXT: add.w r0, r0, #4096
1320; CHECK-T2-NEXT: bx lr
1321;
1322; CHECK-ARM-LABEL: i16_4096:
1323; CHECK-ARM: @ %bb.0:
1324; CHECK-ARM-NEXT: mov r2, #4096
1325; CHECK-ARM-NEXT: strh r1, [r0, r2]!
1326; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001327 %o = getelementptr inbounds i8, ptr %p, i32 4096
1328 store i16 %v, ptr %o, align 2
1329 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001330}
1331
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001332define ptr @i16_m4095(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001333; CHECK-T1-LABEL: i16_m4095:
1334; CHECK-T1: @ %bb.0:
1335; CHECK-T1-NEXT: ldr r2, .LCPI53_0
1336; CHECK-T1-NEXT: strh r1, [r0, r2]
1337; CHECK-T1-NEXT: adds r0, r0, r2
1338; CHECK-T1-NEXT: bx lr
1339; CHECK-T1-NEXT: .p2align 2
1340; CHECK-T1-NEXT: @ %bb.1:
1341; CHECK-T1-NEXT: .LCPI53_0:
1342; CHECK-T1-NEXT: .long 4294963201 @ 0xfffff001
1343;
1344; CHECK-T2-LABEL: i16_m4095:
1345; CHECK-T2: @ %bb.0:
1346; CHECK-T2-NEXT: movw r2, #61441
1347; CHECK-T2-NEXT: movt r2, #65535
1348; CHECK-T2-NEXT: strh r1, [r0, r2]
1349; CHECK-T2-NEXT: subw r0, r0, #4095
1350; CHECK-T2-NEXT: bx lr
1351;
1352; CHECK-ARM-LABEL: i16_m4095:
1353; CHECK-ARM: @ %bb.0:
1354; CHECK-ARM-NEXT: movw r2, #61441
1355; CHECK-ARM-NEXT: movt r2, #65535
1356; CHECK-ARM-NEXT: strh r1, [r0, r2]!
1357; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001358 %o = getelementptr inbounds i8, ptr %p, i32 -4095
1359 store i16 %v, ptr %o, align 2
1360 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001361}
1362
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001363define ptr @i16_m4096(ptr %p, i16 %v) {
David Greenebb65832021-02-23 10:53:22 +00001364; CHECK-T1-LABEL: i16_m4096:
1365; CHECK-T1: @ %bb.0:
1366; CHECK-T1-NEXT: ldr r2, .LCPI54_0
1367; CHECK-T1-NEXT: strh r1, [r0, r2]
1368; CHECK-T1-NEXT: adds r0, r0, r2
1369; CHECK-T1-NEXT: bx lr
1370; CHECK-T1-NEXT: .p2align 2
1371; CHECK-T1-NEXT: @ %bb.1:
1372; CHECK-T1-NEXT: .LCPI54_0:
1373; CHECK-T1-NEXT: .long 4294963200 @ 0xfffff000
1374;
1375; CHECK-T2-LABEL: i16_m4096:
1376; CHECK-T2: @ %bb.0:
1377; CHECK-T2-NEXT: movw r2, #61440
1378; CHECK-T2-NEXT: movt r2, #65535
1379; CHECK-T2-NEXT: strh r1, [r0, r2]
1380; CHECK-T2-NEXT: sub.w r0, r0, #4096
1381; CHECK-T2-NEXT: bx lr
1382;
1383; CHECK-ARM-LABEL: i16_m4096:
1384; CHECK-ARM: @ %bb.0:
1385; CHECK-ARM-NEXT: movw r2, #61440
1386; CHECK-ARM-NEXT: movt r2, #65535
1387; CHECK-ARM-NEXT: strh r1, [r0, r2]!
1388; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001389 %o = getelementptr inbounds i8, ptr %p, i32 -4096
1390 store i16 %v, ptr %o, align 2
1391 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001392}
1393
1394; i8
1395
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001396define ptr @i8_0(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001397; CHECK-LABEL: i8_0:
1398; CHECK: @ %bb.0:
1399; CHECK-NEXT: strb r1, [r0]
1400; CHECK-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001401 store i8 %v, ptr %p, align 1
1402 ret ptr %p
David Greenebb65832021-02-23 10:53:22 +00001403}
1404
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001405define ptr @i8_3(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001406; CHECK-T1-LABEL: i8_3:
1407; CHECK-T1: @ %bb.0:
1408; CHECK-T1-NEXT: strb r1, [r0, #3]
1409; CHECK-T1-NEXT: adds r0, r0, #3
1410; CHECK-T1-NEXT: bx lr
1411;
1412; CHECK-T2-LABEL: i8_3:
1413; CHECK-T2: @ %bb.0:
1414; CHECK-T2-NEXT: strb r1, [r0, #3]!
1415; CHECK-T2-NEXT: bx lr
1416;
1417; CHECK-ARM-LABEL: i8_3:
1418; CHECK-ARM: @ %bb.0:
1419; CHECK-ARM-NEXT: strb r1, [r0, #3]!
1420; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001421 %o = getelementptr inbounds i8, ptr %p, i32 3
1422 store i8 %v, ptr %o, align 1
1423 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001424}
1425
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001426define ptr @i8_4(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001427; CHECK-T1-LABEL: i8_4:
1428; CHECK-T1: @ %bb.0:
1429; CHECK-T1-NEXT: strb r1, [r0, #4]
1430; CHECK-T1-NEXT: adds r0, r0, #4
1431; CHECK-T1-NEXT: bx lr
1432;
1433; CHECK-T2-LABEL: i8_4:
1434; CHECK-T2: @ %bb.0:
1435; CHECK-T2-NEXT: strb r1, [r0, #4]!
1436; CHECK-T2-NEXT: bx lr
1437;
1438; CHECK-ARM-LABEL: i8_4:
1439; CHECK-ARM: @ %bb.0:
1440; CHECK-ARM-NEXT: strb r1, [r0, #4]!
1441; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001442 %o = getelementptr inbounds i8, ptr %p, i32 4
1443 store i8 %v, ptr %o, align 1
1444 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001445}
1446
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001447define ptr @i8_8(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001448; CHECK-T1-LABEL: i8_8:
1449; CHECK-T1: @ %bb.0:
1450; CHECK-T1-NEXT: strb r1, [r0, #8]
1451; CHECK-T1-NEXT: adds r0, #8
1452; CHECK-T1-NEXT: bx lr
1453;
1454; CHECK-T2-LABEL: i8_8:
1455; CHECK-T2: @ %bb.0:
1456; CHECK-T2-NEXT: strb r1, [r0, #8]!
1457; CHECK-T2-NEXT: bx lr
1458;
1459; CHECK-ARM-LABEL: i8_8:
1460; CHECK-ARM: @ %bb.0:
1461; CHECK-ARM-NEXT: strb r1, [r0, #8]!
1462; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001463 %o = getelementptr inbounds i8, ptr %p, i32 8
1464 store i8 %v, ptr %o, align 1
1465 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001466}
1467
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001468define ptr @i8_m1(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001469; CHECK-T1-LABEL: i8_m1:
1470; CHECK-T1: @ %bb.0:
1471; CHECK-T1-NEXT: subs r0, r0, #1
1472; CHECK-T1-NEXT: strb r1, [r0]
1473; CHECK-T1-NEXT: bx lr
1474;
1475; CHECK-T2-LABEL: i8_m1:
1476; CHECK-T2: @ %bb.0:
1477; CHECK-T2-NEXT: strb r1, [r0, #-1]!
1478; CHECK-T2-NEXT: bx lr
1479;
1480; CHECK-ARM-LABEL: i8_m1:
1481; CHECK-ARM: @ %bb.0:
1482; CHECK-ARM-NEXT: strb r1, [r0, #-1]!
1483; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001484 %o = getelementptr inbounds i8, ptr %p, i32 -1
1485 store i8 %v, ptr %o, align 1
1486 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001487}
1488
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001489define ptr @i8_m4(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001490; CHECK-T1-LABEL: i8_m4:
1491; CHECK-T1: @ %bb.0:
1492; CHECK-T1-NEXT: subs r0, r0, #4
1493; CHECK-T1-NEXT: strb r1, [r0]
1494; CHECK-T1-NEXT: bx lr
1495;
1496; CHECK-T2-LABEL: i8_m4:
1497; CHECK-T2: @ %bb.0:
1498; CHECK-T2-NEXT: strb r1, [r0, #-4]!
1499; CHECK-T2-NEXT: bx lr
1500;
1501; CHECK-ARM-LABEL: i8_m4:
1502; CHECK-ARM: @ %bb.0:
1503; CHECK-ARM-NEXT: strb r1, [r0, #-4]!
1504; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001505 %o = getelementptr inbounds i8, ptr %p, i32 -4
1506 store i8 %v, ptr %o, align 1
1507 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001508}
1509
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001510define ptr @i8_252(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001511; CHECK-T1-LABEL: i8_252:
1512; CHECK-T1: @ %bb.0:
1513; CHECK-T1-NEXT: movs r2, #252
1514; CHECK-T1-NEXT: strb r1, [r0, r2]
1515; CHECK-T1-NEXT: adds r0, #252
1516; CHECK-T1-NEXT: bx lr
1517;
1518; CHECK-T2-LABEL: i8_252:
1519; CHECK-T2: @ %bb.0:
1520; CHECK-T2-NEXT: strb r1, [r0, #252]!
1521; CHECK-T2-NEXT: bx lr
1522;
1523; CHECK-ARM-LABEL: i8_252:
1524; CHECK-ARM: @ %bb.0:
1525; CHECK-ARM-NEXT: strb r1, [r0, #252]!
1526; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001527 %o = getelementptr inbounds i8, ptr %p, i32 252
1528 store i8 %v, ptr %o, align 1
1529 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001530}
1531
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001532define ptr @i8_255(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001533; CHECK-T1-LABEL: i8_255:
1534; CHECK-T1: @ %bb.0:
1535; CHECK-T1-NEXT: movs r2, #255
1536; CHECK-T1-NEXT: strb r1, [r0, r2]
1537; CHECK-T1-NEXT: adds r0, #255
1538; CHECK-T1-NEXT: bx lr
1539;
1540; CHECK-T2-LABEL: i8_255:
1541; CHECK-T2: @ %bb.0:
1542; CHECK-T2-NEXT: strb r1, [r0, #255]!
1543; CHECK-T2-NEXT: bx lr
1544;
1545; CHECK-ARM-LABEL: i8_255:
1546; CHECK-ARM: @ %bb.0:
1547; CHECK-ARM-NEXT: strb r1, [r0, #255]!
1548; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001549 %o = getelementptr inbounds i8, ptr %p, i32 255
1550 store i8 %v, ptr %o, align 1
1551 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001552}
1553
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001554define ptr @i8_256(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001555; CHECK-T1-LABEL: i8_256:
1556; CHECK-T1: @ %bb.0:
1557; CHECK-T1-NEXT: movs r2, #1
1558; CHECK-T1-NEXT: lsls r2, r2, #8
1559; CHECK-T1-NEXT: strb r1, [r0, r2]
1560; CHECK-T1-NEXT: adds r0, r0, r2
1561; CHECK-T1-NEXT: bx lr
1562;
1563; CHECK-T2-LABEL: i8_256:
1564; CHECK-T2: @ %bb.0:
1565; CHECK-T2-NEXT: strb.w r1, [r0, #256]
1566; CHECK-T2-NEXT: add.w r0, r0, #256
1567; CHECK-T2-NEXT: bx lr
1568;
1569; CHECK-ARM-LABEL: i8_256:
1570; CHECK-ARM: @ %bb.0:
1571; CHECK-ARM-NEXT: strb r1, [r0, #256]!
1572; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001573 %o = getelementptr inbounds i8, ptr %p, i32 256
1574 store i8 %v, ptr %o, align 1
1575 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001576}
1577
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001578define ptr @i8_m252(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001579; CHECK-T1-LABEL: i8_m252:
1580; CHECK-T1: @ %bb.0:
1581; CHECK-T1-NEXT: subs r0, #252
1582; CHECK-T1-NEXT: strb r1, [r0]
1583; CHECK-T1-NEXT: bx lr
1584;
1585; CHECK-T2-LABEL: i8_m252:
1586; CHECK-T2: @ %bb.0:
1587; CHECK-T2-NEXT: strb r1, [r0, #-252]!
1588; CHECK-T2-NEXT: bx lr
1589;
1590; CHECK-ARM-LABEL: i8_m252:
1591; CHECK-ARM: @ %bb.0:
1592; CHECK-ARM-NEXT: strb r1, [r0, #-252]!
1593; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001594 %o = getelementptr inbounds i8, ptr %p, i32 -252
1595 store i8 %v, ptr %o, align 1
1596 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001597}
1598
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001599define ptr @i8_m255(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001600; CHECK-T1-LABEL: i8_m255:
1601; CHECK-T1: @ %bb.0:
1602; CHECK-T1-NEXT: subs r0, #255
1603; CHECK-T1-NEXT: strb r1, [r0]
1604; CHECK-T1-NEXT: bx lr
1605;
1606; CHECK-T2-LABEL: i8_m255:
1607; CHECK-T2: @ %bb.0:
1608; CHECK-T2-NEXT: strb r1, [r0, #-255]!
1609; CHECK-T2-NEXT: bx lr
1610;
1611; CHECK-ARM-LABEL: i8_m255:
1612; CHECK-ARM: @ %bb.0:
1613; CHECK-ARM-NEXT: strb r1, [r0, #-255]!
1614; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001615 %o = getelementptr inbounds i8, ptr %p, i32 -255
1616 store i8 %v, ptr %o, align 1
1617 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001618}
1619
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001620define ptr @i8_m256(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001621; CHECK-T1-LABEL: i8_m256:
1622; CHECK-T1: @ %bb.0:
1623; CHECK-T1-NEXT: movs r2, #255
1624; CHECK-T1-NEXT: mvns r2, r2
1625; CHECK-T1-NEXT: strb r1, [r0, r2]
1626; CHECK-T1-NEXT: adds r0, r0, r2
1627; CHECK-T1-NEXT: bx lr
1628;
1629; CHECK-T2-LABEL: i8_m256:
1630; CHECK-T2: @ %bb.0:
1631; CHECK-T2-NEXT: mvn r2, #255
1632; CHECK-T2-NEXT: strb r1, [r0, r2]
1633; CHECK-T2-NEXT: sub.w r0, r0, #256
1634; CHECK-T2-NEXT: bx lr
1635;
1636; CHECK-ARM-LABEL: i8_m256:
1637; CHECK-ARM: @ %bb.0:
1638; CHECK-ARM-NEXT: strb r1, [r0, #-256]!
1639; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001640 %o = getelementptr inbounds i8, ptr %p, i32 -256
1641 store i8 %v, ptr %o, align 1
1642 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001643}
1644
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001645define ptr @i8_4095(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001646; CHECK-T1-LABEL: i8_4095:
1647; CHECK-T1: @ %bb.0:
1648; CHECK-T1-NEXT: ldr r2, .LCPI67_0
1649; CHECK-T1-NEXT: strb r1, [r0, r2]
1650; CHECK-T1-NEXT: adds r0, r0, r2
1651; CHECK-T1-NEXT: bx lr
1652; CHECK-T1-NEXT: .p2align 2
1653; CHECK-T1-NEXT: @ %bb.1:
1654; CHECK-T1-NEXT: .LCPI67_0:
1655; CHECK-T1-NEXT: .long 4095 @ 0xfff
1656;
1657; CHECK-T2-LABEL: i8_4095:
1658; CHECK-T2: @ %bb.0:
1659; CHECK-T2-NEXT: strb.w r1, [r0, #4095]
1660; CHECK-T2-NEXT: addw r0, r0, #4095
1661; CHECK-T2-NEXT: bx lr
1662;
1663; CHECK-ARM-LABEL: i8_4095:
1664; CHECK-ARM: @ %bb.0:
1665; CHECK-ARM-NEXT: strb r1, [r0, #4095]!
1666; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001667 %o = getelementptr inbounds i8, ptr %p, i32 4095
1668 store i8 %v, ptr %o, align 1
1669 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001670}
1671
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001672define ptr @i8_4096(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001673; CHECK-T1-LABEL: i8_4096:
1674; CHECK-T1: @ %bb.0:
1675; CHECK-T1-NEXT: movs r2, #1
1676; CHECK-T1-NEXT: lsls r2, r2, #12
1677; CHECK-T1-NEXT: strb r1, [r0, r2]
1678; CHECK-T1-NEXT: adds r0, r0, r2
1679; CHECK-T1-NEXT: bx lr
1680;
1681; CHECK-T2-LABEL: i8_4096:
1682; CHECK-T2: @ %bb.0:
1683; CHECK-T2-NEXT: mov.w r2, #4096
1684; CHECK-T2-NEXT: strb r1, [r0, r2]
1685; CHECK-T2-NEXT: add.w r0, r0, #4096
1686; CHECK-T2-NEXT: bx lr
1687;
1688; CHECK-ARM-LABEL: i8_4096:
1689; CHECK-ARM: @ %bb.0:
1690; CHECK-ARM-NEXT: mov r2, #4096
1691; CHECK-ARM-NEXT: strb r1, [r0, r2]!
1692; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001693 %o = getelementptr inbounds i8, ptr %p, i32 4096
1694 store i8 %v, ptr %o, align 1
1695 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001696}
1697
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001698define ptr @i8_m4095(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001699; CHECK-T1-LABEL: i8_m4095:
1700; CHECK-T1: @ %bb.0:
1701; CHECK-T1-NEXT: ldr r2, .LCPI69_0
1702; CHECK-T1-NEXT: strb r1, [r0, r2]
1703; CHECK-T1-NEXT: adds r0, r0, r2
1704; CHECK-T1-NEXT: bx lr
1705; CHECK-T1-NEXT: .p2align 2
1706; CHECK-T1-NEXT: @ %bb.1:
1707; CHECK-T1-NEXT: .LCPI69_0:
1708; CHECK-T1-NEXT: .long 4294963201 @ 0xfffff001
1709;
1710; CHECK-T2-LABEL: i8_m4095:
1711; CHECK-T2: @ %bb.0:
1712; CHECK-T2-NEXT: movw r2, #61441
1713; CHECK-T2-NEXT: movt r2, #65535
1714; CHECK-T2-NEXT: strb r1, [r0, r2]
1715; CHECK-T2-NEXT: subw r0, r0, #4095
1716; CHECK-T2-NEXT: bx lr
1717;
1718; CHECK-ARM-LABEL: i8_m4095:
1719; CHECK-ARM: @ %bb.0:
1720; CHECK-ARM-NEXT: strb r1, [r0, #-4095]!
1721; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001722 %o = getelementptr inbounds i8, ptr %p, i32 -4095
1723 store i8 %v, ptr %o, align 1
1724 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001725}
1726
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001727define ptr @i8_m4096(ptr %p, i8 %v) {
David Greenebb65832021-02-23 10:53:22 +00001728; CHECK-T1-LABEL: i8_m4096:
1729; CHECK-T1: @ %bb.0:
1730; CHECK-T1-NEXT: ldr r2, .LCPI70_0
1731; CHECK-T1-NEXT: strb r1, [r0, r2]
1732; CHECK-T1-NEXT: adds r0, r0, r2
1733; CHECK-T1-NEXT: bx lr
1734; CHECK-T1-NEXT: .p2align 2
1735; CHECK-T1-NEXT: @ %bb.1:
1736; CHECK-T1-NEXT: .LCPI70_0:
1737; CHECK-T1-NEXT: .long 4294963200 @ 0xfffff000
1738;
1739; CHECK-T2-LABEL: i8_m4096:
1740; CHECK-T2: @ %bb.0:
1741; CHECK-T2-NEXT: movw r2, #61440
1742; CHECK-T2-NEXT: movt r2, #65535
1743; CHECK-T2-NEXT: strb r1, [r0, r2]
1744; CHECK-T2-NEXT: sub.w r0, r0, #4096
1745; CHECK-T2-NEXT: bx lr
1746;
1747; CHECK-ARM-LABEL: i8_m4096:
1748; CHECK-ARM: @ %bb.0:
1749; CHECK-ARM-NEXT: movw r2, #61440
1750; CHECK-ARM-NEXT: movt r2, #65535
1751; CHECK-ARM-NEXT: strb r1, [r0, r2]!
1752; CHECK-ARM-NEXT: bx lr
Nikita Popovbed1c7f2022-12-19 12:44:09 +01001753 %o = getelementptr inbounds i8, ptr %p, i32 -4096
1754 store i8 %v, ptr %o, align 1
1755 ret ptr %o
David Greenebb65832021-02-23 10:53:22 +00001756}