Home | History | Annotate | Download | only in ARM
      1 ; RUN: llc -mtriple=arm-eabi -mattr=+v6t2 %s -o - | 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