blob: a3862d7e27c66aea530add9b932fe7f3aae41638 [file] [log] [blame]
Simon Pilgrim946f08c2017-05-06 13:46:09 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1
5
6define <32 x i8> @test_pabsb(<32 x i8> %a0, <32 x i8> *%a1) {
7; HASWELL-LABEL: test_pabsb:
8; HASWELL: # BB#0:
9; HASWELL-NEXT: vpabsb %ymm0, %ymm0 # sched: [1:0.50]
10; HASWELL-NEXT: vpabsb (%rdi), %ymm1 # sched: [5:0.50]
11; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Michael Zuckermanf6684002017-06-28 11:23:31 +000012; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000013;
14; ZNVER1-LABEL: test_pabsb:
15; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +000016; ZNVER1-NEXT: vpabsb (%rdi), %ymm1 # sched: [8:0.50]
17; ZNVER1-NEXT: vpabsb %ymm0, %ymm0 # sched: [1:0.25]
18; ZNVER1-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
19; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000020 %1 = call <32 x i8> @llvm.x86.avx2.pabs.b(<32 x i8> %a0)
21 %2 = load <32 x i8>, <32 x i8> *%a1, align 32
22 %3 = call <32 x i8> @llvm.x86.avx2.pabs.b(<32 x i8> %2)
23 %4 = or <32 x i8> %1, %3
24 ret <32 x i8> %4
25}
26declare <32 x i8> @llvm.x86.avx2.pabs.b(<32 x i8>) nounwind readnone
27
28define <8 x i32> @test_pabsd(<8 x i32> %a0, <8 x i32> *%a1) {
29; HASWELL-LABEL: test_pabsd:
30; HASWELL: # BB#0:
31; HASWELL-NEXT: vpabsd %ymm0, %ymm0 # sched: [1:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +000032; HASWELL-NEXT: vpabsd (%rdi), %ymm1 # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000033; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Michael Zuckermanf6684002017-06-28 11:23:31 +000034; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000035;
36; ZNVER1-LABEL: test_pabsd:
37; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +000038; ZNVER1-NEXT: vpabsd (%rdi), %ymm1 # sched: [8:0.50]
39; ZNVER1-NEXT: vpabsd %ymm0, %ymm0 # sched: [1:0.25]
40; ZNVER1-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
41; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000042 %1 = call <8 x i32> @llvm.x86.avx2.pabs.d(<8 x i32> %a0)
43 %2 = load <8 x i32>, <8 x i32> *%a1, align 32
44 %3 = call <8 x i32> @llvm.x86.avx2.pabs.d(<8 x i32> %2)
45 %4 = or <8 x i32> %1, %3
46 ret <8 x i32> %4
47}
48declare <8 x i32> @llvm.x86.avx2.pabs.d(<8 x i32>) nounwind readnone
49
50define <16 x i16> @test_pabsw(<16 x i16> %a0, <16 x i16> *%a1) {
51; HASWELL-LABEL: test_pabsw:
52; HASWELL: # BB#0:
53; HASWELL-NEXT: vpabsw %ymm0, %ymm0 # sched: [1:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +000054; HASWELL-NEXT: vpabsw (%rdi), %ymm1 # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000055; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Michael Zuckermanf6684002017-06-28 11:23:31 +000056; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000057;
58; ZNVER1-LABEL: test_pabsw:
59; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +000060; ZNVER1-NEXT: vpabsw (%rdi), %ymm1 # sched: [8:0.50]
61; ZNVER1-NEXT: vpabsw %ymm0, %ymm0 # sched: [1:0.25]
62; ZNVER1-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
63; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000064 %1 = call <16 x i16> @llvm.x86.avx2.pabs.w(<16 x i16> %a0)
65 %2 = load <16 x i16>, <16 x i16> *%a1, align 32
66 %3 = call <16 x i16> @llvm.x86.avx2.pabs.w(<16 x i16> %2)
67 %4 = or <16 x i16> %1, %3
68 ret <16 x i16> %4
69}
70declare <16 x i16> @llvm.x86.avx2.pabs.w(<16 x i16>) nounwind readnone
71
72define <32 x i8> @test_paddb(<32 x i8> %a0, <32 x i8> %a1, <32 x i8> *%a2) {
73; HASWELL-LABEL: test_paddb:
74; HASWELL: # BB#0:
75; HASWELL-NEXT: vpaddb %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
76; HASWELL-NEXT: vpaddb (%rdi), %ymm0, %ymm0 # sched: [5:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +000077; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000078;
79; ZNVER1-LABEL: test_paddb:
80; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +000081; ZNVER1-NEXT: vpaddb %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
82; ZNVER1-NEXT: vpaddb (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
83; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000084 %1 = add <32 x i8> %a0, %a1
85 %2 = load <32 x i8>, <32 x i8> *%a2, align 32
86 %3 = add <32 x i8> %1, %2
87 ret <32 x i8> %3
88}
89
90define <8 x i32> @test_paddd(<8 x i32> %a0, <8 x i32> %a1, <8 x i32> *%a2) {
91; HASWELL-LABEL: test_paddd:
92; HASWELL: # BB#0:
93; HASWELL-NEXT: vpaddd %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
94; HASWELL-NEXT: vpaddd (%rdi), %ymm0, %ymm0 # sched: [5:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +000095; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000096;
97; ZNVER1-LABEL: test_paddd:
98; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +000099; ZNVER1-NEXT: vpaddd %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
100; ZNVER1-NEXT: vpaddd (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
101; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000102 %1 = add <8 x i32> %a0, %a1
103 %2 = load <8 x i32>, <8 x i32> *%a2, align 32
104 %3 = add <8 x i32> %1, %2
105 ret <8 x i32> %3
106}
107
108define <4 x i64> @test_paddq(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) {
109; HASWELL-LABEL: test_paddq:
110; HASWELL: # BB#0:
111; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000112; HASWELL-NEXT: vpaddq (%rdi), %ymm0, %ymm0 # sched: [5:0.50]
113; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000114;
115; ZNVER1-LABEL: test_paddq:
116; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000117; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
118; ZNVER1-NEXT: vpaddq (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
119; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000120 %1 = add <4 x i64> %a0, %a1
121 %2 = load <4 x i64>, <4 x i64> *%a2, align 32
122 %3 = add <4 x i64> %1, %2
123 ret <4 x i64> %3
124}
125
126define <16 x i16> @test_paddw(<16 x i16> %a0, <16 x i16> %a1, <16 x i16> *%a2) {
127; HASWELL-LABEL: test_paddw:
128; HASWELL: # BB#0:
129; HASWELL-NEXT: vpaddw %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
130; HASWELL-NEXT: vpaddw (%rdi), %ymm0, %ymm0 # sched: [5:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000131; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000132;
133; ZNVER1-LABEL: test_paddw:
134; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000135; ZNVER1-NEXT: vpaddw %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
136; ZNVER1-NEXT: vpaddw (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
137; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000138 %1 = add <16 x i16> %a0, %a1
139 %2 = load <16 x i16>, <16 x i16> *%a2, align 32
140 %3 = add <16 x i16> %1, %2
141 ret <16 x i16> %3
142}
143
144define <4 x i64> @test_pand(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) {
145; HASWELL-LABEL: test_pand:
146; HASWELL: # BB#0:
147; HASWELL-NEXT: vpand %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000148; HASWELL-NEXT: vpand (%rdi), %ymm0, %ymm0 # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000149; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000150; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000151;
152; ZNVER1-LABEL: test_pand:
153; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000154; ZNVER1-NEXT: vpand %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
155; ZNVER1-NEXT: vpand (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
156; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
157; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000158 %1 = and <4 x i64> %a0, %a1
159 %2 = load <4 x i64>, <4 x i64> *%a2, align 32
160 %3 = and <4 x i64> %1, %2
161 %4 = add <4 x i64> %3, %a1
162 ret <4 x i64> %4
163}
164
165define <4 x i64> @test_pandn(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) {
166; HASWELL-LABEL: test_pandn:
167; HASWELL: # BB#0:
168; HASWELL-NEXT: vpandn %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000169; HASWELL-NEXT: vpandn (%rdi), %ymm0, %ymm1 # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000170; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000171; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000172;
173; ZNVER1-LABEL: test_pandn:
174; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000175; ZNVER1-NEXT: vpandn %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
176; ZNVER1-NEXT: vpandn (%rdi), %ymm0, %ymm1 # sched: [8:0.50]
177; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
178; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000179 %1 = xor <4 x i64> %a0, <i64 -1, i64 -1, i64 -1, i64 -1>
180 %2 = and <4 x i64> %a1, %1
181 %3 = load <4 x i64>, <4 x i64> *%a2, align 32
182 %4 = xor <4 x i64> %2, <i64 -1, i64 -1, i64 -1, i64 -1>
183 %5 = and <4 x i64> %3, %4
184 %6 = add <4 x i64> %2, %5
185 ret <4 x i64> %6
186}
187
188define <8 x i32> @test_pmulld(<8 x i32> %a0, <8 x i32> %a1, <8 x i32> *%a2) {
189; HASWELL-LABEL: test_pmulld:
190; HASWELL: # BB#0:
191; HASWELL-NEXT: vpmulld %ymm1, %ymm0, %ymm0 # sched: [10:2.00]
192; HASWELL-NEXT: vpmulld (%rdi), %ymm0, %ymm0 # sched: [10:2.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000193; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000194;
195; ZNVER1-LABEL: test_pmulld:
196; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000197; ZNVER1-NEXT: vpmulld %ymm1, %ymm0, %ymm0 # sched: [4:1.00]
198; ZNVER1-NEXT: vpmulld (%rdi), %ymm0, %ymm0 # sched: [11:1.00]
199; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000200 %1 = mul <8 x i32> %a0, %a1
201 %2 = load <8 x i32>, <8 x i32> *%a2, align 32
202 %3 = mul <8 x i32> %1, %2
203 ret <8 x i32> %3
204}
205
206define <16 x i16> @test_pmullw(<16 x i16> %a0, <16 x i16> %a1, <16 x i16> *%a2) {
207; HASWELL-LABEL: test_pmullw:
208; HASWELL: # BB#0:
209; HASWELL-NEXT: vpmullw %ymm1, %ymm0, %ymm0 # sched: [5:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000210; HASWELL-NEXT: vpmullw (%rdi), %ymm0, %ymm0 # sched: [9:1.00]
211; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000212;
213; ZNVER1-LABEL: test_pmullw:
214; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000215; ZNVER1-NEXT: vpmullw %ymm1, %ymm0, %ymm0 # sched: [4:1.00]
216; ZNVER1-NEXT: vpmullw (%rdi), %ymm0, %ymm0 # sched: [11:1.00]
217; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000218 %1 = mul <16 x i16> %a0, %a1
219 %2 = load <16 x i16>, <16 x i16> *%a2, align 32
220 %3 = mul <16 x i16> %1, %2
221 ret <16 x i16> %3
222}
223
224define <4 x i64> @test_por(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) {
225; HASWELL-LABEL: test_por:
226; HASWELL: # BB#0:
227; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000228; HASWELL-NEXT: vpor (%rdi), %ymm0, %ymm0 # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000229; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000230; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000231;
232; ZNVER1-LABEL: test_por:
233; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000234; ZNVER1-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
235; ZNVER1-NEXT: vpor (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
236; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
237; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000238 %1 = or <4 x i64> %a0, %a1
239 %2 = load <4 x i64>, <4 x i64> *%a2, align 32
240 %3 = or <4 x i64> %1, %2
241 %4 = add <4 x i64> %3, %a1
242 ret <4 x i64> %4
243}
244
245define <32 x i8> @test_psubb(<32 x i8> %a0, <32 x i8> %a1, <32 x i8> *%a2) {
246; HASWELL-LABEL: test_psubb:
247; HASWELL: # BB#0:
248; HASWELL-NEXT: vpsubb %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000249; HASWELL-NEXT: vpsubb (%rdi), %ymm0, %ymm0 # sched: [5:0.50]
250; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000251;
252; ZNVER1-LABEL: test_psubb:
253; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000254; ZNVER1-NEXT: vpsubb %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
255; ZNVER1-NEXT: vpsubb (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
256; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000257 %1 = sub <32 x i8> %a0, %a1
258 %2 = load <32 x i8>, <32 x i8> *%a2, align 32
259 %3 = sub <32 x i8> %1, %2
260 ret <32 x i8> %3
261}
262
263define <8 x i32> @test_psubd(<8 x i32> %a0, <8 x i32> %a1, <8 x i32> *%a2) {
264; HASWELL-LABEL: test_psubd:
265; HASWELL: # BB#0:
266; HASWELL-NEXT: vpsubd %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000267; HASWELL-NEXT: vpsubd (%rdi), %ymm0, %ymm0 # sched: [5:0.50]
268; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000269;
270; ZNVER1-LABEL: test_psubd:
271; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000272; ZNVER1-NEXT: vpsubd %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
273; ZNVER1-NEXT: vpsubd (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
274; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000275 %1 = sub <8 x i32> %a0, %a1
276 %2 = load <8 x i32>, <8 x i32> *%a2, align 32
277 %3 = sub <8 x i32> %1, %2
278 ret <8 x i32> %3
279}
280
281define <4 x i64> @test_psubq(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) {
282; HASWELL-LABEL: test_psubq:
283; HASWELL: # BB#0:
284; HASWELL-NEXT: vpsubq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000285; HASWELL-NEXT: vpsubq (%rdi), %ymm0, %ymm0 # sched: [5:0.50]
286; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000287;
288; ZNVER1-LABEL: test_psubq:
289; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000290; ZNVER1-NEXT: vpsubq %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
291; ZNVER1-NEXT: vpsubq (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
292; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000293 %1 = sub <4 x i64> %a0, %a1
294 %2 = load <4 x i64>, <4 x i64> *%a2, align 32
295 %3 = sub <4 x i64> %1, %2
296 ret <4 x i64> %3
297}
298
299define <16 x i16> @test_psubw(<16 x i16> %a0, <16 x i16> %a1, <16 x i16> *%a2) {
300; HASWELL-LABEL: test_psubw:
301; HASWELL: # BB#0:
302; HASWELL-NEXT: vpsubw %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000303; HASWELL-NEXT: vpsubw (%rdi), %ymm0, %ymm0 # sched: [5:0.50]
304; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000305;
306; ZNVER1-LABEL: test_psubw:
307; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000308; ZNVER1-NEXT: vpsubw %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
309; ZNVER1-NEXT: vpsubw (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
310; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000311 %1 = sub <16 x i16> %a0, %a1
312 %2 = load <16 x i16>, <16 x i16> *%a2, align 32
313 %3 = sub <16 x i16> %1, %2
314 ret <16 x i16> %3
315}
316
317define <4 x i64> @test_pxor(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) {
318; HASWELL-LABEL: test_pxor:
319; HASWELL: # BB#0:
320; HASWELL-NEXT: vpxor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000321; HASWELL-NEXT: vpxor (%rdi), %ymm0, %ymm0 # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000322; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000323; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000324;
325; ZNVER1-LABEL: test_pxor:
326; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000327; ZNVER1-NEXT: vpxor %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
328; ZNVER1-NEXT: vpxor (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
329; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
330; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000331 %1 = xor <4 x i64> %a0, %a1
332 %2 = load <4 x i64>, <4 x i64> *%a2, align 32
333 %3 = xor <4 x i64> %1, %2
334 %4 = add <4 x i64> %3, %a1
335 ret <4 x i64> %4
336}
337
338!0 = !{i32 1}