blob: 681ab92f1855d9df05e9fa30c2111d7f657689c2 [file] [log] [blame]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
Simon Pilgrim9eb08692017-08-18 15:08:30 +00002; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 -mattr=+sse4.2,+pclmul | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC
Simon Pilgrim7d71ed52017-04-23 21:00:25 +00003; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=slm | FileCheck %s --check-prefix=CHECK --check-prefix=SLM
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
6; 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 +00007; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00008; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKX
Simon Pilgrim7d71ed52017-04-23 21:00:25 +00009; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2
Craig Topper106b5b62017-07-19 02:45:14 +000010; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000011
12define i32 @crc32_32_8(i32 %a0, i8 %a1, i8 *%a2) {
13; GENERIC-LABEL: crc32_32_8:
14; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +000015; GENERIC-NEXT: crc32b %sil, %edi # sched: [3:1.00]
16; GENERIC-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
17; GENERIC-NEXT: movl %edi, %eax # sched: [1:0.33]
18; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000019;
20; SLM-LABEL: crc32_32_8:
21; SLM: # BB#0:
22; SLM-NEXT: crc32b %sil, %edi # sched: [3:1.00]
23; SLM-NEXT: crc32b (%rdx), %edi # sched: [6:1.00]
24; SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
25; SLM-NEXT: retq # sched: [4:1.00]
26;
27; SANDY-LABEL: crc32_32_8:
28; SANDY: # BB#0:
29; SANDY-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +000030; SANDY-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000031; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +000032; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000033;
34; HASWELL-LABEL: crc32_32_8:
35; HASWELL: # BB#0:
36; HASWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
37; HASWELL-NEXT: crc32b (%rdx), %edi # sched: [7:1.00]
38; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +000039; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000040;
Gadi Haber767d98b2017-08-30 08:08:50 +000041; SKYLAKE-LABEL: crc32_32_8:
42; SKYLAKE: # BB#0:
43; SKYLAKE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +000044; SKYLAKE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +000045; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25]
46; SKYLAKE-NEXT: retq # sched: [2:1.00]
47;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +000048; SKX-LABEL: crc32_32_8:
49; SKX: # BB#0:
50; SKX-NEXT: crc32b %sil, %edi # sched: [3:1.00]
51; SKX-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
52; SKX-NEXT: movl %edi, %eax # sched: [1:0.25]
53; SKX-NEXT: retq # sched: [2:1.00]
54;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000055; BTVER2-LABEL: crc32_32_8:
56; BTVER2: # BB#0:
57; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:1.00]
58; BTVER2-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
59; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.17]
60; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +000061;
62; ZNVER1-LABEL: crc32_32_8:
63; ZNVER1: # BB#0:
64; ZNVER1-NEXT: crc32b %sil, %edi # sched: [3:1.00]
65; ZNVER1-NEXT: crc32b (%rdx), %edi # sched: [10:1.00]
66; ZNVER1-NEXT: movl %edi, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +000067; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000068 %1 = call i32 @llvm.x86.sse42.crc32.32.8(i32 %a0, i8 %a1)
69 %2 = load i8, i8 *%a2
70 %3 = call i32 @llvm.x86.sse42.crc32.32.8(i32 %1, i8 %2)
71 ret i32 %3
72}
73declare i32 @llvm.x86.sse42.crc32.32.8(i32, i8) nounwind
74
75define i32 @crc32_32_16(i32 %a0, i16 %a1, i16 *%a2) {
76; GENERIC-LABEL: crc32_32_16:
77; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +000078; GENERIC-NEXT: crc32w %si, %edi # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +000079; GENERIC-NEXT: crc32w (%rdx), %edi # sched: [7:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +000080; GENERIC-NEXT: movl %edi, %eax # sched: [1:0.33]
81; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000082;
83; SLM-LABEL: crc32_32_16:
84; SLM: # BB#0:
85; SLM-NEXT: crc32w %si, %edi # sched: [3:1.00]
86; SLM-NEXT: crc32w (%rdx), %edi # sched: [6:1.00]
87; SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
88; SLM-NEXT: retq # sched: [4:1.00]
89;
90; SANDY-LABEL: crc32_32_16:
91; SANDY: # BB#0:
92; SANDY-NEXT: crc32w %si, %edi # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +000093; SANDY-NEXT: crc32w (%rdx), %edi # sched: [7:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000094; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +000095; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000096;
97; HASWELL-LABEL: crc32_32_16:
98; HASWELL: # BB#0:
99; HASWELL-NEXT: crc32w %si, %edi # sched: [3:1.00]
100; HASWELL-NEXT: crc32w (%rdx), %edi # sched: [7:1.00]
101; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000102; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000103;
Gadi Haber767d98b2017-08-30 08:08:50 +0000104; SKYLAKE-LABEL: crc32_32_16:
105; SKYLAKE: # BB#0:
106; SKYLAKE-NEXT: crc32w %si, %edi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000107; SKYLAKE-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000108; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25]
109; SKYLAKE-NEXT: retq # sched: [2:1.00]
110;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000111; SKX-LABEL: crc32_32_16:
112; SKX: # BB#0:
113; SKX-NEXT: crc32w %si, %edi # sched: [3:1.00]
114; SKX-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
115; SKX-NEXT: movl %edi, %eax # sched: [1:0.25]
116; SKX-NEXT: retq # sched: [2:1.00]
117;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000118; BTVER2-LABEL: crc32_32_16:
119; BTVER2: # BB#0:
120; BTVER2-NEXT: crc32w %si, %edi # sched: [3:1.00]
121; BTVER2-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
122; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.17]
123; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000124;
125; ZNVER1-LABEL: crc32_32_16:
126; ZNVER1: # BB#0:
127; ZNVER1-NEXT: crc32w %si, %edi # sched: [3:1.00]
128; ZNVER1-NEXT: crc32w (%rdx), %edi # sched: [10:1.00]
129; ZNVER1-NEXT: movl %edi, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000130; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000131 %1 = call i32 @llvm.x86.sse42.crc32.32.16(i32 %a0, i16 %a1)
132 %2 = load i16, i16 *%a2
133 %3 = call i32 @llvm.x86.sse42.crc32.32.16(i32 %1, i16 %2)
134 ret i32 %3
135}
136declare i32 @llvm.x86.sse42.crc32.32.16(i32, i16) nounwind
137
138define i32 @crc32_32_32(i32 %a0, i32 %a1, i32 *%a2) {
139; GENERIC-LABEL: crc32_32_32:
140; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000141; GENERIC-NEXT: crc32l %esi, %edi # sched: [3:1.00]
142; GENERIC-NEXT: crc32l (%rdx), %edi # sched: [7:1.00]
143; GENERIC-NEXT: movl %edi, %eax # sched: [1:0.33]
144; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000145;
146; SLM-LABEL: crc32_32_32:
147; SLM: # BB#0:
148; SLM-NEXT: crc32l %esi, %edi # sched: [3:1.00]
149; SLM-NEXT: crc32l (%rdx), %edi # sched: [6:1.00]
150; SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
151; SLM-NEXT: retq # sched: [4:1.00]
152;
153; SANDY-LABEL: crc32_32_32:
154; SANDY: # BB#0:
155; SANDY-NEXT: crc32l %esi, %edi # sched: [3:1.00]
156; SANDY-NEXT: crc32l (%rdx), %edi # sched: [7:1.00]
157; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000158; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000159;
160; HASWELL-LABEL: crc32_32_32:
161; HASWELL: # BB#0:
162; HASWELL-NEXT: crc32l %esi, %edi # sched: [3:1.00]
163; HASWELL-NEXT: crc32l (%rdx), %edi # sched: [7:1.00]
164; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000165; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000166;
Gadi Haber767d98b2017-08-30 08:08:50 +0000167; SKYLAKE-LABEL: crc32_32_32:
168; SKYLAKE: # BB#0:
169; SKYLAKE-NEXT: crc32l %esi, %edi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000170; SKYLAKE-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000171; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25]
172; SKYLAKE-NEXT: retq # sched: [2:1.00]
173;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000174; SKX-LABEL: crc32_32_32:
175; SKX: # BB#0:
176; SKX-NEXT: crc32l %esi, %edi # sched: [3:1.00]
177; SKX-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
178; SKX-NEXT: movl %edi, %eax # sched: [1:0.25]
179; SKX-NEXT: retq # sched: [2:1.00]
180;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000181; BTVER2-LABEL: crc32_32_32:
182; BTVER2: # BB#0:
183; BTVER2-NEXT: crc32l %esi, %edi # sched: [3:1.00]
184; BTVER2-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
185; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.17]
186; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000187;
188; ZNVER1-LABEL: crc32_32_32:
189; ZNVER1: # BB#0:
190; ZNVER1-NEXT: crc32l %esi, %edi # sched: [3:1.00]
191; ZNVER1-NEXT: crc32l (%rdx), %edi # sched: [10:1.00]
192; ZNVER1-NEXT: movl %edi, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000193; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000194 %1 = call i32 @llvm.x86.sse42.crc32.32.32(i32 %a0, i32 %a1)
195 %2 = load i32, i32 *%a2
196 %3 = call i32 @llvm.x86.sse42.crc32.32.32(i32 %1, i32 %2)
197 ret i32 %3
198}
199declare i32 @llvm.x86.sse42.crc32.32.32(i32, i32) nounwind
200
201define i64 @crc32_64_8(i64 %a0, i8 %a1, i8 *%a2) nounwind {
202; GENERIC-LABEL: crc32_64_8:
203; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000204; GENERIC-NEXT: crc32b %sil, %edi # sched: [3:1.00]
205; GENERIC-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
206; GENERIC-NEXT: movq %rdi, %rax # sched: [1:0.33]
207; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000208;
209; SLM-LABEL: crc32_64_8:
210; SLM: # BB#0:
211; SLM-NEXT: crc32b %sil, %edi # sched: [3:1.00]
212; SLM-NEXT: crc32b (%rdx), %edi # sched: [6:1.00]
213; SLM-NEXT: movq %rdi, %rax # sched: [1:0.50]
214; SLM-NEXT: retq # sched: [4:1.00]
215;
216; SANDY-LABEL: crc32_64_8:
217; SANDY: # BB#0:
218; SANDY-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000219; SANDY-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000220; SANDY-NEXT: movq %rdi, %rax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000221; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000222;
223; HASWELL-LABEL: crc32_64_8:
224; HASWELL: # BB#0:
225; HASWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
226; HASWELL-NEXT: crc32b (%rdx), %edi # sched: [7:1.00]
227; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000228; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000229;
Gadi Haber767d98b2017-08-30 08:08:50 +0000230; SKYLAKE-LABEL: crc32_64_8:
231; SKYLAKE: # BB#0:
232; SKYLAKE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000233; SKYLAKE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000234; SKYLAKE-NEXT: movq %rdi, %rax # sched: [1:0.25]
235; SKYLAKE-NEXT: retq # sched: [2:1.00]
236;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000237; SKX-LABEL: crc32_64_8:
238; SKX: # BB#0:
239; SKX-NEXT: crc32b %sil, %edi # sched: [3:1.00]
240; SKX-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
241; SKX-NEXT: movq %rdi, %rax # sched: [1:0.25]
242; SKX-NEXT: retq # sched: [2:1.00]
243;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000244; BTVER2-LABEL: crc32_64_8:
245; BTVER2: # BB#0:
246; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:1.00]
247; BTVER2-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
248; BTVER2-NEXT: movq %rdi, %rax # sched: [1:0.17]
249; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000250;
251; ZNVER1-LABEL: crc32_64_8:
252; ZNVER1: # BB#0:
253; ZNVER1-NEXT: crc32b %sil, %edi # sched: [3:1.00]
254; ZNVER1-NEXT: crc32b (%rdx), %edi # sched: [10:1.00]
255; ZNVER1-NEXT: movq %rdi, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000256; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000257 %1 = call i64 @llvm.x86.sse42.crc32.64.8(i64 %a0, i8 %a1)
258 %2 = load i8, i8 *%a2
259 %3 = call i64 @llvm.x86.sse42.crc32.64.8(i64 %1, i8 %2)
260 ret i64 %3
261}
262declare i64 @llvm.x86.sse42.crc32.64.8(i64, i8) nounwind
263
264define i64 @crc32_64_64(i64 %a0, i64 %a1, i64 *%a2) {
265; GENERIC-LABEL: crc32_64_64:
266; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000267; GENERIC-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +0000268; GENERIC-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +0000269; GENERIC-NEXT: movq %rdi, %rax # sched: [1:0.33]
270; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000271;
272; SLM-LABEL: crc32_64_64:
273; SLM: # BB#0:
274; SLM-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
275; SLM-NEXT: crc32q (%rdx), %rdi # sched: [6:1.00]
276; SLM-NEXT: movq %rdi, %rax # sched: [1:0.50]
277; SLM-NEXT: retq # sched: [4:1.00]
278;
279; SANDY-LABEL: crc32_64_64:
280; SANDY: # BB#0:
281; SANDY-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +0000282; SANDY-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000283; SANDY-NEXT: movq %rdi, %rax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000284; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000285;
286; HASWELL-LABEL: crc32_64_64:
287; HASWELL: # BB#0:
288; HASWELL-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
289; HASWELL-NEXT: crc32q (%rdx), %rdi # sched: [7:1.00]
290; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000291; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000292;
Gadi Haber767d98b2017-08-30 08:08:50 +0000293; SKYLAKE-LABEL: crc32_64_64:
294; SKYLAKE: # BB#0:
295; SKYLAKE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000296; SKYLAKE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000297; SKYLAKE-NEXT: movq %rdi, %rax # sched: [1:0.25]
298; SKYLAKE-NEXT: retq # sched: [2:1.00]
299;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000300; SKX-LABEL: crc32_64_64:
301; SKX: # BB#0:
302; SKX-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
303; SKX-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
304; SKX-NEXT: movq %rdi, %rax # sched: [1:0.25]
305; SKX-NEXT: retq # sched: [2:1.00]
306;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000307; BTVER2-LABEL: crc32_64_64:
308; BTVER2: # BB#0:
309; BTVER2-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
310; BTVER2-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
311; BTVER2-NEXT: movq %rdi, %rax # sched: [1:0.17]
312; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000313;
314; ZNVER1-LABEL: crc32_64_64:
315; ZNVER1: # BB#0:
316; ZNVER1-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
317; ZNVER1-NEXT: crc32q (%rdx), %rdi # sched: [10:1.00]
318; ZNVER1-NEXT: movq %rdi, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000319; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000320 %1 = call i64 @llvm.x86.sse42.crc32.64.64(i64 %a0, i64 %a1)
321 %2 = load i64, i64 *%a2
322 %3 = call i64 @llvm.x86.sse42.crc32.64.64(i64 %1, i64 %2)
323 ret i64 %3
324}
325declare i64 @llvm.x86.sse42.crc32.64.64(i64, i64) nounwind
326
327define i32 @test_pcmpestri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
328; GENERIC-LABEL: test_pcmpestri:
329; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000330; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33]
331; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33]
332; GENERIC-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [4:2.67]
333; GENERIC-NEXT: movl %ecx, %esi # sched: [1:0.33]
334; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33]
335; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33]
336; GENERIC-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [4:2.33]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000337; GENERIC-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
Simon Pilgrim84846982017-08-01 15:14:35 +0000338; GENERIC-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
339; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000340;
341; SLM-LABEL: test_pcmpestri:
342; SLM: # BB#0:
343; SLM-NEXT: movl $7, %eax # sched: [1:0.50]
344; SLM-NEXT: movl $7, %edx # sched: [1:0.50]
345; SLM-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [21:21.00]
346; SLM-NEXT: movl $7, %eax # sched: [1:0.50]
347; SLM-NEXT: movl $7, %edx # sched: [1:0.50]
348; SLM-NEXT: movl %ecx, %esi # sched: [1:0.50]
349; SLM-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [21:21.00]
350; SLM-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
351; SLM-NEXT: leal (%rcx,%rsi), %eax # sched: [1:1.00]
352; SLM-NEXT: retq # sched: [4:1.00]
353;
354; SANDY-LABEL: test_pcmpestri:
355; SANDY: # BB#0:
356; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
357; SANDY-NEXT: movl $7, %edx # sched: [1:0.33]
358; SANDY-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [4:2.67]
359; SANDY-NEXT: movl %ecx, %esi # sched: [1:0.33]
360; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
361; SANDY-NEXT: movl $7, %edx # sched: [1:0.33]
362; SANDY-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [4:2.33]
363; SANDY-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
364; SANDY-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000365; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000366;
367; HASWELL-LABEL: test_pcmpestri:
368; HASWELL: # BB#0:
369; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
370; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000371; HASWELL-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000372; HASWELL-NEXT: movl %ecx, %esi # sched: [1:0.25]
373; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
374; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000375; HASWELL-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [18:4.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000376; HASWELL-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
377; HASWELL-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000378; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000379;
Gadi Haber767d98b2017-08-30 08:08:50 +0000380; SKYLAKE-LABEL: test_pcmpestri:
381; SKYLAKE: # BB#0:
382; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
383; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25]
384; SKYLAKE-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
385; SKYLAKE-NEXT: movl %ecx, %esi # sched: [1:0.25]
386; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
387; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25]
388; SKYLAKE-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [18:4.00]
389; SKYLAKE-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
390; SKYLAKE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
391; SKYLAKE-NEXT: retq # sched: [2:1.00]
392;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000393; SKX-LABEL: test_pcmpestri:
394; SKX: # BB#0:
395; SKX-NEXT: movl $7, %eax # sched: [1:0.25]
396; SKX-NEXT: movl $7, %edx # sched: [1:0.25]
397; SKX-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
398; SKX-NEXT: movl %ecx, %esi # sched: [1:0.25]
399; SKX-NEXT: movl $7, %eax # sched: [1:0.25]
400; SKX-NEXT: movl $7, %edx # sched: [1:0.25]
401; SKX-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [18:4.00]
402; SKX-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
403; SKX-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
404; SKX-NEXT: retq # sched: [2:1.00]
405;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000406; BTVER2-LABEL: test_pcmpestri:
407; BTVER2: # BB#0:
408; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17]
409; BTVER2-NEXT: movl $7, %edx # sched: [1:0.17]
410; BTVER2-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [13:2.50]
411; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17]
412; BTVER2-NEXT: movl $7, %edx # sched: [1:0.17]
413; BTVER2-NEXT: movl %ecx, %esi # sched: [1:0.17]
414; BTVER2-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [18:2.50]
415; BTVER2-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
416; BTVER2-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
417; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000418;
419; ZNVER1-LABEL: test_pcmpestri:
420; ZNVER1: # BB#0:
421; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
422; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000423; ZNVER1-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000424; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
425; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25]
426; ZNVER1-NEXT: movl %ecx, %esi # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000427; ZNVER1-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000428; ZNVER1-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
429; ZNVER1-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000430; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000431 %1 = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7)
432 %2 = load <16 x i8>, <16 x i8> *%a2, align 16
433 %3 = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %2, i32 7, i8 7)
434 %4 = add i32 %1, %3
435 ret i32 %4
436}
437declare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
438
439define <16 x i8> @test_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
440; GENERIC-LABEL: test_pcmpestrm:
441; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000442; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33]
443; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33]
444; GENERIC-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [11:2.67]
445; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33]
446; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33]
447; GENERIC-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33]
448; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000449;
450; SLM-LABEL: test_pcmpestrm:
451; SLM: # BB#0:
452; SLM-NEXT: movl $7, %eax # sched: [1:0.50]
453; SLM-NEXT: movl $7, %edx # sched: [1:0.50]
454; SLM-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [17:17.00]
455; SLM-NEXT: movl $7, %eax # sched: [1:0.50]
456; SLM-NEXT: movl $7, %edx # sched: [1:0.50]
457; SLM-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [17:17.00]
458; SLM-NEXT: retq # sched: [4:1.00]
459;
460; SANDY-LABEL: test_pcmpestrm:
461; SANDY: # BB#0:
462; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
463; SANDY-NEXT: movl $7, %edx # sched: [1:0.33]
464; SANDY-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [11:2.67]
465; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
466; SANDY-NEXT: movl $7, %edx # sched: [1:0.33]
467; SANDY-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000468; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000469;
470; HASWELL-LABEL: test_pcmpestrm:
471; HASWELL: # BB#0:
472; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
473; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000474; HASWELL-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000475; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
476; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000477; HASWELL-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:4.00]
478; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000479;
Gadi Haber767d98b2017-08-30 08:08:50 +0000480; SKYLAKE-LABEL: test_pcmpestrm:
481; SKYLAKE: # BB#0:
482; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
483; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25]
484; SKYLAKE-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
485; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
486; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25]
487; SKYLAKE-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:4.00]
488; SKYLAKE-NEXT: retq # sched: [2:1.00]
489;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000490; SKX-LABEL: test_pcmpestrm:
491; SKX: # BB#0:
492; SKX-NEXT: movl $7, %eax # sched: [1:0.25]
493; SKX-NEXT: movl $7, %edx # sched: [1:0.25]
494; SKX-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
495; SKX-NEXT: movl $7, %eax # sched: [1:0.25]
496; SKX-NEXT: movl $7, %edx # sched: [1:0.25]
497; SKX-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:4.00]
498; SKX-NEXT: retq # sched: [2:1.00]
499;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000500; BTVER2-LABEL: test_pcmpestrm:
501; BTVER2: # BB#0:
502; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17]
503; BTVER2-NEXT: movl $7, %edx # sched: [1:0.17]
504; BTVER2-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [13:2.50]
505; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17]
506; BTVER2-NEXT: movl $7, %edx # sched: [1:0.17]
507; BTVER2-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [18:2.50]
508; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000509;
510; ZNVER1-LABEL: test_pcmpestrm:
511; ZNVER1: # BB#0:
512; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
513; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000514; ZNVER1-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000515; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
516; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000517; ZNVER1-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [100:?]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000518; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000519 %1 = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7)
520 %2 = load <16 x i8>, <16 x i8> *%a2, align 16
521 %3 = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %1, i32 7, <16 x i8> %2, i32 7, i8 7)
522 ret <16 x i8> %3
523}
524declare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
525
526define i32 @test_pcmpistri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
527; GENERIC-LABEL: test_pcmpistri:
528; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000529; GENERIC-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
530; GENERIC-NEXT: movl %ecx, %eax # sched: [1:0.33]
531; GENERIC-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000532; GENERIC-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
Simon Pilgrim84846982017-08-01 15:14:35 +0000533; GENERIC-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
534; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000535;
536; SLM-LABEL: test_pcmpistri:
537; SLM: # BB#0:
538; SLM-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [17:17.00]
539; SLM-NEXT: movl %ecx, %eax # sched: [1:0.50]
540; SLM-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [17:17.00]
541; SLM-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
542; SLM-NEXT: leal (%rcx,%rax), %eax # sched: [1:1.00]
543; SLM-NEXT: retq # sched: [4:1.00]
544;
545; SANDY-LABEL: test_pcmpistri:
546; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000547; SANDY-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000548; SANDY-NEXT: movl %ecx, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000549; SANDY-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000550; SANDY-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
551; SANDY-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000552; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000553;
554; HASWELL-LABEL: test_pcmpistri:
555; HASWELL: # BB#0:
556; HASWELL-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
557; HASWELL-NEXT: movl %ecx, %eax # sched: [1:0.25]
558; HASWELL-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [11:3.00]
559; HASWELL-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
560; HASWELL-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000561; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000562;
Gadi Haber767d98b2017-08-30 08:08:50 +0000563; SKYLAKE-LABEL: test_pcmpistri:
564; SKYLAKE: # BB#0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000565; SKYLAKE-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000566; SKYLAKE-NEXT: movl %ecx, %eax # sched: [1:0.25]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000567; SKYLAKE-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [10:3.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000568; SKYLAKE-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
569; SKYLAKE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
570; SKYLAKE-NEXT: retq # sched: [2:1.00]
571;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000572; SKX-LABEL: test_pcmpistri:
573; SKX: # BB#0:
574; SKX-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00]
575; SKX-NEXT: movl %ecx, %eax # sched: [1:0.25]
576; SKX-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [10:3.00]
577; SKX-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
578; SKX-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
579; SKX-NEXT: retq # sched: [2:1.00]
580;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000581; BTVER2-LABEL: test_pcmpistri:
582; BTVER2: # BB#0:
583; BTVER2-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [6:1.00]
584; BTVER2-NEXT: movl %ecx, %eax # sched: [1:0.17]
585; BTVER2-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [11:1.00]
586; BTVER2-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
587; BTVER2-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
588; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000589;
590; ZNVER1-LABEL: test_pcmpistri:
591; ZNVER1: # BB#0:
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000592; ZNVER1-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000593; ZNVER1-NEXT: movl %ecx, %eax # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000594; ZNVER1-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000595; ZNVER1-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
596; ZNVER1-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000597; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000598 %1 = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %a1, i8 7)
599 %2 = load <16 x i8>, <16 x i8> *%a2, align 16
600 %3 = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %2, i8 7)
601 %4 = add i32 %1, %3
602 ret i32 %4
603}
604declare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone
605
606define <16 x i8> @test_pcmpistrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
607; GENERIC-LABEL: test_pcmpistrm:
608; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000609; GENERIC-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
610; GENERIC-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
611; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000612;
613; SLM-LABEL: test_pcmpistrm:
614; SLM: # BB#0:
615; SLM-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [13:13.00]
616; SLM-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [13:13.00]
617; SLM-NEXT: retq # sched: [4:1.00]
618;
619; SANDY-LABEL: test_pcmpistrm:
620; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000621; SANDY-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
622; SANDY-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
623; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000624;
625; HASWELL-LABEL: test_pcmpistrm:
626; HASWELL: # BB#0:
Gadi Haberd76f7b82017-08-28 10:04:16 +0000627; HASWELL-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
628; HASWELL-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [11:3.00]
629; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000630;
Gadi Haber767d98b2017-08-30 08:08:50 +0000631; SKYLAKE-LABEL: test_pcmpistrm:
632; SKYLAKE: # BB#0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000633; SKYLAKE-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00]
634; SKYLAKE-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [10:3.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000635; SKYLAKE-NEXT: retq # sched: [2:1.00]
636;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000637; SKX-LABEL: test_pcmpistrm:
638; SKX: # BB#0:
639; SKX-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00]
640; SKX-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [10:3.00]
641; SKX-NEXT: retq # sched: [2:1.00]
642;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000643; BTVER2-LABEL: test_pcmpistrm:
644; BTVER2: # BB#0:
645; BTVER2-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [7:1.00]
646; BTVER2-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [12:1.00]
647; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000648;
649; ZNVER1-LABEL: test_pcmpistrm:
650; ZNVER1: # BB#0:
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000651; ZNVER1-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [100:?]
652; ZNVER1-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [100:?]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000653; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000654 %1 = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1, i8 7)
655 %2 = load <16 x i8>, <16 x i8> *%a2, align 16
656 %3 = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %1, <16 x i8> %2, i8 7)
657 ret <16 x i8> %3
658}
659declare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone
660
661define <2 x i64> @test_pcmpgtq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
662; GENERIC-LABEL: test_pcmpgtq:
663; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000664; GENERIC-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [5:1.00]
665; GENERIC-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [11:1.00]
666; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000667;
668; SLM-LABEL: test_pcmpgtq:
669; SLM: # BB#0:
Simon Pilgrim06d62632017-04-23 21:23:27 +0000670; SLM-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [1:0.50]
671; SLM-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [4:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000672; SLM-NEXT: retq # sched: [4:1.00]
673;
674; SANDY-LABEL: test_pcmpgtq:
675; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000676; SANDY-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
677; SANDY-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
678; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000679;
680; HASWELL-LABEL: test_pcmpgtq:
681; HASWELL: # BB#0:
682; HASWELL-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
683; HASWELL-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000684; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000685;
Gadi Haber767d98b2017-08-30 08:08:50 +0000686; SKYLAKE-LABEL: test_pcmpgtq:
687; SKYLAKE: # BB#0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000688; SKYLAKE-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
689; SKYLAKE-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000690; SKYLAKE-NEXT: retq # sched: [2:1.00]
691;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000692; SKX-LABEL: test_pcmpgtq:
693; SKX: # BB#0:
694; SKX-NEXT: vpcmpgtq %xmm1, %xmm0, %k0
695; SKX-NEXT: vpmovm2q %k0, %xmm0
696; SKX-NEXT: vpcmpgtq (%rdi), %xmm0, %k0
697; SKX-NEXT: vpmovm2q %k0, %xmm0
698; SKX-NEXT: retq # sched: [2:1.00]
699;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000700; BTVER2-LABEL: test_pcmpgtq:
701; BTVER2: # BB#0:
Simon Pilgrim06d62632017-04-23 21:23:27 +0000702; BTVER2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
703; BTVER2-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000704; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000705;
706; ZNVER1-LABEL: test_pcmpgtq:
707; ZNVER1: # BB#0:
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000708; ZNVER1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
Craig Topper106b5b62017-07-19 02:45:14 +0000709; ZNVER1-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000710; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000711 %1 = icmp sgt <2 x i64> %a0, %a1
712 %2 = sext <2 x i1> %1 to <2 x i64>
713 %3 = load <2 x i64>, <2 x i64>*%a2, align 16
714 %4 = icmp sgt <2 x i64> %2, %3
715 %5 = sext <2 x i1> %4 to <2 x i64>
716 ret <2 x i64> %5
717}
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000718
719define <2 x i64> @test_pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
720; GENERIC-LABEL: test_pclmulqdq:
721; GENERIC: # BB#0:
722; GENERIC-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [14:6.00]
723; GENERIC-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [14:5.67]
724; GENERIC-NEXT: retq # sched: [1:1.00]
725;
726; SLM-LABEL: test_pclmulqdq:
727; SLM: # BB#0:
728; SLM-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [10:10.00]
729; SLM-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [10:10.00]
730; SLM-NEXT: retq # sched: [4:1.00]
731;
732; SANDY-LABEL: test_pclmulqdq:
733; SANDY: # BB#0:
734; SANDY-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [14:6.00]
735; SANDY-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [14:5.67]
736; SANDY-NEXT: retq # sched: [1:1.00]
737;
738; HASWELL-LABEL: test_pclmulqdq:
739; HASWELL: # BB#0:
Gadi Haberd76f7b82017-08-28 10:04:16 +0000740; HASWELL-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [11:2.00]
741; HASWELL-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [11:2.00]
742; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000743;
Gadi Haber767d98b2017-08-30 08:08:50 +0000744; SKYLAKE-LABEL: test_pclmulqdq:
745; SKYLAKE: # BB#0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000746; SKYLAKE-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [6:1.00]
747; SKYLAKE-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000748; SKYLAKE-NEXT: retq # sched: [2:1.00]
749;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000750; SKX-LABEL: test_pclmulqdq:
751; SKX: # BB#0:
752; SKX-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [6:1.00]
753; SKX-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
754; SKX-NEXT: retq # sched: [2:1.00]
755;
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000756; BTVER2-LABEL: test_pclmulqdq:
757; BTVER2: # BB#0:
758; BTVER2-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
759; BTVER2-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
760; BTVER2-NEXT: retq # sched: [4:1.00]
761;
762; ZNVER1-LABEL: test_pclmulqdq:
763; ZNVER1: # BB#0:
764; ZNVER1-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [100:?]
765; ZNVER1-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [100:?]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000766; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000767 %1 = load <2 x i64>, <2 x i64> *%a2, align 16
768 %2 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, i8 0)
769 %3 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %1, <2 x i64> %2, i8 0)
770 ret <2 x i64> %3
771}
772declare <2 x i64> @llvm.x86.pclmulqdq(<2 x i64>, <2 x i64>, i8)