1; RUN: llc -mtriple=arm-eabi -mattr=+v6t2 %s -o - | FileCheck %s 2 3define i32 @f1(i32 %a) { 4entry: 5; CHECK-LABEL: f1: 6; CHECK: sbfx r0, r0, #0, #20 7 %tmp = shl i32 %a, 12 8 %tmp2 = ashr i32 %tmp, 12 9 ret i32 %tmp2 10} 11 12define i32 @f2(i32 %a) { 13entry: 14; CHECK-LABEL: f2: 15; CHECK: bfc r0, #20, #12 16 %tmp = shl i32 %a, 12 17 %tmp2 = lshr i32 %tmp, 12 18 ret i32 %tmp2 19} 20 21define i32 @f3(i32 %a) { 22entry: 23; CHECK-LABEL: f3: 24; CHECK: sbfx r0, r0, #5, #3 25 %tmp = shl i32 %a, 24 26 %tmp2 = ashr i32 %tmp, 29 27 ret i32 %tmp2 28} 29 30define i32 @f4(i32 %a) { 31entry: 32; CHECK-LABEL: f4: 33; CHECK: ubfx r0, r0, #5, #3 34 %tmp = shl i32 %a, 24 35 %tmp2 = lshr i32 %tmp, 29 36 ret i32 %tmp2 37} 38 39define i32 @f5(i32 %a) { 40entry: 41; CHECK-LABEL: f5: 42; CHECK-NOT: sbfx 43; CHECK: bx 44 %tmp = shl i32 %a, 3 45 %tmp2 = ashr i32 %tmp, 1 46 ret i32 %tmp2 47} 48 49define signext i8 @f6(i32 %a) { 50; CHECK-LABEL: f6: 51; CHECK: sbfx r0, r0, #23, #8 52 53 %tmp = lshr i32 %a, 23 54 %res = trunc i32 %tmp to i8 55 ret i8 %res 56} 57 58define signext i8 @f7(i32 %a) { 59; CHECK-LABEL: f7: 60; CHECK-NOT: sbfx 61 62 %tmp = lshr i32 %a, 25 63 %res = trunc i32 %tmp to i8 64 ret i8 %res 65} 66