1*4d519fc3SSam Parker; RUN: llc -mtriple=thumbv8m.main -mcpu=cortex-m33 %s -o - | FileCheck %s 2*4d519fc3SSam Parker; RUN: llc -mtriple=thumbv7em %s -o - | FileCheck %s 3*4d519fc3SSam Parker; RUN: llc -mtriple=armv6 %s -o - | FileCheck %s 4*4d519fc3SSam Parker; RUN: llc -mtriple=armv7 %s -o - | FileCheck %s 5*4d519fc3SSam Parker; RUN: llc -mtriple=armv8 %s -o - | FileCheck %s 6*4d519fc3SSam Parker 7*4d519fc3SSam Parker; CHECK-LABEL: sxtb16_ror_8 8*4d519fc3SSam Parker; CHECK: sxtb16 r0, r0, ror #8 9*4d519fc3SSam Parkerdefine i32 @sxtb16_ror_8(i32 %a) { 10*4d519fc3SSam Parkerentry: 11*4d519fc3SSam Parker %shr.i = lshr i32 %a, 8 12*4d519fc3SSam Parker %shl.i = shl i32 %a, 24 13*4d519fc3SSam Parker %or.i = or i32 %shl.i, %shr.i 14*4d519fc3SSam Parker %0 = tail call i32 @llvm.arm.sxtb16(i32 %or.i) 15*4d519fc3SSam Parker ret i32 %0 16*4d519fc3SSam Parker} 17*4d519fc3SSam Parker 18*4d519fc3SSam Parker; CHECK-LABEL: sxtb16_ror_16 19*4d519fc3SSam Parker; CHECK: sxtb16 r0, r0, ror #16 20*4d519fc3SSam Parkerdefine i32 @sxtb16_ror_16(i32 %a) { 21*4d519fc3SSam Parkerentry: 22*4d519fc3SSam Parker %shr.i = lshr i32 %a, 16 23*4d519fc3SSam Parker %shl.i = shl i32 %a, 16 24*4d519fc3SSam Parker %or.i = or i32 %shl.i, %shr.i 25*4d519fc3SSam Parker %0 = tail call i32 @llvm.arm.sxtb16(i32 %or.i) 26*4d519fc3SSam Parker ret i32 %0 27*4d519fc3SSam Parker} 28*4d519fc3SSam Parker 29*4d519fc3SSam Parker; CHECK-LABEL: sxtb16_ror_24 30*4d519fc3SSam Parker; CHECK: sxtb16 r0, r0, ror #24 31*4d519fc3SSam Parkerdefine i32 @sxtb16_ror_24(i32 %a) { 32*4d519fc3SSam Parkerentry: 33*4d519fc3SSam Parker %shr.i = lshr i32 %a, 24 34*4d519fc3SSam Parker %shl.i = shl i32 %a, 8 35*4d519fc3SSam Parker %or.i = or i32 %shl.i, %shr.i 36*4d519fc3SSam Parker %0 = tail call i32 @llvm.arm.sxtb16(i32 %or.i) 37*4d519fc3SSam Parker ret i32 %0 38*4d519fc3SSam Parker} 39*4d519fc3SSam Parker 40*4d519fc3SSam Parker; CHECK-LABEL: uxtb16_ror_8 41*4d519fc3SSam Parker; CHECK: uxtb16 r0, r0, ror #8 42*4d519fc3SSam Parkerdefine i32 @uxtb16_ror_8(i32 %a) { 43*4d519fc3SSam Parkerentry: 44*4d519fc3SSam Parker %shr.i = lshr i32 %a, 8 45*4d519fc3SSam Parker %shl.i = shl i32 %a, 24 46*4d519fc3SSam Parker %or.i = or i32 %shl.i, %shr.i 47*4d519fc3SSam Parker %0 = tail call i32 @llvm.arm.uxtb16(i32 %or.i) 48*4d519fc3SSam Parker ret i32 %0 49*4d519fc3SSam Parker} 50*4d519fc3SSam Parker 51*4d519fc3SSam Parker; CHECK-LABEL: uxtb16_ror_16 52*4d519fc3SSam Parker; CHECK: uxtb16 r0, r0, ror #16 53*4d519fc3SSam Parkerdefine i32 @uxtb16_ror_16(i32 %a) { 54*4d519fc3SSam Parkerentry: 55*4d519fc3SSam Parker %shr.i = lshr i32 %a, 16 56*4d519fc3SSam Parker %shl.i = shl i32 %a, 16 57*4d519fc3SSam Parker %or.i = or i32 %shl.i, %shr.i 58*4d519fc3SSam Parker %0 = tail call i32 @llvm.arm.uxtb16(i32 %or.i) 59*4d519fc3SSam Parker ret i32 %0 60*4d519fc3SSam Parker} 61*4d519fc3SSam Parker 62*4d519fc3SSam Parker; CHECK-LABEL: uxtb16_ror_24 63*4d519fc3SSam Parker; CHECK: uxtb16 r0, r0, ror #24 64*4d519fc3SSam Parkerdefine i32 @uxtb16_ror_24(i32 %a) { 65*4d519fc3SSam Parkerentry: 66*4d519fc3SSam Parker %shr.i = lshr i32 %a, 24 67*4d519fc3SSam Parker %shl.i = shl i32 %a, 8 68*4d519fc3SSam Parker %or.i = or i32 %shl.i, %shr.i 69*4d519fc3SSam Parker %0 = tail call i32 @llvm.arm.uxtb16(i32 %or.i) 70*4d519fc3SSam Parker ret i32 %0 71*4d519fc3SSam Parker} 72*4d519fc3SSam Parker 73*4d519fc3SSam Parker; CHECK-LABEL: sxtab16_ror_8 74*4d519fc3SSam Parker; CHECK: sxtab16 r0, r0, r1, ror #8 75*4d519fc3SSam Parkerdefine i32 @sxtab16_ror_8(i32 %a, i32 %b) { 76*4d519fc3SSam Parkerentry: 77*4d519fc3SSam Parker %shr.i = lshr i32 %b, 8 78*4d519fc3SSam Parker %shl.i = shl i32 %b, 24 79*4d519fc3SSam Parker %or.i = or i32 %shl.i, %shr.i 80*4d519fc3SSam Parker %0 = tail call i32 @llvm.arm.sxtab16(i32 %a, i32 %or.i) 81*4d519fc3SSam Parker ret i32 %0 82*4d519fc3SSam Parker} 83*4d519fc3SSam Parker 84*4d519fc3SSam Parker; CHECK-LABEL: sxtab16_ror_16 85*4d519fc3SSam Parker; CHECK: sxtab16 r0, r0, r1, ror #16 86*4d519fc3SSam Parkerdefine i32 @sxtab16_ror_16(i32 %a, i32 %b) { 87*4d519fc3SSam Parkerentry: 88*4d519fc3SSam Parker %shr.i = lshr i32 %b, 16 89*4d519fc3SSam Parker %shl.i = shl i32 %b, 16 90*4d519fc3SSam Parker %or.i = or i32 %shl.i, %shr.i 91*4d519fc3SSam Parker %0 = tail call i32 @llvm.arm.sxtab16(i32 %a, i32 %or.i) 92*4d519fc3SSam Parker ret i32 %0 93*4d519fc3SSam Parker} 94*4d519fc3SSam Parker 95*4d519fc3SSam Parker; CHECK-LABEL: sxtab16_ror_24 96*4d519fc3SSam Parker; CHECK: sxtab16 r0, r0, r1, ror #24 97*4d519fc3SSam Parkerdefine i32 @sxtab16_ror_24(i32 %a, i32 %b) { 98*4d519fc3SSam Parkerentry: 99*4d519fc3SSam Parker %shr.i = lshr i32 %b, 24 100*4d519fc3SSam Parker %shl.i = shl i32 %b, 8 101*4d519fc3SSam Parker %or.i = or i32 %shl.i, %shr.i 102*4d519fc3SSam Parker %0 = tail call i32 @llvm.arm.sxtab16(i32 %a, i32 %or.i) 103*4d519fc3SSam Parker ret i32 %0 104*4d519fc3SSam Parker} 105*4d519fc3SSam Parker 106*4d519fc3SSam Parker; CHECK-LABEL: uxtab16_ror_8 107*4d519fc3SSam Parker; CHECK: uxtab16 r0, r0, r1, ror #8 108*4d519fc3SSam Parkerdefine i32 @uxtab16_ror_8(i32 %a, i32 %b) { 109*4d519fc3SSam Parkerentry: 110*4d519fc3SSam Parker %shr.i = lshr i32 %b, 8 111*4d519fc3SSam Parker %shl.i = shl i32 %b, 24 112*4d519fc3SSam Parker %or.i = or i32 %shl.i, %shr.i 113*4d519fc3SSam Parker %0 = tail call i32 @llvm.arm.uxtab16(i32 %a, i32 %or.i) 114*4d519fc3SSam Parker ret i32 %0 115*4d519fc3SSam Parker} 116*4d519fc3SSam Parker 117*4d519fc3SSam Parker; CHECK-LABEL: uxtab16_ror_16 118*4d519fc3SSam Parker; CHECK: uxtab16 r0, r0, r1, ror #16 119*4d519fc3SSam Parkerdefine i32 @uxtab16_ror_16(i32 %a, i32 %b) { 120*4d519fc3SSam Parkerentry: 121*4d519fc3SSam Parker %shr.i = lshr i32 %b, 16 122*4d519fc3SSam Parker %shl.i = shl i32 %b, 16 123*4d519fc3SSam Parker %or.i = or i32 %shl.i, %shr.i 124*4d519fc3SSam Parker %0 = tail call i32 @llvm.arm.uxtab16(i32 %a, i32 %or.i) 125*4d519fc3SSam Parker ret i32 %0 126*4d519fc3SSam Parker} 127*4d519fc3SSam Parker 128*4d519fc3SSam Parker; CHECK-LABEL: uxtab16_ror_24 129*4d519fc3SSam Parker; CHECK: uxtab16 r0, r0, r1, ror #24 130*4d519fc3SSam Parkerdefine i32 @uxtab16_ror_24(i32 %a, i32 %b) { 131*4d519fc3SSam Parkerentry: 132*4d519fc3SSam Parker %shr.i = lshr i32 %b, 24 133*4d519fc3SSam Parker %shl.i = shl i32 %b, 8 134*4d519fc3SSam Parker %or.i = or i32 %shl.i, %shr.i 135*4d519fc3SSam Parker %0 = tail call i32 @llvm.arm.uxtab16(i32 %a, i32 %or.i) 136*4d519fc3SSam Parker ret i32 %0 137*4d519fc3SSam Parker} 138*4d519fc3SSam Parker 139*4d519fc3SSam Parkerdeclare i32 @llvm.arm.sxtb16(i32) 140*4d519fc3SSam Parkerdeclare i32 @llvm.arm.uxtb16(i32) 141*4d519fc3SSam Parkerdeclare i32 @llvm.arm.sxtab16(i32, i32) 142*4d519fc3SSam Parkerdeclare i32 @llvm.arm.uxtab16(i32, i32) 143*4d519fc3SSam Parker 144