[AVX512] add PSLLD and PSLLQ Intrinsic
[oota-llvm.git] / test / CodeGen / X86 / avx512bwvl-mov.ll
1 ; RUN: llc < %s -march=x86-64 -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512bw -mattr=+avx512vl --show-mc-encoding| FileCheck %s
2
3 ; CHECK-LABEL: test_256_1
4 ; CHECK: vmovdqu8 {{.*}} ## encoding: [0x62
5 ; CHECK: ret
6 define <32 x i8> @test_256_1(i8 * %addr) {
7   %vaddr = bitcast i8* %addr to <32 x i8>*
8   %res = load <32 x i8>, <32 x i8>* %vaddr, align 1
9   ret <32 x i8>%res
10 }
11
12 ; CHECK-LABEL: test_256_2
13 ; CHECK: vmovdqu8{{.*}} ## encoding: [0x62
14 ; CHECK: ret
15 define void @test_256_2(i8 * %addr, <32 x i8> %data) {
16   %vaddr = bitcast i8* %addr to <32 x i8>*
17   store <32 x i8>%data, <32 x i8>* %vaddr, align 1
18   ret void
19 }
20
21 ; CHECK-LABEL: test_256_3
22 ; CHECK: vmovdqu8{{.*{%k[1-7]} }}## encoding: [0x62
23 ; CHECK: ret
24 define <32 x i8> @test_256_3(i8 * %addr, <32 x i8> %old, <32 x i8> %mask1) {
25   %mask = icmp ne <32 x i8> %mask1, zeroinitializer
26   %vaddr = bitcast i8* %addr to <32 x i8>*
27   %r = load <32 x i8>, <32 x i8>* %vaddr, align 1
28   %res = select <32 x i1> %mask, <32 x i8> %r, <32 x i8> %old
29   ret <32 x i8>%res
30 }
31
32 ; CHECK-LABEL: test_256_4
33 ; CHECK: vmovdqu8{{.*{%k[1-7]} {z} }}## encoding: [0x62
34 ; CHECK: ret
35 define <32 x i8> @test_256_4(i8 * %addr, <32 x i8> %mask1) {
36   %mask = icmp ne <32 x i8> %mask1, zeroinitializer
37   %vaddr = bitcast i8* %addr to <32 x i8>*
38   %r = load <32 x i8>, <32 x i8>* %vaddr, align 1
39   %res = select <32 x i1> %mask, <32 x i8> %r, <32 x i8> zeroinitializer
40   ret <32 x i8>%res
41 }
42
43 ; CHECK-LABEL: test_256_5
44 ; CHECK: vmovdqu16{{.*}} ## encoding: [0x62
45 ; CHECK: ret
46 define <16 x i16> @test_256_5(i8 * %addr) {
47   %vaddr = bitcast i8* %addr to <16 x i16>*
48   %res = load <16 x i16>, <16 x i16>* %vaddr, align 1
49   ret <16 x i16>%res
50 }
51
52 ; CHECK-LABEL: test_256_6
53 ; CHECK: vmovdqu16{{.*}} ## encoding: [0x62
54 ; CHECK: ret
55 define void @test_256_6(i8 * %addr, <16 x i16> %data) {
56   %vaddr = bitcast i8* %addr to <16 x i16>*
57   store <16 x i16>%data, <16 x i16>* %vaddr, align 1
58   ret void
59 }
60
61 ; CHECK-LABEL: test_256_7
62 ; CHECK: vmovdqu16{{.*{%k[1-7]} }}## encoding: [0x62
63 ; CHECK: ret
64 define <16 x i16> @test_256_7(i8 * %addr, <16 x i16> %old, <16 x i16> %mask1) {
65   %mask = icmp ne <16 x i16> %mask1, zeroinitializer
66   %vaddr = bitcast i8* %addr to <16 x i16>*
67   %r = load <16 x i16>, <16 x i16>* %vaddr, align 1
68   %res = select <16 x i1> %mask, <16 x i16> %r, <16 x i16> %old
69   ret <16 x i16>%res
70 }
71
72 ; CHECK-LABEL: test_256_8
73 ; CHECK: vmovdqu16{{.*{%k[1-7]} {z} }}## encoding: [0x62
74 ; CHECK: ret
75 define <16 x i16> @test_256_8(i8 * %addr, <16 x i16> %mask1) {
76   %mask = icmp ne <16 x i16> %mask1, zeroinitializer
77   %vaddr = bitcast i8* %addr to <16 x i16>*
78   %r = load <16 x i16>, <16 x i16>* %vaddr, align 1
79   %res = select <16 x i1> %mask, <16 x i16> %r, <16 x i16> zeroinitializer
80   ret <16 x i16>%res
81 }
82
83 ; CHECK-LABEL: test_128_1
84 ; CHECK: vmovdqu8 {{.*}} ## encoding: [0x62
85 ; CHECK: ret
86 define <16 x i8> @test_128_1(i8 * %addr) {
87   %vaddr = bitcast i8* %addr to <16 x i8>*
88   %res = load <16 x i8>, <16 x i8>* %vaddr, align 1
89   ret <16 x i8>%res
90 }
91
92 ; CHECK-LABEL: test_128_2
93 ; CHECK: vmovdqu8{{.*}} ## encoding: [0x62
94 ; CHECK: ret
95 define void @test_128_2(i8 * %addr, <16 x i8> %data) {
96   %vaddr = bitcast i8* %addr to <16 x i8>*
97   store <16 x i8>%data, <16 x i8>* %vaddr, align 1
98   ret void
99 }
100
101 ; CHECK-LABEL: test_128_3
102 ; CHECK: vmovdqu8{{.*{%k[1-7]} }}## encoding: [0x62
103 ; CHECK: ret
104 define <16 x i8> @test_128_3(i8 * %addr, <16 x i8> %old, <16 x i8> %mask1) {
105   %mask = icmp ne <16 x i8> %mask1, zeroinitializer
106   %vaddr = bitcast i8* %addr to <16 x i8>*
107   %r = load <16 x i8>, <16 x i8>* %vaddr, align 1
108   %res = select <16 x i1> %mask, <16 x i8> %r, <16 x i8> %old
109   ret <16 x i8>%res
110 }
111
112 ; CHECK-LABEL: test_128_4
113 ; CHECK: vmovdqu8{{.*{%k[1-7]} {z} }}## encoding: [0x62
114 ; CHECK: ret
115 define <16 x i8> @test_128_4(i8 * %addr, <16 x i8> %mask1) {
116   %mask = icmp ne <16 x i8> %mask1, zeroinitializer
117   %vaddr = bitcast i8* %addr to <16 x i8>*
118   %r = load <16 x i8>, <16 x i8>* %vaddr, align 1
119   %res = select <16 x i1> %mask, <16 x i8> %r, <16 x i8> zeroinitializer
120   ret <16 x i8>%res
121 }
122
123 ; CHECK-LABEL: test_128_5
124 ; CHECK: vmovdqu16{{.*}} ## encoding: [0x62
125 ; CHECK: ret
126 define <8 x i16> @test_128_5(i8 * %addr) {
127   %vaddr = bitcast i8* %addr to <8 x i16>*
128   %res = load <8 x i16>, <8 x i16>* %vaddr, align 1
129   ret <8 x i16>%res
130 }
131
132 ; CHECK-LABEL: test_128_6
133 ; CHECK: vmovdqu16{{.*}} ## encoding: [0x62
134 ; CHECK: ret
135 define void @test_128_6(i8 * %addr, <8 x i16> %data) {
136   %vaddr = bitcast i8* %addr to <8 x i16>*
137   store <8 x i16>%data, <8 x i16>* %vaddr, align 1
138   ret void
139 }
140
141 ; CHECK-LABEL: test_128_7
142 ; CHECK: vmovdqu16{{.*{%k[1-7]} }}## encoding: [0x62
143 ; CHECK: ret
144 define <8 x i16> @test_128_7(i8 * %addr, <8 x i16> %old, <8 x i16> %mask1) {
145   %mask = icmp ne <8 x i16> %mask1, zeroinitializer
146   %vaddr = bitcast i8* %addr to <8 x i16>*
147   %r = load <8 x i16>, <8 x i16>* %vaddr, align 1
148   %res = select <8 x i1> %mask, <8 x i16> %r, <8 x i16> %old
149   ret <8 x i16>%res
150 }
151
152 ; CHECK-LABEL: test_128_8
153 ; CHECK: vmovdqu16{{.*{%k[1-7]} {z} }}## encoding: [0x62
154 ; CHECK: ret
155 define <8 x i16> @test_128_8(i8 * %addr, <8 x i16> %mask1) {
156   %mask = icmp ne <8 x i16> %mask1, zeroinitializer
157   %vaddr = bitcast i8* %addr to <8 x i16>*
158   %r = load <8 x i16>, <8 x i16>* %vaddr, align 1
159   %res = select <8 x i1> %mask, <8 x i16> %r, <8 x i16> zeroinitializer
160   ret <8 x i16>%res
161 }
162