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