1; RUN: llc < %s -march=thumb -mattr=+thumb2 | FileCheck %s 2 3define i16 @f1(i16 %a, i16* %v) { 4; CHECK: f1: 5; CHECK: strh r0, [r1] 6 store i16 %a, i16* %v 7 ret i16 %a 8} 9 10define i16 @f2(i16 %a, i16* %v) { 11; CHECK: f2: 12; CHECK: strh.w r0, [r1, #4092] 13 %tmp2 = getelementptr i16* %v, i32 2046 14 store i16 %a, i16* %tmp2 15 ret i16 %a 16} 17 18define i16 @f2a(i16 %a, i16* %v) { 19; CHECK: f2a: 20; CHECK: strh r0, [r1, #-128] 21 %tmp2 = getelementptr i16* %v, i32 -64 22 store i16 %a, i16* %tmp2 23 ret i16 %a 24} 25 26define i16 @f3(i16 %a, i16* %v) { 27; CHECK: f3: 28; CHECK: mov.w r2, #4096 29; CHECK: strh r0, [r1, r2] 30 %tmp2 = getelementptr i16* %v, i32 2048 31 store i16 %a, i16* %tmp2 32 ret i16 %a 33} 34 35define i16 @f4(i16 %a, i32 %base) { 36entry: 37; CHECK: f4: 38; CHECK: strh r0, [r1, #-128] 39 %tmp1 = sub i32 %base, 128 40 %tmp2 = inttoptr i32 %tmp1 to i16* 41 store i16 %a, i16* %tmp2 42 ret i16 %a 43} 44 45define i16 @f5(i16 %a, i32 %base, i32 %offset) { 46entry: 47; CHECK: f5: 48; CHECK: strh r0, [r1, r2] 49 %tmp1 = add i32 %base, %offset 50 %tmp2 = inttoptr i32 %tmp1 to i16* 51 store i16 %a, i16* %tmp2 52 ret i16 %a 53} 54 55define i16 @f6(i16 %a, i32 %base, i32 %offset) { 56entry: 57; CHECK: f6: 58; CHECK: strh.w r0, [r1, r2, lsl #2] 59 %tmp1 = shl i32 %offset, 2 60 %tmp2 = add i32 %base, %tmp1 61 %tmp3 = inttoptr i32 %tmp2 to i16* 62 store i16 %a, i16* %tmp3 63 ret i16 %a 64} 65 66define i16 @f7(i16 %a, i32 %base, i32 %offset) { 67entry: 68; CHECK: f7: 69; CHECK: lsrs r2, r2, #2 70; CHECK: strh r0, [r1, r2] 71 %tmp1 = lshr i32 %offset, 2 72 %tmp2 = add i32 %base, %tmp1 73 %tmp3 = inttoptr i32 %tmp2 to i16* 74 store i16 %a, i16* %tmp3 75 ret i16 %a 76} 77