1 ; RUN: llc < %s -march=arm -mattr=+v6t2 | FileCheck %s 2 3 define i32 @f1(i32 %a) { 4 entry: 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 12 define i32 @f2(i32 %a) { 13 entry: 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 21 define i32 @f3(i32 %a) { 22 entry: 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 30 define i32 @f4(i32 %a) { 31 entry: 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 39 define i32 @f5(i32 %a) { 40 entry: 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