blob: 8cdcf8ad062f02417cf6f2d5c439ce5b0f4f1890 [file] [log] [blame]
Elena Demikhovsky33d447a2013-08-21 09:36:02 +00001;RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s
2
3;CHECK-LABEL: shift_16_i32
4;CHECK: vpsrld
5;CHECK: vpslld
6;CHECK: vpsrad
7;CHECK: ret
8define <16 x i32> @shift_16_i32(<16 x i32> %a) {
9 %b = lshr <16 x i32> %a, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
10 %c = shl <16 x i32> %b, <i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12>
11 %d = ashr <16 x i32> %c, <i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12, i32 12>
12 ret <16 x i32> %d;
13}
14
15;CHECK-LABEL: shift_8_i64
16;CHECK: vpsrlq
17;CHECK: vpsllq
18;CHECK: vpsraq
19;CHECK: ret
20define <8 x i64> @shift_8_i64(<8 x i64> %a) {
21 %b = lshr <8 x i64> %a, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
22 %c = shl <8 x i64> %b, <i64 12, i64 12, i64 12, i64 12, i64 12, i64 12, i64 12, i64 12>
23 %d = ashr <8 x i64> %c, <i64 12, i64 12, i64 12, i64 12, i64 12, i64 12, i64 12, i64 12>
24 ret <8 x i64> %d;
25}
26
27; CHECK-LABEL: variable_shl4
28; CHECK: vpsllvq %zmm
29; CHECK: ret
30define <8 x i64> @variable_shl4(<8 x i64> %x, <8 x i64> %y) {
31 %k = shl <8 x i64> %x, %y
32 ret <8 x i64> %k
33}
34
35; CHECK-LABEL: variable_shl5
36; CHECK: vpsllvd %zmm
37; CHECK: ret
38define <16 x i32> @variable_shl5(<16 x i32> %x, <16 x i32> %y) {
39 %k = shl <16 x i32> %x, %y
40 ret <16 x i32> %k
41}
42
43; CHECK-LABEL: variable_srl0
44; CHECK: vpsrlvd
45; CHECK: ret
46define <16 x i32> @variable_srl0(<16 x i32> %x, <16 x i32> %y) {
47 %k = lshr <16 x i32> %x, %y
48 ret <16 x i32> %k
49}
50
51; CHECK-LABEL: variable_srl2
52; CHECK: psrlvq
53; CHECK: ret
54define <8 x i64> @variable_srl2(<8 x i64> %x, <8 x i64> %y) {
55 %k = lshr <8 x i64> %x, %y
56 ret <8 x i64> %k
57}
58
59; CHECK-LABEL: variable_sra1
60; CHECK: vpsravd
61; CHECK: ret
62define <16 x i32> @variable_sra1(<16 x i32> %x, <16 x i32> %y) {
63 %k = ashr <16 x i32> %x, %y
64 ret <16 x i32> %k
65}
66
67; CHECK-LABEL: variable_sra2
68; CHECK: vpsravq %zmm
69; CHECK: ret
70define <8 x i64> @variable_sra2(<8 x i64> %x, <8 x i64> %y) {
71 %k = ashr <8 x i64> %x, %y
72 ret <8 x i64> %k
73}
74
75; CHECK-LABEL: variable_sra01_load
76; CHECK: vpsravd (%
77; CHECK: ret
78define <16 x i32> @variable_sra01_load(<16 x i32> %x, <16 x i32>* %y) {
79 %y1 = load <16 x i32>* %y
80 %k = ashr <16 x i32> %x, %y1
81 ret <16 x i32> %k
82}
83
84; CHECK-LABEL: variable_shl1_load
85; CHECK: vpsllvd (%
86; CHECK: ret
87define <16 x i32> @variable_shl1_load(<16 x i32> %x, <16 x i32>* %y) {
88 %y1 = load <16 x i32>* %y
89 %k = shl <16 x i32> %x, %y1
90 ret <16 x i32> %k
91}
92; CHECK: variable_srl0_load
93; CHECK: vpsrlvd (%
94; CHECK: ret
95define <16 x i32> @variable_srl0_load(<16 x i32> %x, <16 x i32>* %y) {
96 %y1 = load <16 x i32>* %y
97 %k = lshr <16 x i32> %x, %y1
98 ret <16 x i32> %k
99}
100
101; CHECK: variable_srl3_load
102; CHECK: vpsrlvq (%
103; CHECK: ret
104define <8 x i64> @variable_srl3_load(<8 x i64> %x, <8 x i64>* %y) {
105 %y1 = load <8 x i64>* %y
106 %k = lshr <8 x i64> %x, %y1
107 ret <8 x i64> %k
108}