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 2 3define i32 @t1(ptr nocapture %ptr) nounwind readonly { 4entry: 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 10} 11 12define i32 @t2(ptr nocapture %ptr) nounwind readonly { 13entry: 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 19} 20 21define i32 @t3(ptr nocapture %ptr) nounwind readonly { 22entry: 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 28} 29 30define zeroext i16 @t4(ptr nocapture %ptr) nounwind readonly { 31entry: 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 37} 38 39define zeroext i16 @t5(ptr nocapture %ptr) nounwind readonly { 40entry: 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 46} 47 48define zeroext i16 @t6(ptr nocapture %ptr) nounwind readonly { 49entry: 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 55} 56 57define zeroext i8 @t7(ptr nocapture %ptr) nounwind readonly { 58entry: 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 64} 65 66define zeroext i8 @t8(ptr nocapture %ptr) nounwind readonly { 67entry: 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 73} 74 75define zeroext i8 @t9(ptr nocapture %ptr) nounwind readonly { 76entry: 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 82} 83 84define void @t10(ptr nocapture %ptr) nounwind { 85entry: 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 92} 93 94define void @t11(ptr nocapture %ptr) nounwind { 95entry: 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 102} 103 104define void @t12(ptr nocapture %ptr) nounwind { 105entry: 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 116} 117 118define void @t13(ptr nocapture %ptr) nounwind { 119entry: 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 126} 127 128define void @t14(ptr nocapture %ptr) nounwind { 129entry: 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 136} 137 138define void @t15(ptr nocapture %ptr) nounwind { 139entry: 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 150} 151 152define void @t16(ptr nocapture %ptr) nounwind { 153entry: 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 160} 161 162define void @t17(ptr nocapture %ptr) nounwind { 163entry: 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 170} 171 172define void @t18(ptr nocapture %ptr) nounwind { 173entry: 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 184} 185