1 ;RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck %s
2 ;RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck --check-prefix=SKX %s
4 ;CHECK-LABEL: shift_16_i32
9 define <16 x i32> @shift_16_i32(<16 x i32> %a) {
10 %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>
11 %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>
12 %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>
16 ;CHECK-LABEL: shift_8_i64
21 define <8 x i64> @shift_8_i64(<8 x i64> %a) {
22 %b = lshr <8 x i64> %a, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
23 %c = shl <8 x i64> %b, <i64 12, i64 12, i64 12, i64 12, i64 12, i64 12, i64 12, i64 12>
24 %d = ashr <8 x i64> %c, <i64 12, i64 12, i64 12, i64 12, i64 12, i64 12, i64 12, i64 12>
28 ;SKX-LABEL: shift_4_i64
33 define <4 x i64> @shift_4_i64(<4 x i64> %a) {
34 %b = lshr <4 x i64> %a, <i64 1, i64 1, i64 1, i64 1>
35 %c = shl <4 x i64> %b, <i64 12, i64 12, i64 12, i64 12>
36 %d = ashr <4 x i64> %c, <i64 12, i64 12, i64 12, i64 12>
40 ; CHECK-LABEL: variable_shl4
43 define <8 x i64> @variable_shl4(<8 x i64> %x, <8 x i64> %y) {
44 %k = shl <8 x i64> %x, %y
48 ; CHECK-LABEL: variable_shl5
51 define <16 x i32> @variable_shl5(<16 x i32> %x, <16 x i32> %y) {
52 %k = shl <16 x i32> %x, %y
56 ; CHECK-LABEL: variable_srl0
59 define <16 x i32> @variable_srl0(<16 x i32> %x, <16 x i32> %y) {
60 %k = lshr <16 x i32> %x, %y
64 ; CHECK-LABEL: variable_srl2
67 define <8 x i64> @variable_srl2(<8 x i64> %x, <8 x i64> %y) {
68 %k = lshr <8 x i64> %x, %y
72 ; CHECK-LABEL: variable_sra1
75 define <16 x i32> @variable_sra1(<16 x i32> %x, <16 x i32> %y) {
76 %k = ashr <16 x i32> %x, %y
80 ; CHECK-LABEL: variable_sra2
83 define <8 x i64> @variable_sra2(<8 x i64> %x, <8 x i64> %y) {
84 %k = ashr <8 x i64> %x, %y
88 ; SKX-LABEL: variable_sra3
91 define <4 x i64> @variable_sra3(<4 x i64> %x, <4 x i64> %y) {
92 %k = ashr <4 x i64> %x, %y
96 ; SKX-LABEL: variable_sra4
99 define <8 x i16> @variable_sra4(<8 x i16> %x, <8 x i16> %y) {
100 %k = ashr <8 x i16> %x, %y
104 ; CHECK-LABEL: variable_sra01_load
107 define <16 x i32> @variable_sra01_load(<16 x i32> %x, <16 x i32>* %y) {
108 %y1 = load <16 x i32>, <16 x i32>* %y
109 %k = ashr <16 x i32> %x, %y1
113 ; CHECK-LABEL: variable_shl1_load
116 define <16 x i32> @variable_shl1_load(<16 x i32> %x, <16 x i32>* %y) {
117 %y1 = load <16 x i32>, <16 x i32>* %y
118 %k = shl <16 x i32> %x, %y1
121 ; CHECK: variable_srl0_load
124 define <16 x i32> @variable_srl0_load(<16 x i32> %x, <16 x i32>* %y) {
125 %y1 = load <16 x i32>, <16 x i32>* %y
126 %k = lshr <16 x i32> %x, %y1
130 ; CHECK: variable_srl3_load
133 define <8 x i64> @variable_srl3_load(<8 x i64> %x, <8 x i64>* %y) {
134 %y1 = load <8 x i64>, <8 x i64>* %y
135 %k = lshr <8 x i64> %x, %y1