1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86 -mcpu=generic | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine i16 @foo(i16 %x, i16 %y, i16 %z) nounwind readnone { 4*9880d681SAndroid Build Coastguard Workerentry: 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo: 6*9880d681SAndroid Build Coastguard Worker; CHECK: rolw %cl 7*9880d681SAndroid Build Coastguard Worker %0 = shl i16 %x, %z 8*9880d681SAndroid Build Coastguard Worker %1 = sub i16 16, %z 9*9880d681SAndroid Build Coastguard Worker %2 = lshr i16 %x, %1 10*9880d681SAndroid Build Coastguard Worker %3 = or i16 %2, %0 11*9880d681SAndroid Build Coastguard Worker ret i16 %3 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine i16 @bar(i16 %x, i16 %y, i16 %z) nounwind readnone { 15*9880d681SAndroid Build Coastguard Workerentry: 16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bar: 17*9880d681SAndroid Build Coastguard Worker; CHECK: shldw %cl 18*9880d681SAndroid Build Coastguard Worker %0 = shl i16 %y, %z 19*9880d681SAndroid Build Coastguard Worker %1 = sub i16 16, %z 20*9880d681SAndroid Build Coastguard Worker %2 = lshr i16 %x, %1 21*9880d681SAndroid Build Coastguard Worker %3 = or i16 %2, %0 22*9880d681SAndroid Build Coastguard Worker ret i16 %3 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine i16 @un(i16 %x, i16 %y, i16 %z) nounwind readnone { 26*9880d681SAndroid Build Coastguard Workerentry: 27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: un: 28*9880d681SAndroid Build Coastguard Worker; CHECK: rorw %cl 29*9880d681SAndroid Build Coastguard Worker %0 = lshr i16 %x, %z 30*9880d681SAndroid Build Coastguard Worker %1 = sub i16 16, %z 31*9880d681SAndroid Build Coastguard Worker %2 = shl i16 %x, %1 32*9880d681SAndroid Build Coastguard Worker %3 = or i16 %2, %0 33*9880d681SAndroid Build Coastguard Worker ret i16 %3 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine i16 @bu(i16 %x, i16 %y, i16 %z) nounwind readnone { 37*9880d681SAndroid Build Coastguard Workerentry: 38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: bu: 39*9880d681SAndroid Build Coastguard Worker; CHECK: shrdw 40*9880d681SAndroid Build Coastguard Worker %0 = lshr i16 %y, %z 41*9880d681SAndroid Build Coastguard Worker %1 = sub i16 16, %z 42*9880d681SAndroid Build Coastguard Worker %2 = shl i16 %x, %1 43*9880d681SAndroid Build Coastguard Worker %3 = or i16 %2, %0 44*9880d681SAndroid Build Coastguard Worker ret i16 %3 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine i16 @xfoo(i16 %x, i16 %y, i16 %z) nounwind readnone { 48*9880d681SAndroid Build Coastguard Workerentry: 49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xfoo: 50*9880d681SAndroid Build Coastguard Worker; CHECK: rolw $5 51*9880d681SAndroid Build Coastguard Worker %0 = lshr i16 %x, 11 52*9880d681SAndroid Build Coastguard Worker %1 = shl i16 %x, 5 53*9880d681SAndroid Build Coastguard Worker %2 = or i16 %0, %1 54*9880d681SAndroid Build Coastguard Worker ret i16 %2 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Workerdefine i16 @xbar(i16 %x, i16 %y, i16 %z) nounwind readnone { 58*9880d681SAndroid Build Coastguard Workerentry: 59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xbar: 60*9880d681SAndroid Build Coastguard Worker; CHECK: shldw $5 61*9880d681SAndroid Build Coastguard Worker %0 = shl i16 %y, 5 62*9880d681SAndroid Build Coastguard Worker %1 = lshr i16 %x, 11 63*9880d681SAndroid Build Coastguard Worker %2 = or i16 %0, %1 64*9880d681SAndroid Build Coastguard Worker ret i16 %2 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdefine i16 @xun(i16 %x, i16 %y, i16 %z) nounwind readnone { 68*9880d681SAndroid Build Coastguard Workerentry: 69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xun: 70*9880d681SAndroid Build Coastguard Worker; CHECK: rolw $11 71*9880d681SAndroid Build Coastguard Worker %0 = lshr i16 %x, 5 72*9880d681SAndroid Build Coastguard Worker %1 = shl i16 %x, 11 73*9880d681SAndroid Build Coastguard Worker %2 = or i16 %0, %1 74*9880d681SAndroid Build Coastguard Worker ret i16 %2 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine i16 @xbu(i16 %x, i16 %y, i16 %z) nounwind readnone { 78*9880d681SAndroid Build Coastguard Workerentry: 79*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: xbu: 80*9880d681SAndroid Build Coastguard Worker; CHECK: shldw $11 81*9880d681SAndroid Build Coastguard Worker %0 = lshr i16 %y, 5 82*9880d681SAndroid Build Coastguard Worker %1 = shl i16 %x, 11 83*9880d681SAndroid Build Coastguard Worker %2 = or i16 %0, %1 84*9880d681SAndroid Build Coastguard Worker ret i16 %2 85*9880d681SAndroid Build Coastguard Worker} 86