blob: 9114bcf14a638cc4adf43e9a6aa947374b3f4dd5 [file] [log] [blame]
Simon Pilgrim946f08c2017-05-06 13:46:09 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
Simon Pilgrim84846982017-08-01 15:14:35 +00002; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 -mattr=+avx2 | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC
Simon Pilgrim946f08c2017-05-06 13:46:09 +00003; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL
Gadi Haber767d98b2017-08-30 08:08:50 +00004; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE
Simon Pilgrim946f08c2017-05-06 13:46:09 +00005; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1
6
7define <32 x i8> @test_pabsb(<32 x i8> %a0, <32 x i8> *%a1) {
Simon Pilgrim84846982017-08-01 15:14:35 +00008; GENERIC-LABEL: test_pabsb:
9; GENERIC: # BB#0:
10; GENERIC-NEXT: vpabsb %ymm0, %ymm0 # sched: [3:1.00]
11; GENERIC-NEXT: vpabsb (%rdi), %ymm1 # sched: [7:1.00]
12; GENERIC-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:1.00]
13; GENERIC-NEXT: retq # sched: [1:1.00]
14;
Simon Pilgrim946f08c2017-05-06 13:46:09 +000015; HASWELL-LABEL: test_pabsb:
16; HASWELL: # BB#0:
17; HASWELL-NEXT: vpabsb %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +000018; HASWELL-NEXT: vpabsb (%rdi), %ymm1 # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000019; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Gadi Haberd76f7b82017-08-28 10:04:16 +000020; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000021;
Gadi Haber767d98b2017-08-30 08:08:50 +000022; SKYLAKE-LABEL: test_pabsb:
23; SKYLAKE: # BB#0:
24; SKYLAKE-NEXT: vpabsb %ymm0, %ymm0 # sched: [1:0.50]
25; SKYLAKE-NEXT: vpabsb (%rdi), %ymm1 # sched: [1:0.50]
26; SKYLAKE-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
27; SKYLAKE-NEXT: retq # sched: [2:1.00]
28;
Simon Pilgrim946f08c2017-05-06 13:46:09 +000029; ZNVER1-LABEL: test_pabsb:
30; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +000031; ZNVER1-NEXT: vpabsb (%rdi), %ymm1 # sched: [8:0.50]
32; ZNVER1-NEXT: vpabsb %ymm0, %ymm0 # sched: [1:0.25]
33; ZNVER1-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +000034; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000035 %1 = call <32 x i8> @llvm.x86.avx2.pabs.b(<32 x i8> %a0)
36 %2 = load <32 x i8>, <32 x i8> *%a1, align 32
37 %3 = call <32 x i8> @llvm.x86.avx2.pabs.b(<32 x i8> %2)
38 %4 = or <32 x i8> %1, %3
39 ret <32 x i8> %4
40}
41declare <32 x i8> @llvm.x86.avx2.pabs.b(<32 x i8>) nounwind readnone
42
43define <8 x i32> @test_pabsd(<8 x i32> %a0, <8 x i32> *%a1) {
Simon Pilgrim84846982017-08-01 15:14:35 +000044; GENERIC-LABEL: test_pabsd:
45; GENERIC: # BB#0:
46; GENERIC-NEXT: vpabsd %ymm0, %ymm0 # sched: [3:1.00]
47; GENERIC-NEXT: vpabsd (%rdi), %ymm1 # sched: [7:1.00]
48; GENERIC-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:1.00]
49; GENERIC-NEXT: retq # sched: [1:1.00]
50;
Simon Pilgrim946f08c2017-05-06 13:46:09 +000051; HASWELL-LABEL: test_pabsd:
52; HASWELL: # BB#0:
53; HASWELL-NEXT: vpabsd %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +000054; HASWELL-NEXT: vpabsd (%rdi), %ymm1 # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000055; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Gadi Haberd76f7b82017-08-28 10:04:16 +000056; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000057;
Gadi Haber767d98b2017-08-30 08:08:50 +000058; SKYLAKE-LABEL: test_pabsd:
59; SKYLAKE: # BB#0:
60; SKYLAKE-NEXT: vpabsd %ymm0, %ymm0 # sched: [1:0.50]
61; SKYLAKE-NEXT: vpabsd (%rdi), %ymm1 # sched: [1:0.50]
62; SKYLAKE-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
63; SKYLAKE-NEXT: retq # sched: [2:1.00]
64;
Simon Pilgrim946f08c2017-05-06 13:46:09 +000065; ZNVER1-LABEL: test_pabsd:
66; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +000067; ZNVER1-NEXT: vpabsd (%rdi), %ymm1 # sched: [8:0.50]
68; ZNVER1-NEXT: vpabsd %ymm0, %ymm0 # sched: [1:0.25]
69; ZNVER1-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +000070; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000071 %1 = call <8 x i32> @llvm.x86.avx2.pabs.d(<8 x i32> %a0)
72 %2 = load <8 x i32>, <8 x i32> *%a1, align 32
73 %3 = call <8 x i32> @llvm.x86.avx2.pabs.d(<8 x i32> %2)
74 %4 = or <8 x i32> %1, %3
75 ret <8 x i32> %4
76}
77declare <8 x i32> @llvm.x86.avx2.pabs.d(<8 x i32>) nounwind readnone
78
79define <16 x i16> @test_pabsw(<16 x i16> %a0, <16 x i16> *%a1) {
Simon Pilgrim84846982017-08-01 15:14:35 +000080; GENERIC-LABEL: test_pabsw:
81; GENERIC: # BB#0:
82; GENERIC-NEXT: vpabsw %ymm0, %ymm0 # sched: [3:1.00]
83; GENERIC-NEXT: vpabsw (%rdi), %ymm1 # sched: [7:1.00]
84; GENERIC-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:1.00]
85; GENERIC-NEXT: retq # sched: [1:1.00]
86;
Simon Pilgrim946f08c2017-05-06 13:46:09 +000087; HASWELL-LABEL: test_pabsw:
88; HASWELL: # BB#0:
89; HASWELL-NEXT: vpabsw %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +000090; HASWELL-NEXT: vpabsw (%rdi), %ymm1 # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000091; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Gadi Haberd76f7b82017-08-28 10:04:16 +000092; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +000093;
Gadi Haber767d98b2017-08-30 08:08:50 +000094; SKYLAKE-LABEL: test_pabsw:
95; SKYLAKE: # BB#0:
96; SKYLAKE-NEXT: vpabsw %ymm0, %ymm0 # sched: [1:0.50]
97; SKYLAKE-NEXT: vpabsw (%rdi), %ymm1 # sched: [1:0.50]
98; SKYLAKE-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
99; SKYLAKE-NEXT: retq # sched: [2:1.00]
100;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000101; ZNVER1-LABEL: test_pabsw:
102; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000103; ZNVER1-NEXT: vpabsw (%rdi), %ymm1 # sched: [8:0.50]
104; ZNVER1-NEXT: vpabsw %ymm0, %ymm0 # sched: [1:0.25]
105; ZNVER1-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000106; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000107 %1 = call <16 x i16> @llvm.x86.avx2.pabs.w(<16 x i16> %a0)
108 %2 = load <16 x i16>, <16 x i16> *%a1, align 32
109 %3 = call <16 x i16> @llvm.x86.avx2.pabs.w(<16 x i16> %2)
110 %4 = or <16 x i16> %1, %3
111 ret <16 x i16> %4
112}
113declare <16 x i16> @llvm.x86.avx2.pabs.w(<16 x i16>) nounwind readnone
114
115define <32 x i8> @test_paddb(<32 x i8> %a0, <32 x i8> %a1, <32 x i8> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000116; GENERIC-LABEL: test_paddb:
117; GENERIC: # BB#0:
118; GENERIC-NEXT: vpaddb %ymm1, %ymm0, %ymm0 # sched: [3:1.00]
119; GENERIC-NEXT: vpaddb (%rdi), %ymm0, %ymm0 # sched: [7:1.00]
120; GENERIC-NEXT: retq # sched: [1:1.00]
121;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000122; HASWELL-LABEL: test_paddb:
123; HASWELL: # BB#0:
124; HASWELL-NEXT: vpaddb %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000125; HASWELL-NEXT: vpaddb (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
126; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000127;
Gadi Haber767d98b2017-08-30 08:08:50 +0000128; SKYLAKE-LABEL: test_paddb:
129; SKYLAKE: # BB#0:
130; SKYLAKE-NEXT: vpaddb %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
131; SKYLAKE-NEXT: vpaddb (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
132; SKYLAKE-NEXT: retq # sched: [2:1.00]
133;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000134; ZNVER1-LABEL: test_paddb:
135; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000136; ZNVER1-NEXT: vpaddb %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
137; ZNVER1-NEXT: vpaddb (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000138; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000139 %1 = add <32 x i8> %a0, %a1
140 %2 = load <32 x i8>, <32 x i8> *%a2, align 32
141 %3 = add <32 x i8> %1, %2
142 ret <32 x i8> %3
143}
144
145define <8 x i32> @test_paddd(<8 x i32> %a0, <8 x i32> %a1, <8 x i32> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000146; GENERIC-LABEL: test_paddd:
147; GENERIC: # BB#0:
148; GENERIC-NEXT: vpaddd %ymm1, %ymm0, %ymm0 # sched: [3:1.00]
149; GENERIC-NEXT: vpaddd (%rdi), %ymm0, %ymm0 # sched: [7:1.00]
150; GENERIC-NEXT: retq # sched: [1:1.00]
151;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000152; HASWELL-LABEL: test_paddd:
153; HASWELL: # BB#0:
154; HASWELL-NEXT: vpaddd %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000155; HASWELL-NEXT: vpaddd (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
156; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000157;
Gadi Haber767d98b2017-08-30 08:08:50 +0000158; SKYLAKE-LABEL: test_paddd:
159; SKYLAKE: # BB#0:
160; SKYLAKE-NEXT: vpaddd %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
161; SKYLAKE-NEXT: vpaddd (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
162; SKYLAKE-NEXT: retq # sched: [2:1.00]
163;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000164; ZNVER1-LABEL: test_paddd:
165; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000166; ZNVER1-NEXT: vpaddd %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
167; ZNVER1-NEXT: vpaddd (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000168; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000169 %1 = add <8 x i32> %a0, %a1
170 %2 = load <8 x i32>, <8 x i32> *%a2, align 32
171 %3 = add <8 x i32> %1, %2
172 ret <8 x i32> %3
173}
174
175define <4 x i64> @test_paddq(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000176; GENERIC-LABEL: test_paddq:
177; GENERIC: # BB#0:
178; GENERIC-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [3:1.00]
179; GENERIC-NEXT: vpaddq (%rdi), %ymm0, %ymm0 # sched: [7:1.00]
180; GENERIC-NEXT: retq # sched: [1:1.00]
181;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000182; HASWELL-LABEL: test_paddq:
183; HASWELL: # BB#0:
184; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000185; HASWELL-NEXT: vpaddq (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
186; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000187;
Gadi Haber767d98b2017-08-30 08:08:50 +0000188; SKYLAKE-LABEL: test_paddq:
189; SKYLAKE: # BB#0:
190; SKYLAKE-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
191; SKYLAKE-NEXT: vpaddq (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
192; SKYLAKE-NEXT: retq # sched: [2:1.00]
193;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000194; ZNVER1-LABEL: test_paddq:
195; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000196; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
197; ZNVER1-NEXT: vpaddq (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000198; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000199 %1 = add <4 x i64> %a0, %a1
200 %2 = load <4 x i64>, <4 x i64> *%a2, align 32
201 %3 = add <4 x i64> %1, %2
202 ret <4 x i64> %3
203}
204
205define <16 x i16> @test_paddw(<16 x i16> %a0, <16 x i16> %a1, <16 x i16> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000206; GENERIC-LABEL: test_paddw:
207; GENERIC: # BB#0:
208; GENERIC-NEXT: vpaddw %ymm1, %ymm0, %ymm0 # sched: [3:1.00]
209; GENERIC-NEXT: vpaddw (%rdi), %ymm0, %ymm0 # sched: [7:1.00]
210; GENERIC-NEXT: retq # sched: [1:1.00]
211;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000212; HASWELL-LABEL: test_paddw:
213; HASWELL: # BB#0:
214; HASWELL-NEXT: vpaddw %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000215; HASWELL-NEXT: vpaddw (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
216; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000217;
Gadi Haber767d98b2017-08-30 08:08:50 +0000218; SKYLAKE-LABEL: test_paddw:
219; SKYLAKE: # BB#0:
220; SKYLAKE-NEXT: vpaddw %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
221; SKYLAKE-NEXT: vpaddw (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
222; SKYLAKE-NEXT: retq # sched: [2:1.00]
223;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000224; ZNVER1-LABEL: test_paddw:
225; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000226; ZNVER1-NEXT: vpaddw %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
227; ZNVER1-NEXT: vpaddw (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000228; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000229 %1 = add <16 x i16> %a0, %a1
230 %2 = load <16 x i16>, <16 x i16> *%a2, align 32
231 %3 = add <16 x i16> %1, %2
232 ret <16 x i16> %3
233}
234
235define <4 x i64> @test_pand(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000236; GENERIC-LABEL: test_pand:
237; GENERIC: # BB#0:
238; GENERIC-NEXT: vpand %ymm1, %ymm0, %ymm0 # sched: [1:1.00]
239; GENERIC-NEXT: vpand (%rdi), %ymm0, %ymm0 # sched: [5:1.00]
240; GENERIC-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [3:1.00]
241; GENERIC-NEXT: retq # sched: [1:1.00]
242;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000243; HASWELL-LABEL: test_pand:
244; HASWELL: # BB#0:
245; HASWELL-NEXT: vpand %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000246; HASWELL-NEXT: vpand (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000247; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000248; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000249;
Gadi Haber767d98b2017-08-30 08:08:50 +0000250; SKYLAKE-LABEL: test_pand:
251; SKYLAKE: # BB#0:
252; SKYLAKE-NEXT: vpand %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
253; SKYLAKE-NEXT: vpand (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
254; SKYLAKE-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
255; SKYLAKE-NEXT: retq # sched: [2:1.00]
256;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000257; ZNVER1-LABEL: test_pand:
258; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000259; ZNVER1-NEXT: vpand %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
260; ZNVER1-NEXT: vpand (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
261; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000262; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000263 %1 = and <4 x i64> %a0, %a1
264 %2 = load <4 x i64>, <4 x i64> *%a2, align 32
265 %3 = and <4 x i64> %1, %2
266 %4 = add <4 x i64> %3, %a1
267 ret <4 x i64> %4
268}
269
270define <4 x i64> @test_pandn(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000271; GENERIC-LABEL: test_pandn:
272; GENERIC: # BB#0:
273; GENERIC-NEXT: vpandn %ymm1, %ymm0, %ymm0 # sched: [1:1.00]
274; GENERIC-NEXT: vpandn (%rdi), %ymm0, %ymm1 # sched: [5:1.00]
275; GENERIC-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [3:1.00]
276; GENERIC-NEXT: retq # sched: [1:1.00]
277;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000278; HASWELL-LABEL: test_pandn:
279; HASWELL: # BB#0:
280; HASWELL-NEXT: vpandn %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000281; HASWELL-NEXT: vpandn (%rdi), %ymm0, %ymm1 # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000282; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000283; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000284;
Gadi Haber767d98b2017-08-30 08:08:50 +0000285; SKYLAKE-LABEL: test_pandn:
286; SKYLAKE: # BB#0:
287; SKYLAKE-NEXT: vpandn %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
288; SKYLAKE-NEXT: vpandn (%rdi), %ymm0, %ymm1 # sched: [1:0.50]
289; SKYLAKE-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
290; SKYLAKE-NEXT: retq # sched: [2:1.00]
291;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000292; ZNVER1-LABEL: test_pandn:
293; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000294; ZNVER1-NEXT: vpandn %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
295; ZNVER1-NEXT: vpandn (%rdi), %ymm0, %ymm1 # sched: [8:0.50]
296; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000297; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000298 %1 = xor <4 x i64> %a0, <i64 -1, i64 -1, i64 -1, i64 -1>
299 %2 = and <4 x i64> %a1, %1
300 %3 = load <4 x i64>, <4 x i64> *%a2, align 32
301 %4 = xor <4 x i64> %2, <i64 -1, i64 -1, i64 -1, i64 -1>
302 %5 = and <4 x i64> %3, %4
303 %6 = add <4 x i64> %2, %5
304 ret <4 x i64> %6
305}
306
307define <8 x i32> @test_pmulld(<8 x i32> %a0, <8 x i32> %a1, <8 x i32> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000308; GENERIC-LABEL: test_pmulld:
309; GENERIC: # BB#0:
310; GENERIC-NEXT: vpmulld %ymm1, %ymm0, %ymm0 # sched: [5:1.00]
311; GENERIC-NEXT: vpmulld (%rdi), %ymm0, %ymm0 # sched: [9:1.00]
312; GENERIC-NEXT: retq # sched: [1:1.00]
313;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000314; HASWELL-LABEL: test_pmulld:
315; HASWELL: # BB#0:
316; HASWELL-NEXT: vpmulld %ymm1, %ymm0, %ymm0 # sched: [10:2.00]
317; HASWELL-NEXT: vpmulld (%rdi), %ymm0, %ymm0 # sched: [10:2.00]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000318; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000319;
Gadi Haber767d98b2017-08-30 08:08:50 +0000320; SKYLAKE-LABEL: test_pmulld:
321; SKYLAKE: # BB#0:
322; SKYLAKE-NEXT: vpmulld %ymm1, %ymm0, %ymm0 # sched: [10:2.00]
323; SKYLAKE-NEXT: vpmulld (%rdi), %ymm0, %ymm0 # sched: [10:2.00]
324; SKYLAKE-NEXT: retq # sched: [2:1.00]
325;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000326; ZNVER1-LABEL: test_pmulld:
327; ZNVER1: # BB#0:
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000328; ZNVER1-NEXT: vpmulld %ymm1, %ymm0, %ymm0 # sched: [5:2.00]
329; ZNVER1-NEXT: vpmulld (%rdi), %ymm0, %ymm0 # sched: [12:2.00]
330; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000331 %1 = mul <8 x i32> %a0, %a1
332 %2 = load <8 x i32>, <8 x i32> *%a2, align 32
333 %3 = mul <8 x i32> %1, %2
334 ret <8 x i32> %3
335}
336
337define <16 x i16> @test_pmullw(<16 x i16> %a0, <16 x i16> %a1, <16 x i16> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000338; GENERIC-LABEL: test_pmullw:
339; GENERIC: # BB#0:
340; GENERIC-NEXT: vpmullw %ymm1, %ymm0, %ymm0 # sched: [5:1.00]
341; GENERIC-NEXT: vpmullw (%rdi), %ymm0, %ymm0 # sched: [9:1.00]
342; GENERIC-NEXT: retq # sched: [1:1.00]
343;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000344; HASWELL-LABEL: test_pmullw:
345; HASWELL: # BB#0:
346; HASWELL-NEXT: vpmullw %ymm1, %ymm0, %ymm0 # sched: [5:1.00]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000347; HASWELL-NEXT: vpmullw (%rdi), %ymm0, %ymm0 # sched: [5:1.00]
348; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000349;
Gadi Haber767d98b2017-08-30 08:08:50 +0000350; SKYLAKE-LABEL: test_pmullw:
351; SKYLAKE: # BB#0:
352; SKYLAKE-NEXT: vpmullw %ymm1, %ymm0, %ymm0 # sched: [5:1.00]
353; SKYLAKE-NEXT: vpmullw (%rdi), %ymm0, %ymm0 # sched: [5:1.00]
354; SKYLAKE-NEXT: retq # sched: [2:1.00]
355;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000356; ZNVER1-LABEL: test_pmullw:
357; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000358; ZNVER1-NEXT: vpmullw %ymm1, %ymm0, %ymm0 # sched: [4:1.00]
359; ZNVER1-NEXT: vpmullw (%rdi), %ymm0, %ymm0 # sched: [11:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000360; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000361 %1 = mul <16 x i16> %a0, %a1
362 %2 = load <16 x i16>, <16 x i16> *%a2, align 32
363 %3 = mul <16 x i16> %1, %2
364 ret <16 x i16> %3
365}
366
367define <4 x i64> @test_por(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000368; GENERIC-LABEL: test_por:
369; GENERIC: # BB#0:
370; GENERIC-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:1.00]
371; GENERIC-NEXT: vpor (%rdi), %ymm0, %ymm0 # sched: [5:1.00]
372; GENERIC-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [3:1.00]
373; GENERIC-NEXT: retq # sched: [1:1.00]
374;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000375; HASWELL-LABEL: test_por:
376; HASWELL: # BB#0:
377; HASWELL-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000378; HASWELL-NEXT: vpor (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000379; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000380; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000381;
Gadi Haber767d98b2017-08-30 08:08:50 +0000382; SKYLAKE-LABEL: test_por:
383; SKYLAKE: # BB#0:
384; SKYLAKE-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
385; SKYLAKE-NEXT: vpor (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
386; SKYLAKE-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
387; SKYLAKE-NEXT: retq # sched: [2:1.00]
388;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000389; ZNVER1-LABEL: test_por:
390; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000391; ZNVER1-NEXT: vpor %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
392; ZNVER1-NEXT: vpor (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
393; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000394; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000395 %1 = or <4 x i64> %a0, %a1
396 %2 = load <4 x i64>, <4 x i64> *%a2, align 32
397 %3 = or <4 x i64> %1, %2
398 %4 = add <4 x i64> %3, %a1
399 ret <4 x i64> %4
400}
401
402define <32 x i8> @test_psubb(<32 x i8> %a0, <32 x i8> %a1, <32 x i8> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000403; GENERIC-LABEL: test_psubb:
404; GENERIC: # BB#0:
405; GENERIC-NEXT: vpsubb %ymm1, %ymm0, %ymm0 # sched: [3:1.00]
406; GENERIC-NEXT: vpsubb (%rdi), %ymm0, %ymm0 # sched: [7:1.00]
407; GENERIC-NEXT: retq # sched: [1:1.00]
408;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000409; HASWELL-LABEL: test_psubb:
410; HASWELL: # BB#0:
411; HASWELL-NEXT: vpsubb %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000412; HASWELL-NEXT: vpsubb (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
413; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000414;
Gadi Haber767d98b2017-08-30 08:08:50 +0000415; SKYLAKE-LABEL: test_psubb:
416; SKYLAKE: # BB#0:
417; SKYLAKE-NEXT: vpsubb %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
418; SKYLAKE-NEXT: vpsubb (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
419; SKYLAKE-NEXT: retq # sched: [2:1.00]
420;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000421; ZNVER1-LABEL: test_psubb:
422; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000423; ZNVER1-NEXT: vpsubb %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
424; ZNVER1-NEXT: vpsubb (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000425; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000426 %1 = sub <32 x i8> %a0, %a1
427 %2 = load <32 x i8>, <32 x i8> *%a2, align 32
428 %3 = sub <32 x i8> %1, %2
429 ret <32 x i8> %3
430}
431
432define <8 x i32> @test_psubd(<8 x i32> %a0, <8 x i32> %a1, <8 x i32> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000433; GENERIC-LABEL: test_psubd:
434; GENERIC: # BB#0:
435; GENERIC-NEXT: vpsubd %ymm1, %ymm0, %ymm0 # sched: [3:1.00]
436; GENERIC-NEXT: vpsubd (%rdi), %ymm0, %ymm0 # sched: [7:1.00]
437; GENERIC-NEXT: retq # sched: [1:1.00]
438;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000439; HASWELL-LABEL: test_psubd:
440; HASWELL: # BB#0:
441; HASWELL-NEXT: vpsubd %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000442; HASWELL-NEXT: vpsubd (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
443; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000444;
Gadi Haber767d98b2017-08-30 08:08:50 +0000445; SKYLAKE-LABEL: test_psubd:
446; SKYLAKE: # BB#0:
447; SKYLAKE-NEXT: vpsubd %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
448; SKYLAKE-NEXT: vpsubd (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
449; SKYLAKE-NEXT: retq # sched: [2:1.00]
450;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000451; ZNVER1-LABEL: test_psubd:
452; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000453; ZNVER1-NEXT: vpsubd %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
454; ZNVER1-NEXT: vpsubd (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000455; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000456 %1 = sub <8 x i32> %a0, %a1
457 %2 = load <8 x i32>, <8 x i32> *%a2, align 32
458 %3 = sub <8 x i32> %1, %2
459 ret <8 x i32> %3
460}
461
462define <4 x i64> @test_psubq(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000463; GENERIC-LABEL: test_psubq:
464; GENERIC: # BB#0:
465; GENERIC-NEXT: vpsubq %ymm1, %ymm0, %ymm0 # sched: [3:1.00]
466; GENERIC-NEXT: vpsubq (%rdi), %ymm0, %ymm0 # sched: [7:1.00]
467; GENERIC-NEXT: retq # sched: [1:1.00]
468;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000469; HASWELL-LABEL: test_psubq:
470; HASWELL: # BB#0:
471; HASWELL-NEXT: vpsubq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000472; HASWELL-NEXT: vpsubq (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
473; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000474;
Gadi Haber767d98b2017-08-30 08:08:50 +0000475; SKYLAKE-LABEL: test_psubq:
476; SKYLAKE: # BB#0:
477; SKYLAKE-NEXT: vpsubq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
478; SKYLAKE-NEXT: vpsubq (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
479; SKYLAKE-NEXT: retq # sched: [2:1.00]
480;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000481; ZNVER1-LABEL: test_psubq:
482; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000483; ZNVER1-NEXT: vpsubq %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
484; ZNVER1-NEXT: vpsubq (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000485; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000486 %1 = sub <4 x i64> %a0, %a1
487 %2 = load <4 x i64>, <4 x i64> *%a2, align 32
488 %3 = sub <4 x i64> %1, %2
489 ret <4 x i64> %3
490}
491
492define <16 x i16> @test_psubw(<16 x i16> %a0, <16 x i16> %a1, <16 x i16> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000493; GENERIC-LABEL: test_psubw:
494; GENERIC: # BB#0:
495; GENERIC-NEXT: vpsubw %ymm1, %ymm0, %ymm0 # sched: [3:1.00]
496; GENERIC-NEXT: vpsubw (%rdi), %ymm0, %ymm0 # sched: [7:1.00]
497; GENERIC-NEXT: retq # sched: [1:1.00]
498;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000499; HASWELL-LABEL: test_psubw:
500; HASWELL: # BB#0:
501; HASWELL-NEXT: vpsubw %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000502; HASWELL-NEXT: vpsubw (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
503; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000504;
Gadi Haber767d98b2017-08-30 08:08:50 +0000505; SKYLAKE-LABEL: test_psubw:
506; SKYLAKE: # BB#0:
507; SKYLAKE-NEXT: vpsubw %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
508; SKYLAKE-NEXT: vpsubw (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
509; SKYLAKE-NEXT: retq # sched: [2:1.00]
510;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000511; ZNVER1-LABEL: test_psubw:
512; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000513; ZNVER1-NEXT: vpsubw %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
514; ZNVER1-NEXT: vpsubw (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000515; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000516 %1 = sub <16 x i16> %a0, %a1
517 %2 = load <16 x i16>, <16 x i16> *%a2, align 32
518 %3 = sub <16 x i16> %1, %2
519 ret <16 x i16> %3
520}
521
522define <4 x i64> @test_pxor(<4 x i64> %a0, <4 x i64> %a1, <4 x i64> *%a2) {
Simon Pilgrim84846982017-08-01 15:14:35 +0000523; GENERIC-LABEL: test_pxor:
524; GENERIC: # BB#0:
525; GENERIC-NEXT: vpxor %ymm1, %ymm0, %ymm0 # sched: [1:1.00]
526; GENERIC-NEXT: vpxor (%rdi), %ymm0, %ymm0 # sched: [5:1.00]
527; GENERIC-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [3:1.00]
528; GENERIC-NEXT: retq # sched: [1:1.00]
529;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000530; HASWELL-LABEL: test_pxor:
531; HASWELL: # BB#0:
532; HASWELL-NEXT: vpxor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000533; HASWELL-NEXT: vpxor (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000534; HASWELL-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000535; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000536;
Gadi Haber767d98b2017-08-30 08:08:50 +0000537; SKYLAKE-LABEL: test_pxor:
538; SKYLAKE: # BB#0:
539; SKYLAKE-NEXT: vpxor %ymm1, %ymm0, %ymm0 # sched: [1:0.33]
540; SKYLAKE-NEXT: vpxor (%rdi), %ymm0, %ymm0 # sched: [1:0.50]
541; SKYLAKE-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.50]
542; SKYLAKE-NEXT: retq # sched: [2:1.00]
543;
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000544; ZNVER1-LABEL: test_pxor:
545; ZNVER1: # BB#0:
Craig Topper106b5b62017-07-19 02:45:14 +0000546; ZNVER1-NEXT: vpxor %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
547; ZNVER1-NEXT: vpxor (%rdi), %ymm0, %ymm0 # sched: [8:0.50]
548; ZNVER1-NEXT: vpaddq %ymm1, %ymm0, %ymm0 # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000549; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim946f08c2017-05-06 13:46:09 +0000550 %1 = xor <4 x i64> %a0, %a1
551 %2 = load <4 x i64>, <4 x i64> *%a2, align 32
552 %3 = xor <4 x i64> %1, %2
553 %4 = add <4 x i64> %3, %a1
554 ret <4 x i64> %4
555}
556
557!0 = !{i32 1}