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