xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/fast-isel-ldr-str-thumb-neg-index.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios -verify-machineinstrs | FileCheck %s --check-prefix=THUMB
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine i32 @t1(i32* nocapture %ptr) nounwind readonly {
4*9880d681SAndroid Build Coastguard Workerentry:
5*9880d681SAndroid Build Coastguard Worker; THUMB: t1
6*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %ptr, i32 -1
7*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %add.ptr, align 4
8*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r{{[0-9]}}, [r0, #-4]
9*9880d681SAndroid Build Coastguard Worker  ret i32 %0
10*9880d681SAndroid Build Coastguard Worker}
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine i32 @t2(i32* nocapture %ptr) nounwind readonly {
13*9880d681SAndroid Build Coastguard Workerentry:
14*9880d681SAndroid Build Coastguard Worker; THUMB: t2
15*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %ptr, i32 -63
16*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %add.ptr, align 4
17*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r{{[0-9]}}, [r0, #-252]
18*9880d681SAndroid Build Coastguard Worker  ret i32 %0
19*9880d681SAndroid Build Coastguard Worker}
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerdefine i32 @t3(i32* nocapture %ptr) nounwind readonly {
22*9880d681SAndroid Build Coastguard Workerentry:
23*9880d681SAndroid Build Coastguard Worker; THUMB: t3
24*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %ptr, i32 -64
25*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %add.ptr, align 4
26*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r{{[0-9]}}, [r0]
27*9880d681SAndroid Build Coastguard Worker  ret i32 %0
28*9880d681SAndroid Build Coastguard Worker}
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @t4(i16* nocapture %ptr) nounwind readonly {
31*9880d681SAndroid Build Coastguard Workerentry:
32*9880d681SAndroid Build Coastguard Worker; THUMB: t4
33*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i16, i16* %ptr, i32 -1
34*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* %add.ptr, align 2
35*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r{{[0-9]}}, [r0, #-2]
36*9880d681SAndroid Build Coastguard Worker  ret i16 %0
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @t5(i16* nocapture %ptr) nounwind readonly {
40*9880d681SAndroid Build Coastguard Workerentry:
41*9880d681SAndroid Build Coastguard Worker; THUMB: t5
42*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i16, i16* %ptr, i32 -127
43*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* %add.ptr, align 2
44*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r{{[0-9]}}, [r0, #-254]
45*9880d681SAndroid Build Coastguard Worker  ret i16 %0
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdefine zeroext i16 @t6(i16* nocapture %ptr) nounwind readonly {
49*9880d681SAndroid Build Coastguard Workerentry:
50*9880d681SAndroid Build Coastguard Worker; THUMB: t6
51*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i16, i16* %ptr, i32 -128
52*9880d681SAndroid Build Coastguard Worker  %0 = load i16, i16* %add.ptr, align 2
53*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r{{[0-9]}}, [r0]
54*9880d681SAndroid Build Coastguard Worker  ret i16 %0
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @t7(i8* nocapture %ptr) nounwind readonly {
58*9880d681SAndroid Build Coastguard Workerentry:
59*9880d681SAndroid Build Coastguard Worker; THUMB: t7
60*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i8, i8* %ptr, i32 -1
61*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* %add.ptr, align 1
62*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r{{[0-9]}}, [r0, #-1]
63*9880d681SAndroid Build Coastguard Worker  ret i8 %0
64*9880d681SAndroid Build Coastguard Worker}
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @t8(i8* nocapture %ptr) nounwind readonly {
67*9880d681SAndroid Build Coastguard Workerentry:
68*9880d681SAndroid Build Coastguard Worker; THUMB: t8
69*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i8, i8* %ptr, i32 -255
70*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* %add.ptr, align 1
71*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r{{[0-9]}}, [r0, #-255]
72*9880d681SAndroid Build Coastguard Worker  ret i8 %0
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerdefine zeroext i8 @t9(i8* nocapture %ptr) nounwind readonly {
76*9880d681SAndroid Build Coastguard Workerentry:
77*9880d681SAndroid Build Coastguard Worker; THUMB: t9
78*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i8, i8* %ptr, i32 -256
79*9880d681SAndroid Build Coastguard Worker  %0 = load i8, i8* %add.ptr, align 1
80*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r{{[0-9]}}, [r0]
81*9880d681SAndroid Build Coastguard Worker  ret i8 %0
82*9880d681SAndroid Build Coastguard Worker}
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerdefine void @t10(i32* nocapture %ptr) nounwind {
85*9880d681SAndroid Build Coastguard Workerentry:
86*9880d681SAndroid Build Coastguard Worker; THUMB: t10
87*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %ptr, i32 -1
88*9880d681SAndroid Build Coastguard Worker  store i32 0, i32* %add.ptr, align 4
89*9880d681SAndroid Build Coastguard Worker; THUMB: str r{{[0-9]}}, [r0, #-4]
90*9880d681SAndroid Build Coastguard Worker  ret void
91*9880d681SAndroid Build Coastguard Worker}
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerdefine void @t11(i32* nocapture %ptr) nounwind {
94*9880d681SAndroid Build Coastguard Workerentry:
95*9880d681SAndroid Build Coastguard Worker; THUMB: t11
96*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %ptr, i32 -63
97*9880d681SAndroid Build Coastguard Worker  store i32 0, i32* %add.ptr, align 4
98*9880d681SAndroid Build Coastguard Worker; THUMB: str r{{[0-9]}}, [r0, #-252]
99*9880d681SAndroid Build Coastguard Worker  ret void
100*9880d681SAndroid Build Coastguard Worker}
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Workerdefine void @t12(i32* nocapture %ptr) nounwind {
103*9880d681SAndroid Build Coastguard Workerentry:
104*9880d681SAndroid Build Coastguard Worker; THUMB: t12
105*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i32, i32* %ptr, i32 -64
106*9880d681SAndroid Build Coastguard Worker  store i32 0, i32* %add.ptr, align 4
107*9880d681SAndroid Build Coastguard Worker; THUMB: str r{{[0-9]}}, [r0]
108*9880d681SAndroid Build Coastguard Worker  ret void
109*9880d681SAndroid Build Coastguard Worker}
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Workerdefine void @t13(i16* nocapture %ptr) nounwind {
112*9880d681SAndroid Build Coastguard Workerentry:
113*9880d681SAndroid Build Coastguard Worker; THUMB: t13
114*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i16, i16* %ptr, i32 -1
115*9880d681SAndroid Build Coastguard Worker  store i16 0, i16* %add.ptr, align 2
116*9880d681SAndroid Build Coastguard Worker; THUMB: strh r{{[0-9]}}, [r0, #-2]
117*9880d681SAndroid Build Coastguard Worker  ret void
118*9880d681SAndroid Build Coastguard Worker}
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Workerdefine void @t14(i16* nocapture %ptr) nounwind {
121*9880d681SAndroid Build Coastguard Workerentry:
122*9880d681SAndroid Build Coastguard Worker; THUMB: t14
123*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i16, i16* %ptr, i32 -127
124*9880d681SAndroid Build Coastguard Worker  store i16 0, i16* %add.ptr, align 2
125*9880d681SAndroid Build Coastguard Worker; THUMB: strh r{{[0-9]}}, [r0, #-254]
126*9880d681SAndroid Build Coastguard Worker  ret void
127*9880d681SAndroid Build Coastguard Worker}
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Workerdefine void @t15(i16* nocapture %ptr) nounwind {
130*9880d681SAndroid Build Coastguard Workerentry:
131*9880d681SAndroid Build Coastguard Worker; THUMB: t15
132*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i16, i16* %ptr, i32 -128
133*9880d681SAndroid Build Coastguard Worker  store i16 0, i16* %add.ptr, align 2
134*9880d681SAndroid Build Coastguard Worker; THUMB: strh r{{[0-9]}}, [r0]
135*9880d681SAndroid Build Coastguard Worker  ret void
136*9880d681SAndroid Build Coastguard Worker}
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Workerdefine void @t16(i8* nocapture %ptr) nounwind {
139*9880d681SAndroid Build Coastguard Workerentry:
140*9880d681SAndroid Build Coastguard Worker; THUMB: t16
141*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i8, i8* %ptr, i32 -1
142*9880d681SAndroid Build Coastguard Worker  store i8 0, i8* %add.ptr, align 1
143*9880d681SAndroid Build Coastguard Worker; THUMB: strb r{{[0-9]}}, [r0, #-1]
144*9880d681SAndroid Build Coastguard Worker  ret void
145*9880d681SAndroid Build Coastguard Worker}
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Workerdefine void @t17(i8* nocapture %ptr) nounwind {
148*9880d681SAndroid Build Coastguard Workerentry:
149*9880d681SAndroid Build Coastguard Worker; THUMB: t17
150*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i8, i8* %ptr, i32 -255
151*9880d681SAndroid Build Coastguard Worker  store i8 0, i8* %add.ptr, align 1
152*9880d681SAndroid Build Coastguard Worker; THUMB: strb r{{[0-9]}}, [r0, #-255]
153*9880d681SAndroid Build Coastguard Worker  ret void
154*9880d681SAndroid Build Coastguard Worker}
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Workerdefine void @t18(i8* nocapture %ptr) nounwind {
157*9880d681SAndroid Build Coastguard Workerentry:
158*9880d681SAndroid Build Coastguard Worker; THUMB: t18
159*9880d681SAndroid Build Coastguard Worker  %add.ptr = getelementptr inbounds i8, i8* %ptr, i32 -256
160*9880d681SAndroid Build Coastguard Worker  store i8 0, i8* %add.ptr, align 1
161*9880d681SAndroid Build Coastguard Worker; THUMB: strb r{{[0-9]}}, [r0]
162*9880d681SAndroid Build Coastguard Worker  ret void
163*9880d681SAndroid Build Coastguard Worker}
164