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 {
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]
12 define i32 @t2(ptr nocapture %ptr) nounwind readonly {
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]
21 define i32 @t3(ptr nocapture %ptr) nounwind readonly {
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]
30 define zeroext i16 @t4(ptr nocapture %ptr) nounwind readonly {
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]
39 define zeroext i16 @t5(ptr nocapture %ptr) nounwind readonly {
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]
48 define zeroext i16 @t6(ptr nocapture %ptr) nounwind readonly {
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]
57 define zeroext i8 @t7(ptr nocapture %ptr) nounwind readonly {
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]
66 define zeroext i8 @t8(ptr nocapture %ptr) nounwind readonly {
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]
75 define zeroext i8 @t9(ptr nocapture %ptr) nounwind readonly {
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]
84 define void @t10(ptr nocapture %ptr) nounwind {
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]
94 define void @t11(ptr nocapture %ptr) nounwind {
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]
104 define void @t12(ptr nocapture %ptr) nounwind {
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]]]
118 define void @t13(ptr nocapture %ptr) nounwind {
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]
128 define void @t14(ptr nocapture %ptr) nounwind {
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]
138 define void @t15(ptr nocapture %ptr) nounwind {
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]]]
152 define void @t16(ptr nocapture %ptr) nounwind {
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]
162 define void @t17(ptr nocapture %ptr) nounwind {
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]
172 define void @t18(ptr nocapture %ptr) nounwind {
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]]]