blob: e900234299ddce0aa6b3acce07ecc6967b7776b9 [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 Haber85d99b42017-10-17 13:45:39 +00007; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell | FileCheck %s --check-prefix=CHECK --check-prefix=BROADWELL
Gadi Haber767d98b2017-08-30 08:08:50 +00008; 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 +00009; 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 +000010; 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 +000011; 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 +000012
13define i32 @crc32_32_8(i32 %a0, i8 %a1, i8 *%a2) {
14; GENERIC-LABEL: crc32_32_8:
15; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +000016; GENERIC-NEXT: crc32b %sil, %edi # sched: [3:1.00]
17; GENERIC-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
18; GENERIC-NEXT: movl %edi, %eax # sched: [1:0.33]
19; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000020;
21; SLM-LABEL: crc32_32_8:
22; SLM: # BB#0:
23; SLM-NEXT: crc32b %sil, %edi # sched: [3:1.00]
24; SLM-NEXT: crc32b (%rdx), %edi # sched: [6:1.00]
25; SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
26; SLM-NEXT: retq # sched: [4:1.00]
27;
28; SANDY-LABEL: crc32_32_8:
29; SANDY: # BB#0:
30; SANDY-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +000031; SANDY-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000032; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +000033; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000034;
35; HASWELL-LABEL: crc32_32_8:
36; HASWELL: # BB#0:
37; HASWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
38; HASWELL-NEXT: crc32b (%rdx), %edi # sched: [7:1.00]
39; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +000040; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000041;
Gadi Haber85d99b42017-10-17 13:45:39 +000042; BROADWELL-LABEL: crc32_32_8:
43; BROADWELL: # BB#0:
44; BROADWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
45; BROADWELL-NEXT: crc32b (%rdx), %edi # sched: [7:1.00]
46; BROADWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
47; BROADWELL-NEXT: retq # sched: [2:1.00]
48;
Gadi Haber767d98b2017-08-30 08:08:50 +000049; SKYLAKE-LABEL: crc32_32_8:
50; SKYLAKE: # BB#0:
51; SKYLAKE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +000052; SKYLAKE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +000053; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +000054; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +000055;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +000056; SKX-LABEL: crc32_32_8:
57; SKX: # BB#0:
58; SKX-NEXT: crc32b %sil, %edi # sched: [3:1.00]
59; SKX-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
60; SKX-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +000061; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +000062;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000063; BTVER2-LABEL: crc32_32_8:
64; BTVER2: # BB#0:
65; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:1.00]
66; BTVER2-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
67; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.17]
68; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +000069;
70; ZNVER1-LABEL: crc32_32_8:
71; ZNVER1: # BB#0:
72; ZNVER1-NEXT: crc32b %sil, %edi # sched: [3:1.00]
73; ZNVER1-NEXT: crc32b (%rdx), %edi # sched: [10:1.00]
74; ZNVER1-NEXT: movl %edi, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +000075; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000076 %1 = call i32 @llvm.x86.sse42.crc32.32.8(i32 %a0, i8 %a1)
77 %2 = load i8, i8 *%a2
78 %3 = call i32 @llvm.x86.sse42.crc32.32.8(i32 %1, i8 %2)
79 ret i32 %3
80}
81declare i32 @llvm.x86.sse42.crc32.32.8(i32, i8) nounwind
82
83define i32 @crc32_32_16(i32 %a0, i16 %a1, i16 *%a2) {
84; GENERIC-LABEL: crc32_32_16:
85; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +000086; GENERIC-NEXT: crc32w %si, %edi # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +000087; GENERIC-NEXT: crc32w (%rdx), %edi # sched: [7:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +000088; GENERIC-NEXT: movl %edi, %eax # sched: [1:0.33]
89; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000090;
91; SLM-LABEL: crc32_32_16:
92; SLM: # BB#0:
93; SLM-NEXT: crc32w %si, %edi # sched: [3:1.00]
94; SLM-NEXT: crc32w (%rdx), %edi # sched: [6:1.00]
95; SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
96; SLM-NEXT: retq # sched: [4:1.00]
97;
98; SANDY-LABEL: crc32_32_16:
99; SANDY: # BB#0:
100; SANDY-NEXT: crc32w %si, %edi # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +0000101; SANDY-NEXT: crc32w (%rdx), %edi # sched: [7:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000102; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000103; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000104;
105; HASWELL-LABEL: crc32_32_16:
106; HASWELL: # BB#0:
107; HASWELL-NEXT: crc32w %si, %edi # sched: [3:1.00]
108; HASWELL-NEXT: crc32w (%rdx), %edi # sched: [7:1.00]
109; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000110; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000111;
Gadi Haber85d99b42017-10-17 13:45:39 +0000112; BROADWELL-LABEL: crc32_32_16:
113; BROADWELL: # BB#0:
114; BROADWELL-NEXT: crc32w %si, %edi # sched: [3:1.00]
115; BROADWELL-NEXT: crc32w (%rdx), %edi # sched: [7:1.00]
116; BROADWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
117; BROADWELL-NEXT: retq # sched: [2:1.00]
118;
Gadi Haber767d98b2017-08-30 08:08:50 +0000119; SKYLAKE-LABEL: crc32_32_16:
120; SKYLAKE: # BB#0:
121; SKYLAKE-NEXT: crc32w %si, %edi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000122; SKYLAKE-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000123; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000124; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000125;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000126; SKX-LABEL: crc32_32_16:
127; SKX: # BB#0:
128; SKX-NEXT: crc32w %si, %edi # sched: [3:1.00]
129; SKX-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
130; SKX-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +0000131; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000132;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000133; BTVER2-LABEL: crc32_32_16:
134; BTVER2: # BB#0:
135; BTVER2-NEXT: crc32w %si, %edi # sched: [3:1.00]
136; BTVER2-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
137; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.17]
138; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000139;
140; ZNVER1-LABEL: crc32_32_16:
141; ZNVER1: # BB#0:
142; ZNVER1-NEXT: crc32w %si, %edi # sched: [3:1.00]
143; ZNVER1-NEXT: crc32w (%rdx), %edi # sched: [10:1.00]
144; ZNVER1-NEXT: movl %edi, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000145; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000146 %1 = call i32 @llvm.x86.sse42.crc32.32.16(i32 %a0, i16 %a1)
147 %2 = load i16, i16 *%a2
148 %3 = call i32 @llvm.x86.sse42.crc32.32.16(i32 %1, i16 %2)
149 ret i32 %3
150}
151declare i32 @llvm.x86.sse42.crc32.32.16(i32, i16) nounwind
152
153define i32 @crc32_32_32(i32 %a0, i32 %a1, i32 *%a2) {
154; GENERIC-LABEL: crc32_32_32:
155; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000156; GENERIC-NEXT: crc32l %esi, %edi # sched: [3:1.00]
157; GENERIC-NEXT: crc32l (%rdx), %edi # sched: [7:1.00]
158; GENERIC-NEXT: movl %edi, %eax # sched: [1:0.33]
159; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000160;
161; SLM-LABEL: crc32_32_32:
162; SLM: # BB#0:
163; SLM-NEXT: crc32l %esi, %edi # sched: [3:1.00]
164; SLM-NEXT: crc32l (%rdx), %edi # sched: [6:1.00]
165; SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
166; SLM-NEXT: retq # sched: [4:1.00]
167;
168; SANDY-LABEL: crc32_32_32:
169; SANDY: # BB#0:
170; SANDY-NEXT: crc32l %esi, %edi # sched: [3:1.00]
171; SANDY-NEXT: crc32l (%rdx), %edi # sched: [7:1.00]
172; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000173; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000174;
175; HASWELL-LABEL: crc32_32_32:
176; HASWELL: # BB#0:
177; HASWELL-NEXT: crc32l %esi, %edi # sched: [3:1.00]
178; HASWELL-NEXT: crc32l (%rdx), %edi # sched: [7:1.00]
179; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000180; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000181;
Gadi Haber85d99b42017-10-17 13:45:39 +0000182; BROADWELL-LABEL: crc32_32_32:
183; BROADWELL: # BB#0:
184; BROADWELL-NEXT: crc32l %esi, %edi # sched: [3:1.00]
185; BROADWELL-NEXT: crc32l (%rdx), %edi # sched: [7:1.00]
186; BROADWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
187; BROADWELL-NEXT: retq # sched: [2:1.00]
188;
Gadi Haber767d98b2017-08-30 08:08:50 +0000189; SKYLAKE-LABEL: crc32_32_32:
190; SKYLAKE: # BB#0:
191; SKYLAKE-NEXT: crc32l %esi, %edi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000192; SKYLAKE-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000193; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000194; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000195;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000196; SKX-LABEL: crc32_32_32:
197; SKX: # BB#0:
198; SKX-NEXT: crc32l %esi, %edi # sched: [3:1.00]
199; SKX-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
200; SKX-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +0000201; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000202;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000203; BTVER2-LABEL: crc32_32_32:
204; BTVER2: # BB#0:
205; BTVER2-NEXT: crc32l %esi, %edi # sched: [3:1.00]
206; BTVER2-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
207; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.17]
208; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000209;
210; ZNVER1-LABEL: crc32_32_32:
211; ZNVER1: # BB#0:
212; ZNVER1-NEXT: crc32l %esi, %edi # sched: [3:1.00]
213; ZNVER1-NEXT: crc32l (%rdx), %edi # sched: [10:1.00]
214; ZNVER1-NEXT: movl %edi, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000215; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000216 %1 = call i32 @llvm.x86.sse42.crc32.32.32(i32 %a0, i32 %a1)
217 %2 = load i32, i32 *%a2
218 %3 = call i32 @llvm.x86.sse42.crc32.32.32(i32 %1, i32 %2)
219 ret i32 %3
220}
221declare i32 @llvm.x86.sse42.crc32.32.32(i32, i32) nounwind
222
223define i64 @crc32_64_8(i64 %a0, i8 %a1, i8 *%a2) nounwind {
224; GENERIC-LABEL: crc32_64_8:
225; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000226; GENERIC-NEXT: crc32b %sil, %edi # sched: [3:1.00]
227; GENERIC-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
228; GENERIC-NEXT: movq %rdi, %rax # sched: [1:0.33]
229; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000230;
231; SLM-LABEL: crc32_64_8:
232; SLM: # BB#0:
233; SLM-NEXT: crc32b %sil, %edi # sched: [3:1.00]
234; SLM-NEXT: crc32b (%rdx), %edi # sched: [6:1.00]
235; SLM-NEXT: movq %rdi, %rax # sched: [1:0.50]
236; SLM-NEXT: retq # sched: [4:1.00]
237;
238; SANDY-LABEL: crc32_64_8:
239; SANDY: # BB#0:
240; SANDY-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000241; SANDY-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000242; SANDY-NEXT: movq %rdi, %rax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000243; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000244;
245; HASWELL-LABEL: crc32_64_8:
246; HASWELL: # BB#0:
247; HASWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
248; HASWELL-NEXT: crc32b (%rdx), %edi # sched: [7:1.00]
249; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000250; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000251;
Gadi Haber85d99b42017-10-17 13:45:39 +0000252; BROADWELL-LABEL: crc32_64_8:
253; BROADWELL: # BB#0:
254; BROADWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
255; BROADWELL-NEXT: crc32b (%rdx), %edi # sched: [7:1.00]
256; BROADWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
257; BROADWELL-NEXT: retq # sched: [2:1.00]
258;
Gadi Haber767d98b2017-08-30 08:08:50 +0000259; SKYLAKE-LABEL: crc32_64_8:
260; SKYLAKE: # BB#0:
261; SKYLAKE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000262; SKYLAKE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000263; SKYLAKE-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000264; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000265;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000266; SKX-LABEL: crc32_64_8:
267; SKX: # BB#0:
268; SKX-NEXT: crc32b %sil, %edi # sched: [3:1.00]
269; SKX-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
270; SKX-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +0000271; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000272;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000273; BTVER2-LABEL: crc32_64_8:
274; BTVER2: # BB#0:
275; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:1.00]
276; BTVER2-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
277; BTVER2-NEXT: movq %rdi, %rax # sched: [1:0.17]
278; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000279;
280; ZNVER1-LABEL: crc32_64_8:
281; ZNVER1: # BB#0:
282; ZNVER1-NEXT: crc32b %sil, %edi # sched: [3:1.00]
283; ZNVER1-NEXT: crc32b (%rdx), %edi # sched: [10:1.00]
284; ZNVER1-NEXT: movq %rdi, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000285; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000286 %1 = call i64 @llvm.x86.sse42.crc32.64.8(i64 %a0, i8 %a1)
287 %2 = load i8, i8 *%a2
288 %3 = call i64 @llvm.x86.sse42.crc32.64.8(i64 %1, i8 %2)
289 ret i64 %3
290}
291declare i64 @llvm.x86.sse42.crc32.64.8(i64, i8) nounwind
292
293define i64 @crc32_64_64(i64 %a0, i64 %a1, i64 *%a2) {
294; GENERIC-LABEL: crc32_64_64:
295; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000296; GENERIC-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +0000297; GENERIC-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +0000298; GENERIC-NEXT: movq %rdi, %rax # sched: [1:0.33]
299; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000300;
301; SLM-LABEL: crc32_64_64:
302; SLM: # BB#0:
303; SLM-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
304; SLM-NEXT: crc32q (%rdx), %rdi # sched: [6:1.00]
305; SLM-NEXT: movq %rdi, %rax # sched: [1:0.50]
306; SLM-NEXT: retq # sched: [4:1.00]
307;
308; SANDY-LABEL: crc32_64_64:
309; SANDY: # BB#0:
310; SANDY-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +0000311; SANDY-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000312; SANDY-NEXT: movq %rdi, %rax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000313; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000314;
315; HASWELL-LABEL: crc32_64_64:
316; HASWELL: # BB#0:
317; HASWELL-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
318; HASWELL-NEXT: crc32q (%rdx), %rdi # sched: [7:1.00]
319; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000320; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000321;
Gadi Haber85d99b42017-10-17 13:45:39 +0000322; BROADWELL-LABEL: crc32_64_64:
323; BROADWELL: # BB#0:
324; BROADWELL-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
325; BROADWELL-NEXT: crc32q (%rdx), %rdi # sched: [7:1.00]
326; BROADWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
327; BROADWELL-NEXT: retq # sched: [2:1.00]
328;
Gadi Haber767d98b2017-08-30 08:08:50 +0000329; SKYLAKE-LABEL: crc32_64_64:
330; SKYLAKE: # BB#0:
331; SKYLAKE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000332; SKYLAKE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000333; SKYLAKE-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000334; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000335;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000336; SKX-LABEL: crc32_64_64:
337; SKX: # BB#0:
338; SKX-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
339; SKX-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
340; SKX-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +0000341; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000342;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000343; BTVER2-LABEL: crc32_64_64:
344; BTVER2: # BB#0:
345; BTVER2-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
346; BTVER2-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
347; BTVER2-NEXT: movq %rdi, %rax # sched: [1:0.17]
348; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000349;
350; ZNVER1-LABEL: crc32_64_64:
351; ZNVER1: # BB#0:
352; ZNVER1-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
353; ZNVER1-NEXT: crc32q (%rdx), %rdi # sched: [10:1.00]
354; ZNVER1-NEXT: movq %rdi, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000355; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000356 %1 = call i64 @llvm.x86.sse42.crc32.64.64(i64 %a0, i64 %a1)
357 %2 = load i64, i64 *%a2
358 %3 = call i64 @llvm.x86.sse42.crc32.64.64(i64 %1, i64 %2)
359 ret i64 %3
360}
361declare i64 @llvm.x86.sse42.crc32.64.64(i64, i64) nounwind
362
363define i32 @test_pcmpestri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
364; GENERIC-LABEL: test_pcmpestri:
365; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000366; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33]
367; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33]
368; GENERIC-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [4:2.67]
369; GENERIC-NEXT: movl %ecx, %esi # sched: [1:0.33]
370; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33]
371; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33]
372; GENERIC-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [4:2.33]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000373; GENERIC-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
Simon Pilgrim84846982017-08-01 15:14:35 +0000374; GENERIC-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
375; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000376;
377; SLM-LABEL: test_pcmpestri:
378; SLM: # BB#0:
379; SLM-NEXT: movl $7, %eax # sched: [1:0.50]
380; SLM-NEXT: movl $7, %edx # sched: [1:0.50]
381; SLM-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [21:21.00]
382; SLM-NEXT: movl $7, %eax # sched: [1:0.50]
383; SLM-NEXT: movl $7, %edx # sched: [1:0.50]
384; SLM-NEXT: movl %ecx, %esi # sched: [1:0.50]
385; SLM-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [21:21.00]
386; SLM-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
387; SLM-NEXT: leal (%rcx,%rsi), %eax # sched: [1:1.00]
388; SLM-NEXT: retq # sched: [4:1.00]
389;
390; SANDY-LABEL: test_pcmpestri:
391; SANDY: # BB#0:
392; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
393; SANDY-NEXT: movl $7, %edx # sched: [1:0.33]
394; SANDY-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [4:2.67]
395; SANDY-NEXT: movl %ecx, %esi # sched: [1:0.33]
396; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
397; SANDY-NEXT: movl $7, %edx # sched: [1:0.33]
398; SANDY-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [4:2.33]
399; SANDY-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
400; SANDY-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000401; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000402;
403; HASWELL-LABEL: test_pcmpestri:
404; HASWELL: # BB#0:
405; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
406; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000407; HASWELL-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000408; HASWELL-NEXT: movl %ecx, %esi # sched: [1:0.25]
409; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
410; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000411; HASWELL-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [18:4.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000412; HASWELL-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
413; HASWELL-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000414; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000415;
Gadi Haber85d99b42017-10-17 13:45:39 +0000416; BROADWELL-LABEL: test_pcmpestri:
417; BROADWELL: # BB#0:
418; BROADWELL-NEXT: movl $7, %eax # sched: [1:0.25]
419; BROADWELL-NEXT: movl $7, %edx # sched: [1:0.25]
420; BROADWELL-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
421; BROADWELL-NEXT: movl %ecx, %esi # sched: [1:0.25]
422; BROADWELL-NEXT: movl $7, %eax # sched: [1:0.25]
423; BROADWELL-NEXT: movl $7, %edx # sched: [1:0.25]
424; BROADWELL-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [18:4.00]
425; BROADWELL-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
426; BROADWELL-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
427; BROADWELL-NEXT: retq # sched: [2:1.00]
428;
Gadi Haber767d98b2017-08-30 08:08:50 +0000429; SKYLAKE-LABEL: test_pcmpestri:
430; SKYLAKE: # BB#0:
431; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
432; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25]
433; SKYLAKE-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
434; SKYLAKE-NEXT: movl %ecx, %esi # sched: [1:0.25]
435; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
436; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000437; SKYLAKE-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000438; SKYLAKE-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
439; SKYLAKE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000440; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000441;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000442; SKX-LABEL: test_pcmpestri:
443; SKX: # BB#0:
444; SKX-NEXT: movl $7, %eax # sched: [1:0.25]
445; SKX-NEXT: movl $7, %edx # sched: [1:0.25]
446; SKX-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
447; SKX-NEXT: movl %ecx, %esi # sched: [1:0.25]
448; SKX-NEXT: movl $7, %eax # sched: [1:0.25]
449; SKX-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +0000450; SKX-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000451; SKX-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
452; SKX-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
Gadi Haber684944b2017-10-08 12:52:54 +0000453; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000454;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000455; BTVER2-LABEL: test_pcmpestri:
456; BTVER2: # BB#0:
457; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17]
458; BTVER2-NEXT: movl $7, %edx # sched: [1:0.17]
459; BTVER2-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [13:2.50]
460; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17]
461; BTVER2-NEXT: movl $7, %edx # sched: [1:0.17]
462; BTVER2-NEXT: movl %ecx, %esi # sched: [1:0.17]
463; BTVER2-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [18:2.50]
464; BTVER2-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
465; BTVER2-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
466; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000467;
468; ZNVER1-LABEL: test_pcmpestri:
469; ZNVER1: # BB#0:
470; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
471; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000472; ZNVER1-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000473; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
474; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25]
475; ZNVER1-NEXT: movl %ecx, %esi # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000476; ZNVER1-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000477; ZNVER1-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
478; ZNVER1-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000479; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000480 %1 = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7)
481 %2 = load <16 x i8>, <16 x i8> *%a2, align 16
482 %3 = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %2, i32 7, i8 7)
483 %4 = add i32 %1, %3
484 ret i32 %4
485}
486declare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
487
488define <16 x i8> @test_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
489; GENERIC-LABEL: test_pcmpestrm:
490; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000491; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33]
492; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33]
493; GENERIC-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [11:2.67]
494; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33]
495; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33]
496; GENERIC-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33]
497; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000498;
499; SLM-LABEL: test_pcmpestrm:
500; SLM: # BB#0:
501; SLM-NEXT: movl $7, %eax # sched: [1:0.50]
502; SLM-NEXT: movl $7, %edx # sched: [1:0.50]
503; SLM-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [17:17.00]
504; SLM-NEXT: movl $7, %eax # sched: [1:0.50]
505; SLM-NEXT: movl $7, %edx # sched: [1:0.50]
506; SLM-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [17:17.00]
507; SLM-NEXT: retq # sched: [4:1.00]
508;
509; SANDY-LABEL: test_pcmpestrm:
510; SANDY: # BB#0:
511; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
512; SANDY-NEXT: movl $7, %edx # sched: [1:0.33]
513; SANDY-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [11:2.67]
514; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
515; SANDY-NEXT: movl $7, %edx # sched: [1:0.33]
516; SANDY-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000517; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000518;
519; HASWELL-LABEL: test_pcmpestrm:
520; HASWELL: # BB#0:
521; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
522; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000523; HASWELL-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000524; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
525; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000526; HASWELL-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:4.00]
527; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000528;
Gadi Haber85d99b42017-10-17 13:45:39 +0000529; BROADWELL-LABEL: test_pcmpestrm:
530; BROADWELL: # BB#0:
531; BROADWELL-NEXT: movl $7, %eax # sched: [1:0.25]
532; BROADWELL-NEXT: movl $7, %edx # sched: [1:0.25]
533; BROADWELL-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
534; BROADWELL-NEXT: movl $7, %eax # sched: [1:0.25]
535; BROADWELL-NEXT: movl $7, %edx # sched: [1:0.25]
536; BROADWELL-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:4.00]
537; BROADWELL-NEXT: retq # sched: [2:1.00]
538;
Gadi Haber767d98b2017-08-30 08:08:50 +0000539; SKYLAKE-LABEL: test_pcmpestrm:
540; SKYLAKE: # BB#0:
541; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
542; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25]
543; SKYLAKE-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
544; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
545; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000546; SKYLAKE-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
547; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000548;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000549; SKX-LABEL: test_pcmpestrm:
550; SKX: # BB#0:
551; SKX-NEXT: movl $7, %eax # sched: [1:0.25]
552; SKX-NEXT: movl $7, %edx # sched: [1:0.25]
553; SKX-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
554; SKX-NEXT: movl $7, %eax # sched: [1:0.25]
555; SKX-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +0000556; SKX-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
557; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000558;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000559; BTVER2-LABEL: test_pcmpestrm:
560; BTVER2: # BB#0:
561; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17]
562; BTVER2-NEXT: movl $7, %edx # sched: [1:0.17]
563; BTVER2-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [13:2.50]
564; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17]
565; BTVER2-NEXT: movl $7, %edx # sched: [1:0.17]
566; BTVER2-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [18:2.50]
567; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000568;
569; ZNVER1-LABEL: test_pcmpestrm:
570; ZNVER1: # BB#0:
571; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
572; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000573; ZNVER1-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000574; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
575; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000576; ZNVER1-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [100:?]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000577; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000578 %1 = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7)
579 %2 = load <16 x i8>, <16 x i8> *%a2, align 16
580 %3 = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %1, i32 7, <16 x i8> %2, i32 7, i8 7)
581 ret <16 x i8> %3
582}
583declare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
584
585define i32 @test_pcmpistri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
586; GENERIC-LABEL: test_pcmpistri:
587; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000588; GENERIC-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
589; GENERIC-NEXT: movl %ecx, %eax # sched: [1:0.33]
590; GENERIC-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000591; GENERIC-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
Simon Pilgrim84846982017-08-01 15:14:35 +0000592; GENERIC-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
593; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000594;
595; SLM-LABEL: test_pcmpistri:
596; SLM: # BB#0:
597; SLM-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [17:17.00]
598; SLM-NEXT: movl %ecx, %eax # sched: [1:0.50]
599; SLM-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [17:17.00]
600; SLM-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
601; SLM-NEXT: leal (%rcx,%rax), %eax # sched: [1:1.00]
602; SLM-NEXT: retq # sched: [4:1.00]
603;
604; SANDY-LABEL: test_pcmpistri:
605; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000606; SANDY-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000607; SANDY-NEXT: movl %ecx, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000608; SANDY-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000609; SANDY-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
610; SANDY-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000611; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000612;
613; HASWELL-LABEL: test_pcmpistri:
614; HASWELL: # BB#0:
615; HASWELL-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
616; HASWELL-NEXT: movl %ecx, %eax # sched: [1:0.25]
617; HASWELL-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [11:3.00]
618; HASWELL-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
619; HASWELL-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000620; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000621;
Gadi Haber85d99b42017-10-17 13:45:39 +0000622; BROADWELL-LABEL: test_pcmpistri:
623; BROADWELL: # BB#0:
624; BROADWELL-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
625; BROADWELL-NEXT: movl %ecx, %eax # sched: [1:0.25]
626; BROADWELL-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [11:3.00]
627; BROADWELL-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
628; BROADWELL-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
629; BROADWELL-NEXT: retq # sched: [2:1.00]
630;
Gadi Haber767d98b2017-08-30 08:08:50 +0000631; SKYLAKE-LABEL: test_pcmpistri:
632; SKYLAKE: # BB#0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000633; SKYLAKE-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000634; SKYLAKE-NEXT: movl %ecx, %eax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000635; SKYLAKE-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000636; SKYLAKE-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
637; SKYLAKE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000638; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000639;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000640; SKX-LABEL: test_pcmpistri:
641; SKX: # BB#0:
642; SKX-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00]
643; SKX-NEXT: movl %ecx, %eax # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +0000644; SKX-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000645; SKX-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
646; SKX-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
Gadi Haber684944b2017-10-08 12:52:54 +0000647; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000648;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000649; BTVER2-LABEL: test_pcmpistri:
650; BTVER2: # BB#0:
651; BTVER2-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [6:1.00]
652; BTVER2-NEXT: movl %ecx, %eax # sched: [1:0.17]
653; BTVER2-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [11:1.00]
654; BTVER2-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
655; BTVER2-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
656; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000657;
658; ZNVER1-LABEL: test_pcmpistri:
659; ZNVER1: # BB#0:
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000660; ZNVER1-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000661; ZNVER1-NEXT: movl %ecx, %eax # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000662; ZNVER1-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000663; ZNVER1-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
664; ZNVER1-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000665; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000666 %1 = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %a1, i8 7)
667 %2 = load <16 x i8>, <16 x i8> *%a2, align 16
668 %3 = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %2, i8 7)
669 %4 = add i32 %1, %3
670 ret i32 %4
671}
672declare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone
673
674define <16 x i8> @test_pcmpistrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
675; GENERIC-LABEL: test_pcmpistrm:
676; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000677; GENERIC-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
678; GENERIC-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
679; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000680;
681; SLM-LABEL: test_pcmpistrm:
682; SLM: # BB#0:
683; SLM-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [13:13.00]
684; SLM-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [13:13.00]
685; SLM-NEXT: retq # sched: [4:1.00]
686;
687; SANDY-LABEL: test_pcmpistrm:
688; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000689; SANDY-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
690; SANDY-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
691; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000692;
693; HASWELL-LABEL: test_pcmpistrm:
694; HASWELL: # BB#0:
Gadi Haberd76f7b82017-08-28 10:04:16 +0000695; HASWELL-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
696; HASWELL-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [11:3.00]
697; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000698;
Gadi Haber85d99b42017-10-17 13:45:39 +0000699; BROADWELL-LABEL: test_pcmpistrm:
700; BROADWELL: # BB#0:
701; BROADWELL-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
702; BROADWELL-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [11:3.00]
703; BROADWELL-NEXT: retq # sched: [2:1.00]
704;
Gadi Haber767d98b2017-08-30 08:08:50 +0000705; SKYLAKE-LABEL: test_pcmpistrm:
706; SKYLAKE: # BB#0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000707; SKYLAKE-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000708; SKYLAKE-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
709; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000710;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000711; SKX-LABEL: test_pcmpistrm:
712; SKX: # BB#0:
713; SKX-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00]
Gadi Haber684944b2017-10-08 12:52:54 +0000714; SKX-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
715; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000716;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000717; BTVER2-LABEL: test_pcmpistrm:
718; BTVER2: # BB#0:
719; BTVER2-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [7:1.00]
720; BTVER2-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [12:1.00]
721; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000722;
723; ZNVER1-LABEL: test_pcmpistrm:
724; ZNVER1: # BB#0:
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000725; ZNVER1-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [100:?]
726; ZNVER1-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [100:?]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000727; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000728 %1 = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1, i8 7)
729 %2 = load <16 x i8>, <16 x i8> *%a2, align 16
730 %3 = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %1, <16 x i8> %2, i8 7)
731 ret <16 x i8> %3
732}
733declare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone
734
735define <2 x i64> @test_pcmpgtq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
736; GENERIC-LABEL: test_pcmpgtq:
737; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000738; GENERIC-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [5:1.00]
739; GENERIC-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [11:1.00]
740; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000741;
742; SLM-LABEL: test_pcmpgtq:
743; SLM: # BB#0:
Simon Pilgrim06d62632017-04-23 21:23:27 +0000744; SLM-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [1:0.50]
745; SLM-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [4:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000746; SLM-NEXT: retq # sched: [4:1.00]
747;
748; SANDY-LABEL: test_pcmpgtq:
749; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000750; SANDY-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
751; SANDY-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
752; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000753;
754; HASWELL-LABEL: test_pcmpgtq:
755; HASWELL: # BB#0:
756; HASWELL-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
757; HASWELL-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000758; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000759;
Gadi Haber85d99b42017-10-17 13:45:39 +0000760; BROADWELL-LABEL: test_pcmpgtq:
761; BROADWELL: # BB#0:
762; BROADWELL-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
763; BROADWELL-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
764; BROADWELL-NEXT: retq # sched: [2:1.00]
765;
Gadi Haber767d98b2017-08-30 08:08:50 +0000766; SKYLAKE-LABEL: test_pcmpgtq:
767; SKYLAKE: # BB#0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000768; SKYLAKE-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000769; SKYLAKE-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
770; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000771;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000772; SKX-LABEL: test_pcmpgtq:
773; SKX: # BB#0:
Gadi Haber684944b2017-10-08 12:52:54 +0000774; SKX-NEXT: vpcmpgtq %xmm1, %xmm0, %k0 # sched: [3:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000775; SKX-NEXT: vpmovm2q %k0, %xmm0
Gadi Haber684944b2017-10-08 12:52:54 +0000776; SKX-NEXT: vpcmpgtq (%rdi), %xmm0, %k0 # sched: [9:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000777; SKX-NEXT: vpmovm2q %k0, %xmm0
Gadi Haber684944b2017-10-08 12:52:54 +0000778; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000779;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000780; BTVER2-LABEL: test_pcmpgtq:
781; BTVER2: # BB#0:
Simon Pilgrim06d62632017-04-23 21:23:27 +0000782; BTVER2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
783; BTVER2-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000784; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000785;
786; ZNVER1-LABEL: test_pcmpgtq:
787; ZNVER1: # BB#0:
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000788; ZNVER1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
Craig Topper106b5b62017-07-19 02:45:14 +0000789; ZNVER1-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000790; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000791 %1 = icmp sgt <2 x i64> %a0, %a1
792 %2 = sext <2 x i1> %1 to <2 x i64>
793 %3 = load <2 x i64>, <2 x i64>*%a2, align 16
794 %4 = icmp sgt <2 x i64> %2, %3
795 %5 = sext <2 x i1> %4 to <2 x i64>
796 ret <2 x i64> %5
797}
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000798
799define <2 x i64> @test_pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
800; GENERIC-LABEL: test_pclmulqdq:
801; GENERIC: # BB#0:
802; GENERIC-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [14:6.00]
803; GENERIC-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [14:5.67]
804; GENERIC-NEXT: retq # sched: [1:1.00]
805;
806; SLM-LABEL: test_pclmulqdq:
807; SLM: # BB#0:
808; SLM-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [10:10.00]
809; SLM-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [10:10.00]
810; SLM-NEXT: retq # sched: [4:1.00]
811;
812; SANDY-LABEL: test_pclmulqdq:
813; SANDY: # BB#0:
814; SANDY-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [14:6.00]
815; SANDY-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [14:5.67]
816; SANDY-NEXT: retq # sched: [1:1.00]
817;
818; HASWELL-LABEL: test_pclmulqdq:
819; HASWELL: # BB#0:
Gadi Haberd76f7b82017-08-28 10:04:16 +0000820; HASWELL-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [11:2.00]
821; HASWELL-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [11:2.00]
822; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000823;
Gadi Haber85d99b42017-10-17 13:45:39 +0000824; BROADWELL-LABEL: test_pclmulqdq:
825; BROADWELL: # BB#0:
826; BROADWELL-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [11:2.00]
827; BROADWELL-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [11:2.00]
828; BROADWELL-NEXT: retq # sched: [2:1.00]
829;
Gadi Haber767d98b2017-08-30 08:08:50 +0000830; SKYLAKE-LABEL: test_pclmulqdq:
831; SKYLAKE: # BB#0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000832; SKYLAKE-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [6:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000833; SKYLAKE-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [12:1.00]
834; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000835;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000836; SKX-LABEL: test_pclmulqdq:
837; SKX: # BB#0:
838; SKX-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [6:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +0000839; SKX-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [12:1.00]
840; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000841;
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000842; BTVER2-LABEL: test_pclmulqdq:
843; BTVER2: # BB#0:
844; BTVER2-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
845; BTVER2-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
846; BTVER2-NEXT: retq # sched: [4:1.00]
847;
848; ZNVER1-LABEL: test_pclmulqdq:
849; ZNVER1: # BB#0:
850; ZNVER1-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [100:?]
851; ZNVER1-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [100:?]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000852; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000853 %1 = load <2 x i64>, <2 x i64> *%a2, align 16
854 %2 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, i8 0)
855 %3 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %1, <2 x i64> %2, i8 0)
856 ret <2 x i64> %3
857}
858declare <2 x i64> @llvm.x86.pclmulqdq(<2 x i64>, <2 x i64>, i8)