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