[rtsan] Add fork/execve interceptors (#117198)
[llvm-project.git] / llvm / test / CodeGen / ARM / fast-isel-ldr-str-thumb-neg-index.ll
blobbb4db8706a19ec4bdc46ecb0a779067b328971e8
1 ; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios -verify-machineinstrs | FileCheck %s --check-prefix=THUMB
3 define i32 @t1(ptr nocapture %ptr) nounwind readonly {
4 entry:
5 ; THUMB-LABEL: t1:
6   %add.ptr = getelementptr inbounds i32, ptr %ptr, i32 -1
7   %0 = load i32, ptr %add.ptr, align 4
8 ; THUMB: ldr r{{[0-9]}}, [r0, #-4]
9   ret i32 %0
12 define i32 @t2(ptr nocapture %ptr) nounwind readonly {
13 entry:
14 ; THUMB-LABEL: t2:
15   %add.ptr = getelementptr inbounds i32, ptr %ptr, i32 -63
16   %0 = load i32, ptr %add.ptr, align 4
17 ; THUMB: ldr r{{[0-9]}}, [r0, #-252]
18   ret i32 %0
21 define i32 @t3(ptr nocapture %ptr) nounwind readonly {
22 entry:
23 ; THUMB-LABEL: t3:
24   %add.ptr = getelementptr inbounds i32, ptr %ptr, i32 -64
25   %0 = load i32, ptr %add.ptr, align 4
26 ; THUMB: ldr r{{[0-9]}}, [r0]
27   ret i32 %0
30 define zeroext i16 @t4(ptr nocapture %ptr) nounwind readonly {
31 entry:
32 ; THUMB-LABEL: t4:
33   %add.ptr = getelementptr inbounds i16, ptr %ptr, i32 -1
34   %0 = load i16, ptr %add.ptr, align 2
35 ; THUMB: ldrh r{{[0-9]}}, [r0, #-2]
36   ret i16 %0
39 define zeroext i16 @t5(ptr nocapture %ptr) nounwind readonly {
40 entry:
41 ; THUMB-LABEL: t5:
42   %add.ptr = getelementptr inbounds i16, ptr %ptr, i32 -127
43   %0 = load i16, ptr %add.ptr, align 2
44 ; THUMB: ldrh r{{[0-9]}}, [r0, #-254]
45   ret i16 %0
48 define zeroext i16 @t6(ptr nocapture %ptr) nounwind readonly {
49 entry:
50 ; THUMB-LABEL: t6:
51   %add.ptr = getelementptr inbounds i16, ptr %ptr, i32 -128
52   %0 = load i16, ptr %add.ptr, align 2
53 ; THUMB: ldrh r{{[0-9]}}, [r0]
54   ret i16 %0
57 define zeroext i8 @t7(ptr nocapture %ptr) nounwind readonly {
58 entry:
59 ; THUMB-LABEL: t7:
60   %add.ptr = getelementptr inbounds i8, ptr %ptr, i32 -1
61   %0 = load i8, ptr %add.ptr, align 1
62 ; THUMB: ldrb r{{[0-9]}}, [r0, #-1]
63   ret i8 %0
66 define zeroext i8 @t8(ptr nocapture %ptr) nounwind readonly {
67 entry:
68 ; THUMB-LABEL: t8:
69   %add.ptr = getelementptr inbounds i8, ptr %ptr, i32 -255
70   %0 = load i8, ptr %add.ptr, align 1
71 ; THUMB: ldrb r{{[0-9]}}, [r0, #-255]
72   ret i8 %0
75 define zeroext i8 @t9(ptr nocapture %ptr) nounwind readonly {
76 entry:
77 ; THUMB-LABEL: t9:
78   %add.ptr = getelementptr inbounds i8, ptr %ptr, i32 -256
79   %0 = load i8, ptr %add.ptr, align 1
80 ; THUMB: ldrb r{{[0-9]}}, [r0]
81   ret i8 %0
84 define void @t10(ptr nocapture %ptr) nounwind {
85 entry:
86 ; THUMB-LABEL: t10:
87   %add.ptr = getelementptr inbounds i32, ptr %ptr, i32 -1
88   store i32 0, ptr %add.ptr, align 4
89 ; THUMB: mov [[REG:r[0-9]+]], r0
90 ; THUMB: str r{{[0-9]}}, [[[REG]], #-4]
91   ret void
94 define void @t11(ptr nocapture %ptr) nounwind {
95 entry:
96 ; THUMB-LABEL: t11:
97   %add.ptr = getelementptr inbounds i32, ptr %ptr, i32 -63
98   store i32 0, ptr %add.ptr, align 4
99 ; THUMB: mov [[REG:r[0-9]+]], r0
100 ; THUMB: str r{{[0-9]}}, [[[REG]], #-252]
101   ret void
104 define void @t12(ptr nocapture %ptr) nounwind {
105 entry:
106 ; THUMB-LABEL: t12:
107   %add.ptr = getelementptr inbounds i32, ptr %ptr, i32 -64
108   store i32 0, ptr %add.ptr, align 4
109 ; THUMB: mov [[PTR:r[0-9]+]], r0
110 ; THUMB: movs [[VAL:r[0-9]+]], #0
111 ; THUMB: movw [[REG:r[0-9]+]], #65280
112 ; THUMB: movt [[REG]], #65535
113 ; THUMB: add [[PTR]], [[REG]]
114 ; THUMB: str [[VAL]], [[[PTR]]]
115   ret void
118 define void @t13(ptr nocapture %ptr) nounwind {
119 entry:
120 ; THUMB-LABEL: t13:
121   %add.ptr = getelementptr inbounds i16, ptr %ptr, i32 -1
122   store i16 0, ptr %add.ptr, align 2
123 ; THUMB: mov [[REG:r[0-9]+]], r0
124 ; THUMB: strh r{{[0-9]}}, [[[REG]], #-2]
125   ret void
128 define void @t14(ptr nocapture %ptr) nounwind {
129 entry:
130 ; THUMB-LABEL: t14:
131   %add.ptr = getelementptr inbounds i16, ptr %ptr, i32 -127
132   store i16 0, ptr %add.ptr, align 2
133 ; THUMB: mov [[REG:r[0-9]+]], r0
134 ; THUMB: strh r{{[0-9]}}, [[[REG]], #-254]
135   ret void
138 define void @t15(ptr nocapture %ptr) nounwind {
139 entry:
140 ; THUMB-LABEL: t15:
141   %add.ptr = getelementptr inbounds i16, ptr %ptr, i32 -128
142   store i16 0, ptr %add.ptr, align 2
143 ; THUMB: mov [[PTR:r[0-9]+]], r0
144 ; THUMB: movs [[VAL:r[0-9]+]], #0
145 ; THUMB: movw [[REG:r[0-9]+]], #65280
146 ; THUMB: movt [[REG]], #65535
147 ; THUMB: add [[PTR]], [[REG]]
148 ; THUMB: strh [[VAL]], [[[PTR]]]
149   ret void
152 define void @t16(ptr nocapture %ptr) nounwind {
153 entry:
154 ; THUMB-LABEL: t16:
155   %add.ptr = getelementptr inbounds i8, ptr %ptr, i32 -1
156   store i8 0, ptr %add.ptr, align 1
157 ; THUMB: mov [[REG:r[0-9]+]], r0
158 ; THUMB: strb r{{[0-9]}}, [[[REG]], #-1]
159   ret void
162 define void @t17(ptr nocapture %ptr) nounwind {
163 entry:
164 ; THUMB-LABEL: t17:
165   %add.ptr = getelementptr inbounds i8, ptr %ptr, i32 -255
166   store i8 0, ptr %add.ptr, align 1
167 ; THUMB: mov [[REG:r[0-9]+]], r0
168 ; THUMB: strb r{{[0-9]}}, [[[REG]], #-255]
169   ret void
172 define void @t18(ptr nocapture %ptr) nounwind {
173 entry:
174 ; THUMB-LABEL: t18:
175   %add.ptr = getelementptr inbounds i8, ptr %ptr, i32 -256
176   store i8 0, ptr %add.ptr, align 1
177 ; THUMB: mov [[PTR:r[0-9]+]], r0
178 ; THUMB: movs [[VAL]], #0
179 ; THUMB: movw [[REG:r[0-9]+]], #65280
180 ; THUMB: movt [[REG]], #65535
181 ; THUMB: add [[PTR]], [[REG]]
182 ; THUMB: strb [[VAL]], [[[PTR]]]
183   ret void