1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64el -mcpu=mips64r2 < %s | FileCheck -check-prefixes=ALL,MIPS %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=mips64el -mcpu=mips64r6 -mattr=micromips < %s | FileCheck -check-prefixes=ALL,MICROMIPS %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine i64 @f0(i64 %a0, i64 %a1) nounwind readnone { 5*9880d681SAndroid Build Coastguard Workerentry: 6*9880d681SAndroid Build Coastguard Worker; ALL: dsllv 7*9880d681SAndroid Build Coastguard Worker %shl = shl i64 %a0, %a1 8*9880d681SAndroid Build Coastguard Worker ret i64 %shl 9*9880d681SAndroid Build Coastguard Worker} 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine i64 @f1(i64 %a0, i64 %a1) nounwind readnone { 12*9880d681SAndroid Build Coastguard Workerentry: 13*9880d681SAndroid Build Coastguard Worker; ALL: dsrav 14*9880d681SAndroid Build Coastguard Worker %shr = ashr i64 %a0, %a1 15*9880d681SAndroid Build Coastguard Worker ret i64 %shr 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerdefine i64 @f2(i64 %a0, i64 %a1) nounwind readnone { 19*9880d681SAndroid Build Coastguard Workerentry: 20*9880d681SAndroid Build Coastguard Worker; ALL: dsrlv 21*9880d681SAndroid Build Coastguard Worker %shr = lshr i64 %a0, %a1 22*9880d681SAndroid Build Coastguard Worker ret i64 %shr 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine i64 @f3(i64 %a0) nounwind readnone { 26*9880d681SAndroid Build Coastguard Workerentry: 27*9880d681SAndroid Build Coastguard Worker; ALL: dsll ${{[0-9]+}}, ${{[0-9]+}}, 10 28*9880d681SAndroid Build Coastguard Worker %shl = shl i64 %a0, 10 29*9880d681SAndroid Build Coastguard Worker ret i64 %shl 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine i64 @f4(i64 %a0) nounwind readnone { 33*9880d681SAndroid Build Coastguard Workerentry: 34*9880d681SAndroid Build Coastguard Worker; ALL: dsra ${{[0-9]+}}, ${{[0-9]+}}, 10 35*9880d681SAndroid Build Coastguard Worker %shr = ashr i64 %a0, 10 36*9880d681SAndroid Build Coastguard Worker ret i64 %shr 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Workerdefine i64 @f5(i64 %a0) nounwind readnone { 40*9880d681SAndroid Build Coastguard Workerentry: 41*9880d681SAndroid Build Coastguard Worker; ALL: dsrl ${{[0-9]+}}, ${{[0-9]+}}, 10 42*9880d681SAndroid Build Coastguard Worker %shr = lshr i64 %a0, 10 43*9880d681SAndroid Build Coastguard Worker ret i64 %shr 44*9880d681SAndroid Build Coastguard Worker} 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard Workerdefine i64 @f6(i64 %a0) nounwind readnone { 47*9880d681SAndroid Build Coastguard Workerentry: 48*9880d681SAndroid Build Coastguard Worker; ALL: dsll ${{[0-9]+}}, ${{[0-9]+}}, 40 49*9880d681SAndroid Build Coastguard Worker %shl = shl i64 %a0, 40 50*9880d681SAndroid Build Coastguard Worker ret i64 %shl 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdefine i64 @f7(i64 %a0) nounwind readnone { 54*9880d681SAndroid Build Coastguard Workerentry: 55*9880d681SAndroid Build Coastguard Worker; ALL: dsra ${{[0-9]+}}, ${{[0-9]+}}, 40 56*9880d681SAndroid Build Coastguard Worker %shr = ashr i64 %a0, 40 57*9880d681SAndroid Build Coastguard Worker ret i64 %shr 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine i64 @f8(i64 %a0) nounwind readnone { 61*9880d681SAndroid Build Coastguard Workerentry: 62*9880d681SAndroid Build Coastguard Worker; ALL: dsrl ${{[0-9]+}}, ${{[0-9]+}}, 40 63*9880d681SAndroid Build Coastguard Worker %shr = lshr i64 %a0, 40 64*9880d681SAndroid Build Coastguard Worker ret i64 %shr 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdefine i64 @f9(i64 %a0, i64 %a1) nounwind readnone { 68*9880d681SAndroid Build Coastguard Workerentry: 69*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: sll 70*9880d681SAndroid Build Coastguard Worker; ALL: drotrv 71*9880d681SAndroid Build Coastguard Worker %shr = lshr i64 %a0, %a1 72*9880d681SAndroid Build Coastguard Worker %sub = sub i64 64, %a1 73*9880d681SAndroid Build Coastguard Worker %shl = shl i64 %a0, %sub 74*9880d681SAndroid Build Coastguard Worker %or = or i64 %shl, %shr 75*9880d681SAndroid Build Coastguard Worker ret i64 %or 76*9880d681SAndroid Build Coastguard Worker} 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Workerdefine i64 @f10(i64 %a0, i64 %a1) nounwind readnone { 79*9880d681SAndroid Build Coastguard Workerentry: 80*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: sll 81*9880d681SAndroid Build Coastguard Worker; ALL: drotrv 82*9880d681SAndroid Build Coastguard Worker %shl = shl i64 %a0, %a1 83*9880d681SAndroid Build Coastguard Worker %sub = sub i64 64, %a1 84*9880d681SAndroid Build Coastguard Worker %shr = lshr i64 %a0, %sub 85*9880d681SAndroid Build Coastguard Worker %or = or i64 %shr, %shl 86*9880d681SAndroid Build Coastguard Worker ret i64 %or 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workerdefine i64 @f11(i64 %a0) nounwind readnone { 90*9880d681SAndroid Build Coastguard Workerentry: 91*9880d681SAndroid Build Coastguard Worker; ALL: drotr ${{[0-9]+}}, ${{[0-9]+}}, 10 92*9880d681SAndroid Build Coastguard Worker %shr = lshr i64 %a0, 10 93*9880d681SAndroid Build Coastguard Worker %shl = shl i64 %a0, 54 94*9880d681SAndroid Build Coastguard Worker %or = or i64 %shr, %shl 95*9880d681SAndroid Build Coastguard Worker ret i64 %or 96*9880d681SAndroid Build Coastguard Worker} 97*9880d681SAndroid Build Coastguard Worker 98*9880d681SAndroid Build Coastguard Workerdefine i64 @f12(i64 %a0) nounwind readnone { 99*9880d681SAndroid Build Coastguard Workerentry: 100*9880d681SAndroid Build Coastguard Worker; ALL: drotr ${{[0-9]+}}, ${{[0-9]+}}, 54 101*9880d681SAndroid Build Coastguard Worker %shl = shl i64 %a0, 10 102*9880d681SAndroid Build Coastguard Worker %shr = lshr i64 %a0, 54 103*9880d681SAndroid Build Coastguard Worker %or = or i64 %shl, %shr 104*9880d681SAndroid Build Coastguard Worker ret i64 %or 105*9880d681SAndroid Build Coastguard Worker} 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Worker 108