Add a triple to switch.ll test.
[oota-llvm.git] / test / CodeGen / X86 / rot32.ll
1 ; RUN: llc < %s -march=x86 -mcpu=corei7 | FileCheck %s
2 ; RUN: llc < %s -march=x86 -mcpu=core-avx2 | FileCheck %s --check-prefix=BMI2
3
4 define i32 @foo(i32 %x, i32 %y, i32 %z) nounwind readnone {
5 entry:
6 ; CHECK-LABEL: foo:
7 ; CHECK: roll %cl
8         %0 = shl i32 %x, %z
9         %1 = sub i32 32, %z
10         %2 = lshr i32 %x, %1
11         %3 = or i32 %2, %0
12         ret i32 %3
13 }
14
15 define i32 @bar(i32 %x, i32 %y, i32 %z) nounwind readnone {
16 entry:
17 ; CHECK-LABEL: bar:
18 ; CHECK: shldl %cl
19         %0 = shl i32 %y, %z
20         %1 = sub i32 32, %z
21         %2 = lshr i32 %x, %1
22         %3 = or i32 %2, %0
23         ret i32 %3
24 }
25
26 define i32 @un(i32 %x, i32 %y, i32 %z) nounwind readnone {
27 entry:
28 ; CHECK-LABEL: un:
29 ; CHECK: rorl %cl
30         %0 = lshr i32 %x, %z
31         %1 = sub i32 32, %z
32         %2 = shl i32 %x, %1
33         %3 = or i32 %2, %0
34         ret i32 %3
35 }
36
37 define i32 @bu(i32 %x, i32 %y, i32 %z) nounwind readnone {
38 entry:
39 ; CHECK-LABEL: bu:
40 ; CHECK: shrdl %cl
41         %0 = lshr i32 %y, %z
42         %1 = sub i32 32, %z
43         %2 = shl i32 %x, %1
44         %3 = or i32 %2, %0
45         ret i32 %3
46 }
47
48 define i32 @xfoo(i32 %x, i32 %y, i32 %z) nounwind readnone {
49 entry:
50 ; CHECK-LABEL: xfoo:
51 ; CHECK: roll $7
52 ; BMI2-LABEL: xfoo:
53 ; BMI2: rorxl $25
54         %0 = lshr i32 %x, 25
55         %1 = shl i32 %x, 7
56         %2 = or i32 %0, %1
57         ret i32 %2
58 }
59
60 define i32 @xfoop(i32* %p) nounwind readnone {
61 entry:
62 ; BMI2-LABEL: xfoop:
63 ; BMI2: rorxl $25, ({{.+}}), %{{.+}}
64         %x = load i32, i32* %p
65         %a = lshr i32 %x, 25
66         %b = shl i32 %x, 7
67         %c = or i32 %a, %b
68         ret i32 %c
69 }
70
71 define i32 @xbar(i32 %x, i32 %y, i32 %z) nounwind readnone {
72 entry:
73 ; CHECK-LABEL: xbar:
74 ; CHECK: shldl $7
75         %0 = shl i32 %y, 7
76         %1 = lshr i32 %x, 25
77         %2 = or i32 %0, %1
78         ret i32 %2
79 }
80
81 define i32 @xun(i32 %x, i32 %y, i32 %z) nounwind readnone {
82 entry:
83 ; CHECK-LABEL: xun:
84 ; CHECK: roll $25
85 ; BMI2-LABEL: xun:
86 ; BMI2: rorxl $7
87         %0 = lshr i32 %x, 7
88         %1 = shl i32 %x, 25
89         %2 = or i32 %0, %1
90         ret i32 %2
91 }
92
93 define i32 @xunp(i32* %p) nounwind readnone {
94 entry:
95 ; BMI2-LABEL: xunp:
96 ; BMI2: rorxl $7, ({{.+}}), %{{.+}}
97         %x = load i32, i32* %p
98         %a = lshr i32 %x, 7
99         %b = shl i32 %x, 25
100         %c = or i32 %a, %b
101         ret i32 %c
102 }
103
104 define i32 @xbu(i32 %x, i32 %y, i32 %z) nounwind readnone {
105 entry:
106 ; CHECK-LABEL: xbu:
107 ; CHECK: shldl
108         %0 = lshr i32 %y, 7
109         %1 = shl i32 %x, 25
110         %2 = or i32 %0, %1
111         ret i32 %2
112 }