blob: 47d9a628d64160bc8c92700b9e956285ccfd7331 [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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000015; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000022; SLM: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000023; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000029; SANDY: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000030; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000036; HASWELL: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000037; HASWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +000038; HASWELL-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000039; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +000040; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000041;
Gadi Haber85d99b42017-10-17 13:45:39 +000042; BROADWELL-LABEL: crc32_32_8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000043; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +000044; BROADWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +000045; BROADWELL-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +000046; BROADWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +000047; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +000048;
Gadi Haber767d98b2017-08-30 08:08:50 +000049; SKYLAKE-LABEL: crc32_32_8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000050; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +000051; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000057; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +000058; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000064; BTVER2: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000065; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:1.00]
66; BTVER2-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Andrew V. Tischenko44cfc512017-12-07 11:19:49 +000067; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000068; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +000069;
70; ZNVER1-LABEL: crc32_32_8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000071; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +000072; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000085; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000092; SLM: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000093; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000099; SANDY: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000100; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000106; HASWELL: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000107; HASWELL-NEXT: crc32w %si, %edi # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000108; HASWELL-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000109; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000110; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000111;
Gadi Haber85d99b42017-10-17 13:45:39 +0000112; BROADWELL-LABEL: crc32_32_16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000113; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000114; BROADWELL-NEXT: crc32w %si, %edi # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000115; BROADWELL-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000116; BROADWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000117; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000118;
Gadi Haber767d98b2017-08-30 08:08:50 +0000119; SKYLAKE-LABEL: crc32_32_16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000120; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +0000121; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000127; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000128; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000134; BTVER2: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000135; BTVER2-NEXT: crc32w %si, %edi # sched: [3:1.00]
136; BTVER2-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
Andrew V. Tischenko44cfc512017-12-07 11:19:49 +0000137; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000138; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000139;
140; ZNVER1-LABEL: crc32_32_16:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000141; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000142; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000155; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000162; SLM: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000163; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000169; SANDY: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000170; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000176; HASWELL: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000177; HASWELL-NEXT: crc32l %esi, %edi # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000178; HASWELL-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000179; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000180; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000181;
Gadi Haber85d99b42017-10-17 13:45:39 +0000182; BROADWELL-LABEL: crc32_32_32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000183; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000184; BROADWELL-NEXT: crc32l %esi, %edi # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000185; BROADWELL-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000186; BROADWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000187; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000188;
Gadi Haber767d98b2017-08-30 08:08:50 +0000189; SKYLAKE-LABEL: crc32_32_32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000190; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +0000191; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000197; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000198; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000204; BTVER2: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000205; BTVER2-NEXT: crc32l %esi, %edi # sched: [3:1.00]
206; BTVER2-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
Andrew V. Tischenko44cfc512017-12-07 11:19:49 +0000207; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000208; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000209;
210; ZNVER1-LABEL: crc32_32_32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000211; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000212; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000225; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000232; SLM: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000233; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000239; SANDY: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000240; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000246; HASWELL: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000247; HASWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000248; HASWELL-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000249; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000250; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000251;
Gadi Haber85d99b42017-10-17 13:45:39 +0000252; BROADWELL-LABEL: crc32_64_8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000253; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000254; BROADWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000255; BROADWELL-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000256; BROADWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000257; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000258;
Gadi Haber767d98b2017-08-30 08:08:50 +0000259; SKYLAKE-LABEL: crc32_64_8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000260; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +0000261; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000267; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000268; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000274; BTVER2: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000275; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:1.00]
276; BTVER2-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Andrew V. Tischenko44cfc512017-12-07 11:19:49 +0000277; BTVER2-NEXT: movq %rdi, %rax # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000278; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000279;
280; ZNVER1-LABEL: crc32_64_8:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000281; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000282; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000295; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000302; SLM: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000303; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000309; SANDY: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000310; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000316; HASWELL: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000317; HASWELL-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000318; HASWELL-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000319; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000320; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000321;
Gadi Haber85d99b42017-10-17 13:45:39 +0000322; BROADWELL-LABEL: crc32_64_64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000323; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000324; BROADWELL-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000325; BROADWELL-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000326; BROADWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000327; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000328;
Gadi Haber767d98b2017-08-30 08:08:50 +0000329; SKYLAKE-LABEL: crc32_64_64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000330; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +0000331; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000337; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000338; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000344; BTVER2: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000345; BTVER2-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
346; BTVER2-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
Andrew V. Tischenko44cfc512017-12-07 11:19:49 +0000347; BTVER2-NEXT: movq %rdi, %rax # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000348; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000349;
350; ZNVER1-LABEL: crc32_64_64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000351; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000352; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000365; 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]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000373; GENERIC-NEXT: # kill: def %ecx killed %ecx def %rcx
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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000378; SLM: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000379; 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]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000386; SLM-NEXT: # kill: def %ecx killed %ecx def %rcx
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000387; SLM-NEXT: leal (%rcx,%rsi), %eax # sched: [1:1.00]
388; SLM-NEXT: retq # sched: [4:1.00]
389;
390; SANDY-LABEL: test_pcmpestri:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000391; SANDY: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000392; 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]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000399; SANDY-NEXT: # kill: def %ecx killed %ecx def %rcx
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000400; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000404; HASWELL: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000405; 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 Haber2cf601f2017-12-08 09:48:44 +0000411; HASWELL-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000412; HASWELL-NEXT: # kill: def %ecx killed %ecx def %rcx
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000413; HASWELL-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000414; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000415;
Gadi Haber85d99b42017-10-17 13:45:39 +0000416; BROADWELL-LABEL: test_pcmpestri:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000417; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000418; 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]
Gadi Haber323f2e12017-10-24 20:19:47 +0000424; BROADWELL-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [23:4.00]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000425; BROADWELL-NEXT: # kill: def %ecx killed %ecx def %rcx
Gadi Haber85d99b42017-10-17 13:45:39 +0000426; BROADWELL-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
Gadi Haber323f2e12017-10-24 20:19:47 +0000427; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000428;
Gadi Haber767d98b2017-08-30 08:08:50 +0000429; SKYLAKE-LABEL: test_pcmpestri:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000430; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +0000431; 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]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000438; SKYLAKE-NEXT: # kill: def %ecx killed %ecx def %rcx
Gadi Haber767d98b2017-08-30 08:08:50 +0000439; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000443; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000444; 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]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000451; SKX-NEXT: # kill: def %ecx killed %ecx def %rcx
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000452; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000456; BTVER2: # %bb.0:
Andrew V. Tischenko44cfc512017-12-07 11:19:49 +0000457; BTVER2-NEXT: movl $7, %eax # sched: [1:0.50]
458; BTVER2-NEXT: movl $7, %edx # sched: [1:0.50]
Andrew V. Tischenko26dde772017-11-27 09:58:00 +0000459; BTVER2-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [14:10.00]
Andrew V. Tischenko44cfc512017-12-07 11:19:49 +0000460; BTVER2-NEXT: movl $7, %eax # sched: [1:0.50]
461; BTVER2-NEXT: movl $7, %edx # sched: [1:0.50]
462; BTVER2-NEXT: movl %ecx, %esi # sched: [1:0.50]
Andrew V. Tischenko26dde772017-11-27 09:58:00 +0000463; BTVER2-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [19:10.00]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000464; BTVER2-NEXT: # kill: def %ecx killed %ecx def %rcx
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000465; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000469; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000470; 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:?]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000477; ZNVER1-NEXT: # kill: def %ecx killed %ecx def %rcx
Craig Topper106b5b62017-07-19 02:45:14 +0000478; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000490; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000500; SLM: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000501; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000510; SANDY: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000511; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000520; HASWELL: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000521; 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 Haber2cf601f2017-12-08 09:48:44 +0000526; HASWELL-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
527; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000528;
Gadi Haber85d99b42017-10-17 13:45:39 +0000529; BROADWELL-LABEL: test_pcmpestrm:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000530; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000531; 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]
Gadi Haber323f2e12017-10-24 20:19:47 +0000536; BROADWELL-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [24:4.00]
537; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000538;
Gadi Haber767d98b2017-08-30 08:08:50 +0000539; SKYLAKE-LABEL: test_pcmpestrm:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000540; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +0000541; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000550; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000551; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000560; BTVER2: # %bb.0:
Andrew V. Tischenko44cfc512017-12-07 11:19:49 +0000561; BTVER2-NEXT: movl $7, %eax # sched: [1:0.50]
562; BTVER2-NEXT: movl $7, %edx # sched: [1:0.50]
Andrew V. Tischenko26dde772017-11-27 09:58:00 +0000563; BTVER2-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [14:10.00]
Andrew V. Tischenko44cfc512017-12-07 11:19:49 +0000564; BTVER2-NEXT: movl $7, %eax # sched: [1:0.50]
565; BTVER2-NEXT: movl $7, %edx # sched: [1:0.50]
Andrew V. Tischenko26dde772017-11-27 09:58:00 +0000566; BTVER2-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:10.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000567; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000568;
569; ZNVER1-LABEL: test_pcmpestrm:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000570; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000571; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000587; 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]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000591; GENERIC-NEXT: # kill: def %ecx killed %ecx def %rcx
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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000596; SLM: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000597; 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]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000600; SLM-NEXT: # kill: def %ecx killed %ecx def %rcx
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000601; SLM-NEXT: leal (%rcx,%rax), %eax # sched: [1:1.00]
602; SLM-NEXT: retq # sched: [4:1.00]
603;
604; SANDY-LABEL: test_pcmpistri:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000605; 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]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000609; SANDY-NEXT: # kill: def %ecx killed %ecx def %rcx
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000610; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000614; HASWELL: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000615; HASWELL-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
616; HASWELL-NEXT: movl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000617; HASWELL-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000618; HASWELL-NEXT: # kill: def %ecx killed %ecx def %rcx
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000619; HASWELL-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000620; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000621;
Gadi Haber85d99b42017-10-17 13:45:39 +0000622; BROADWELL-LABEL: test_pcmpistri:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000623; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000624; BROADWELL-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
625; BROADWELL-NEXT: movl %ecx, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000626; BROADWELL-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000627; BROADWELL-NEXT: # kill: def %ecx killed %ecx def %rcx
Gadi Haber85d99b42017-10-17 13:45:39 +0000628; BROADWELL-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
Gadi Haber323f2e12017-10-24 20:19:47 +0000629; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000630;
Gadi Haber767d98b2017-08-30 08:08:50 +0000631; SKYLAKE-LABEL: test_pcmpistri:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000632; 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]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000636; SKYLAKE-NEXT: # kill: def %ecx killed %ecx def %rcx
Gadi Haber767d98b2017-08-30 08:08:50 +0000637; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000641; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000642; 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]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000645; SKX-NEXT: # kill: def %ecx killed %ecx def %rcx
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000646; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000650; BTVER2: # %bb.0:
Andrew V. Tischenko26dde772017-11-27 09:58:00 +0000651; BTVER2-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [7:2.00]
Andrew V. Tischenko44cfc512017-12-07 11:19:49 +0000652; BTVER2-NEXT: movl %ecx, %eax # sched: [1:0.50]
Andrew V. Tischenko26dde772017-11-27 09:58:00 +0000653; BTVER2-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [12:2.00]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000654; BTVER2-NEXT: # kill: def %ecx killed %ecx def %rcx
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000655; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000659; 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:?]
Francis Visoiu Mistriha8a83d12017-12-07 10:40:31 +0000663; ZNVER1-NEXT: # kill: def %ecx killed %ecx def %rcx
Craig Topper106b5b62017-07-19 02:45:14 +0000664; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000676; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000682; SLM: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000683; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000688; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000694; HASWELL: # %bb.0:
Gadi Haberd76f7b82017-08-28 10:04:16 +0000695; HASWELL-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000696; HASWELL-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
697; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000698;
Gadi Haber85d99b42017-10-17 13:45:39 +0000699; BROADWELL-LABEL: test_pcmpistrm:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000700; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000701; BROADWELL-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000702; BROADWELL-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
703; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000704;
Gadi Haber767d98b2017-08-30 08:08:50 +0000705; SKYLAKE-LABEL: test_pcmpistrm:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000706; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000712; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000713; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000718; BTVER2: # %bb.0:
Andrew V. Tischenko26dde772017-11-27 09:58:00 +0000719; BTVER2-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [8:2.00]
720; BTVER2-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [13:2.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000721; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000722;
723; ZNVER1-LABEL: test_pcmpistrm:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000724; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000737; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000743; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000749; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000755; HASWELL: # %bb.0:
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000756; HASWELL-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000757; HASWELL-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
758; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000759;
Gadi Haber85d99b42017-10-17 13:45:39 +0000760; BROADWELL-LABEL: test_pcmpgtq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000761; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000762; BROADWELL-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000763; BROADWELL-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
764; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000765;
Gadi Haber767d98b2017-08-30 08:08:50 +0000766; SKYLAKE-LABEL: test_pcmpgtq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000767; 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:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000773; SKX: # %bb.0:
Craig Topperc4d2dd82018-01-09 18:14:22 +0000774; SKX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
775; SKX-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +0000776; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000777;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000778; BTVER2-LABEL: test_pcmpgtq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000779; BTVER2: # %bb.0:
Simon Pilgrim06d62632017-04-23 21:23:27 +0000780; BTVER2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
781; BTVER2-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000782; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000783;
784; ZNVER1-LABEL: test_pcmpgtq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000785; ZNVER1: # %bb.0:
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000786; ZNVER1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
Craig Topper106b5b62017-07-19 02:45:14 +0000787; ZNVER1-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000788; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000789 %1 = icmp sgt <2 x i64> %a0, %a1
790 %2 = sext <2 x i1> %1 to <2 x i64>
791 %3 = load <2 x i64>, <2 x i64>*%a2, align 16
792 %4 = icmp sgt <2 x i64> %2, %3
793 %5 = sext <2 x i1> %4 to <2 x i64>
794 ret <2 x i64> %5
795}
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000796
797define <2 x i64> @test_pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
798; GENERIC-LABEL: test_pclmulqdq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000799; GENERIC: # %bb.0:
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000800; GENERIC-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [14:6.00]
801; GENERIC-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [14:5.67]
802; GENERIC-NEXT: retq # sched: [1:1.00]
803;
804; SLM-LABEL: test_pclmulqdq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000805; SLM: # %bb.0:
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000806; SLM-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [10:10.00]
807; SLM-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [10:10.00]
808; SLM-NEXT: retq # sched: [4:1.00]
809;
810; SANDY-LABEL: test_pclmulqdq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000811; SANDY: # %bb.0:
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000812; SANDY-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [14:6.00]
813; SANDY-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [14:5.67]
814; SANDY-NEXT: retq # sched: [1:1.00]
815;
816; HASWELL-LABEL: test_pclmulqdq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000817; HASWELL: # %bb.0:
Gadi Haberd76f7b82017-08-28 10:04:16 +0000818; HASWELL-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [11:2.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000819; HASWELL-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [17:2.00]
820; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000821;
Gadi Haber85d99b42017-10-17 13:45:39 +0000822; BROADWELL-LABEL: test_pclmulqdq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000823; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +0000824; BROADWELL-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
825; BROADWELL-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
826; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000827;
Gadi Haber767d98b2017-08-30 08:08:50 +0000828; SKYLAKE-LABEL: test_pclmulqdq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000829; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000830; SKYLAKE-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [6:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000831; SKYLAKE-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [12:1.00]
832; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000833;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000834; SKX-LABEL: test_pclmulqdq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000835; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000836; SKX-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [6:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +0000837; SKX-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [12:1.00]
838; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000839;
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000840; BTVER2-LABEL: test_pclmulqdq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000841; BTVER2: # %bb.0:
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000842; BTVER2-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
843; BTVER2-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
844; BTVER2-NEXT: retq # sched: [4:1.00]
845;
846; ZNVER1-LABEL: test_pclmulqdq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000847; ZNVER1: # %bb.0:
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000848; ZNVER1-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [100:?]
849; ZNVER1-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [100:?]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000850; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000851 %1 = load <2 x i64>, <2 x i64> *%a2, align 16
852 %2 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, i8 0)
853 %3 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %1, <2 x i64> %2, i8 0)
854 ret <2 x i64> %3
855}
856declare <2 x i64> @llvm.x86.pclmulqdq(<2 x i64>, <2 x i64>, i8)