blob: 7b9471c70482151c74e80d3a5b7769f57d8fc064 [file] [log] [blame]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
Simon Pilgrim9eb08692017-08-18 15:08:30 +00002; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 -mattr=+sse4.2,+pclmul | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC
Simon Pilgrim7d71ed52017-04-23 21:00:25 +00003; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=slm | FileCheck %s --check-prefix=CHECK --check-prefix=SLM
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL
Gadi Haber767d98b2017-08-30 08:08:50 +00007; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE
Simon Pilgrim7d71ed52017-04-23 21:00:25 +00008; 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 +00009; 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 +000010
11define i32 @crc32_32_8(i32 %a0, i8 %a1, i8 *%a2) {
12; GENERIC-LABEL: crc32_32_8:
13; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +000014; GENERIC-NEXT: crc32b %sil, %edi # sched: [3:1.00]
15; GENERIC-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
16; GENERIC-NEXT: movl %edi, %eax # sched: [1:0.33]
17; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000018;
19; SLM-LABEL: crc32_32_8:
20; SLM: # BB#0:
21; SLM-NEXT: crc32b %sil, %edi # sched: [3:1.00]
22; SLM-NEXT: crc32b (%rdx), %edi # sched: [6:1.00]
23; SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
24; SLM-NEXT: retq # sched: [4:1.00]
25;
26; SANDY-LABEL: crc32_32_8:
27; SANDY: # BB#0:
28; SANDY-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +000029; SANDY-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000030; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +000031; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000032;
33; HASWELL-LABEL: crc32_32_8:
34; HASWELL: # BB#0:
35; HASWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
36; HASWELL-NEXT: crc32b (%rdx), %edi # sched: [7:1.00]
37; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +000038; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000039;
Gadi Haber767d98b2017-08-30 08:08:50 +000040; SKYLAKE-LABEL: crc32_32_8:
41; SKYLAKE: # BB#0:
42; SKYLAKE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +000043; SKYLAKE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +000044; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25]
45; SKYLAKE-NEXT: retq # sched: [2:1.00]
46;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000047; BTVER2-LABEL: crc32_32_8:
48; BTVER2: # BB#0:
49; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:1.00]
50; BTVER2-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
51; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.17]
52; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +000053;
54; ZNVER1-LABEL: crc32_32_8:
55; ZNVER1: # BB#0:
56; ZNVER1-NEXT: crc32b %sil, %edi # sched: [3:1.00]
57; ZNVER1-NEXT: crc32b (%rdx), %edi # sched: [10:1.00]
58; ZNVER1-NEXT: movl %edi, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +000059; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000060 %1 = call i32 @llvm.x86.sse42.crc32.32.8(i32 %a0, i8 %a1)
61 %2 = load i8, i8 *%a2
62 %3 = call i32 @llvm.x86.sse42.crc32.32.8(i32 %1, i8 %2)
63 ret i32 %3
64}
65declare i32 @llvm.x86.sse42.crc32.32.8(i32, i8) nounwind
66
67define i32 @crc32_32_16(i32 %a0, i16 %a1, i16 *%a2) {
68; GENERIC-LABEL: crc32_32_16:
69; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +000070; GENERIC-NEXT: crc32w %si, %edi # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +000071; GENERIC-NEXT: crc32w (%rdx), %edi # sched: [7:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +000072; GENERIC-NEXT: movl %edi, %eax # sched: [1:0.33]
73; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000074;
75; SLM-LABEL: crc32_32_16:
76; SLM: # BB#0:
77; SLM-NEXT: crc32w %si, %edi # sched: [3:1.00]
78; SLM-NEXT: crc32w (%rdx), %edi # sched: [6:1.00]
79; SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
80; SLM-NEXT: retq # sched: [4:1.00]
81;
82; SANDY-LABEL: crc32_32_16:
83; SANDY: # BB#0:
84; SANDY-NEXT: crc32w %si, %edi # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +000085; SANDY-NEXT: crc32w (%rdx), %edi # sched: [7:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000086; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +000087; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000088;
89; HASWELL-LABEL: crc32_32_16:
90; HASWELL: # BB#0:
91; HASWELL-NEXT: crc32w %si, %edi # sched: [3:1.00]
92; HASWELL-NEXT: crc32w (%rdx), %edi # sched: [7:1.00]
93; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +000094; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +000095;
Gadi Haber767d98b2017-08-30 08:08:50 +000096; SKYLAKE-LABEL: crc32_32_16:
97; SKYLAKE: # BB#0:
98; SKYLAKE-NEXT: crc32w %si, %edi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +000099; SKYLAKE-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000100; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25]
101; SKYLAKE-NEXT: retq # sched: [2:1.00]
102;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000103; BTVER2-LABEL: crc32_32_16:
104; BTVER2: # BB#0:
105; BTVER2-NEXT: crc32w %si, %edi # sched: [3:1.00]
106; BTVER2-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
107; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.17]
108; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000109;
110; ZNVER1-LABEL: crc32_32_16:
111; ZNVER1: # BB#0:
112; ZNVER1-NEXT: crc32w %si, %edi # sched: [3:1.00]
113; ZNVER1-NEXT: crc32w (%rdx), %edi # sched: [10:1.00]
114; ZNVER1-NEXT: movl %edi, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000115; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000116 %1 = call i32 @llvm.x86.sse42.crc32.32.16(i32 %a0, i16 %a1)
117 %2 = load i16, i16 *%a2
118 %3 = call i32 @llvm.x86.sse42.crc32.32.16(i32 %1, i16 %2)
119 ret i32 %3
120}
121declare i32 @llvm.x86.sse42.crc32.32.16(i32, i16) nounwind
122
123define i32 @crc32_32_32(i32 %a0, i32 %a1, i32 *%a2) {
124; GENERIC-LABEL: crc32_32_32:
125; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000126; GENERIC-NEXT: crc32l %esi, %edi # sched: [3:1.00]
127; GENERIC-NEXT: crc32l (%rdx), %edi # sched: [7:1.00]
128; GENERIC-NEXT: movl %edi, %eax # sched: [1:0.33]
129; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000130;
131; SLM-LABEL: crc32_32_32:
132; SLM: # BB#0:
133; SLM-NEXT: crc32l %esi, %edi # sched: [3:1.00]
134; SLM-NEXT: crc32l (%rdx), %edi # sched: [6:1.00]
135; SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
136; SLM-NEXT: retq # sched: [4:1.00]
137;
138; SANDY-LABEL: crc32_32_32:
139; SANDY: # BB#0:
140; SANDY-NEXT: crc32l %esi, %edi # sched: [3:1.00]
141; SANDY-NEXT: crc32l (%rdx), %edi # sched: [7:1.00]
142; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000143; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000144;
145; HASWELL-LABEL: crc32_32_32:
146; HASWELL: # BB#0:
147; HASWELL-NEXT: crc32l %esi, %edi # sched: [3:1.00]
148; HASWELL-NEXT: crc32l (%rdx), %edi # sched: [7:1.00]
149; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000150; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000151;
Gadi Haber767d98b2017-08-30 08:08:50 +0000152; SKYLAKE-LABEL: crc32_32_32:
153; SKYLAKE: # BB#0:
154; SKYLAKE-NEXT: crc32l %esi, %edi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000155; SKYLAKE-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000156; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25]
157; SKYLAKE-NEXT: retq # sched: [2:1.00]
158;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000159; BTVER2-LABEL: crc32_32_32:
160; BTVER2: # BB#0:
161; BTVER2-NEXT: crc32l %esi, %edi # sched: [3:1.00]
162; BTVER2-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
163; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.17]
164; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000165;
166; ZNVER1-LABEL: crc32_32_32:
167; ZNVER1: # BB#0:
168; ZNVER1-NEXT: crc32l %esi, %edi # sched: [3:1.00]
169; ZNVER1-NEXT: crc32l (%rdx), %edi # sched: [10:1.00]
170; ZNVER1-NEXT: movl %edi, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000171; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000172 %1 = call i32 @llvm.x86.sse42.crc32.32.32(i32 %a0, i32 %a1)
173 %2 = load i32, i32 *%a2
174 %3 = call i32 @llvm.x86.sse42.crc32.32.32(i32 %1, i32 %2)
175 ret i32 %3
176}
177declare i32 @llvm.x86.sse42.crc32.32.32(i32, i32) nounwind
178
179define i64 @crc32_64_8(i64 %a0, i8 %a1, i8 *%a2) nounwind {
180; GENERIC-LABEL: crc32_64_8:
181; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000182; GENERIC-NEXT: crc32b %sil, %edi # sched: [3:1.00]
183; GENERIC-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
184; GENERIC-NEXT: movq %rdi, %rax # sched: [1:0.33]
185; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000186;
187; SLM-LABEL: crc32_64_8:
188; SLM: # BB#0:
189; SLM-NEXT: crc32b %sil, %edi # sched: [3:1.00]
190; SLM-NEXT: crc32b (%rdx), %edi # sched: [6:1.00]
191; SLM-NEXT: movq %rdi, %rax # sched: [1:0.50]
192; SLM-NEXT: retq # sched: [4:1.00]
193;
194; SANDY-LABEL: crc32_64_8:
195; SANDY: # BB#0:
196; SANDY-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000197; SANDY-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000198; SANDY-NEXT: movq %rdi, %rax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000199; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000200;
201; HASWELL-LABEL: crc32_64_8:
202; HASWELL: # BB#0:
203; HASWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
204; HASWELL-NEXT: crc32b (%rdx), %edi # sched: [7:1.00]
205; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000206; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000207;
Gadi Haber767d98b2017-08-30 08:08:50 +0000208; SKYLAKE-LABEL: crc32_64_8:
209; SKYLAKE: # BB#0:
210; SKYLAKE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000211; SKYLAKE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000212; SKYLAKE-NEXT: movq %rdi, %rax # sched: [1:0.25]
213; SKYLAKE-NEXT: retq # sched: [2:1.00]
214;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000215; BTVER2-LABEL: crc32_64_8:
216; BTVER2: # BB#0:
217; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:1.00]
218; BTVER2-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
219; BTVER2-NEXT: movq %rdi, %rax # sched: [1:0.17]
220; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000221;
222; ZNVER1-LABEL: crc32_64_8:
223; ZNVER1: # BB#0:
224; ZNVER1-NEXT: crc32b %sil, %edi # sched: [3:1.00]
225; ZNVER1-NEXT: crc32b (%rdx), %edi # sched: [10:1.00]
226; ZNVER1-NEXT: movq %rdi, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000227; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000228 %1 = call i64 @llvm.x86.sse42.crc32.64.8(i64 %a0, i8 %a1)
229 %2 = load i8, i8 *%a2
230 %3 = call i64 @llvm.x86.sse42.crc32.64.8(i64 %1, i8 %2)
231 ret i64 %3
232}
233declare i64 @llvm.x86.sse42.crc32.64.8(i64, i8) nounwind
234
235define i64 @crc32_64_64(i64 %a0, i64 %a1, i64 *%a2) {
236; GENERIC-LABEL: crc32_64_64:
237; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000238; GENERIC-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +0000239; GENERIC-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +0000240; GENERIC-NEXT: movq %rdi, %rax # sched: [1:0.33]
241; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000242;
243; SLM-LABEL: crc32_64_64:
244; SLM: # BB#0:
245; SLM-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
246; SLM-NEXT: crc32q (%rdx), %rdi # sched: [6:1.00]
247; SLM-NEXT: movq %rdi, %rax # sched: [1:0.50]
248; SLM-NEXT: retq # sched: [4:1.00]
249;
250; SANDY-LABEL: crc32_64_64:
251; SANDY: # BB#0:
252; SANDY-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +0000253; SANDY-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000254; SANDY-NEXT: movq %rdi, %rax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000255; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000256;
257; HASWELL-LABEL: crc32_64_64:
258; HASWELL: # BB#0:
259; HASWELL-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
260; HASWELL-NEXT: crc32q (%rdx), %rdi # sched: [7:1.00]
261; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000262; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000263;
Gadi Haber767d98b2017-08-30 08:08:50 +0000264; SKYLAKE-LABEL: crc32_64_64:
265; SKYLAKE: # BB#0:
266; SKYLAKE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000267; SKYLAKE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000268; SKYLAKE-NEXT: movq %rdi, %rax # sched: [1:0.25]
269; SKYLAKE-NEXT: retq # sched: [2:1.00]
270;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000271; BTVER2-LABEL: crc32_64_64:
272; BTVER2: # BB#0:
273; BTVER2-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
274; BTVER2-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
275; BTVER2-NEXT: movq %rdi, %rax # sched: [1:0.17]
276; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000277;
278; ZNVER1-LABEL: crc32_64_64:
279; ZNVER1: # BB#0:
280; ZNVER1-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
281; ZNVER1-NEXT: crc32q (%rdx), %rdi # sched: [10:1.00]
282; ZNVER1-NEXT: movq %rdi, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000283; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000284 %1 = call i64 @llvm.x86.sse42.crc32.64.64(i64 %a0, i64 %a1)
285 %2 = load i64, i64 *%a2
286 %3 = call i64 @llvm.x86.sse42.crc32.64.64(i64 %1, i64 %2)
287 ret i64 %3
288}
289declare i64 @llvm.x86.sse42.crc32.64.64(i64, i64) nounwind
290
291define i32 @test_pcmpestri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
292; GENERIC-LABEL: test_pcmpestri:
293; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000294; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33]
295; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33]
296; GENERIC-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [4:2.67]
297; GENERIC-NEXT: movl %ecx, %esi # sched: [1:0.33]
298; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33]
299; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33]
300; GENERIC-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [4:2.33]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000301; GENERIC-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
Simon Pilgrim84846982017-08-01 15:14:35 +0000302; GENERIC-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
303; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000304;
305; SLM-LABEL: test_pcmpestri:
306; SLM: # BB#0:
307; SLM-NEXT: movl $7, %eax # sched: [1:0.50]
308; SLM-NEXT: movl $7, %edx # sched: [1:0.50]
309; SLM-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [21:21.00]
310; SLM-NEXT: movl $7, %eax # sched: [1:0.50]
311; SLM-NEXT: movl $7, %edx # sched: [1:0.50]
312; SLM-NEXT: movl %ecx, %esi # sched: [1:0.50]
313; SLM-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [21:21.00]
314; SLM-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
315; SLM-NEXT: leal (%rcx,%rsi), %eax # sched: [1:1.00]
316; SLM-NEXT: retq # sched: [4:1.00]
317;
318; SANDY-LABEL: test_pcmpestri:
319; SANDY: # BB#0:
320; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
321; SANDY-NEXT: movl $7, %edx # sched: [1:0.33]
322; SANDY-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [4:2.67]
323; SANDY-NEXT: movl %ecx, %esi # sched: [1:0.33]
324; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
325; SANDY-NEXT: movl $7, %edx # sched: [1:0.33]
326; SANDY-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [4:2.33]
327; SANDY-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
328; SANDY-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000329; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000330;
331; HASWELL-LABEL: test_pcmpestri:
332; HASWELL: # BB#0:
333; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
334; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000335; HASWELL-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000336; HASWELL-NEXT: movl %ecx, %esi # sched: [1:0.25]
337; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
338; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000339; HASWELL-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [18:4.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000340; HASWELL-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
341; HASWELL-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000342; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000343;
Gadi Haber767d98b2017-08-30 08:08:50 +0000344; SKYLAKE-LABEL: test_pcmpestri:
345; SKYLAKE: # BB#0:
346; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
347; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25]
348; SKYLAKE-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
349; SKYLAKE-NEXT: movl %ecx, %esi # sched: [1:0.25]
350; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
351; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25]
352; SKYLAKE-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [18:4.00]
353; SKYLAKE-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
354; SKYLAKE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
355; SKYLAKE-NEXT: retq # sched: [2:1.00]
356;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000357; BTVER2-LABEL: test_pcmpestri:
358; BTVER2: # BB#0:
359; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17]
360; BTVER2-NEXT: movl $7, %edx # sched: [1:0.17]
361; BTVER2-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [13:2.50]
362; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17]
363; BTVER2-NEXT: movl $7, %edx # sched: [1:0.17]
364; BTVER2-NEXT: movl %ecx, %esi # sched: [1:0.17]
365; BTVER2-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [18:2.50]
366; BTVER2-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
367; BTVER2-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
368; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000369;
370; ZNVER1-LABEL: test_pcmpestri:
371; ZNVER1: # BB#0:
372; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
373; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000374; ZNVER1-NEXT: vpcmpestri $7, %xmm1, %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000375; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
376; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25]
377; ZNVER1-NEXT: movl %ecx, %esi # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000378; ZNVER1-NEXT: vpcmpestri $7, (%rdi), %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000379; ZNVER1-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
380; ZNVER1-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000381; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000382 %1 = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7)
383 %2 = load <16 x i8>, <16 x i8> *%a2, align 16
384 %3 = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %2, i32 7, i8 7)
385 %4 = add i32 %1, %3
386 ret i32 %4
387}
388declare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
389
390define <16 x i8> @test_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
391; GENERIC-LABEL: test_pcmpestrm:
392; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000393; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33]
394; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33]
395; GENERIC-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [11:2.67]
396; GENERIC-NEXT: movl $7, %eax # sched: [1:0.33]
397; GENERIC-NEXT: movl $7, %edx # sched: [1:0.33]
398; GENERIC-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33]
399; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000400;
401; SLM-LABEL: test_pcmpestrm:
402; SLM: # BB#0:
403; SLM-NEXT: movl $7, %eax # sched: [1:0.50]
404; SLM-NEXT: movl $7, %edx # sched: [1:0.50]
405; SLM-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [17:17.00]
406; SLM-NEXT: movl $7, %eax # sched: [1:0.50]
407; SLM-NEXT: movl $7, %edx # sched: [1:0.50]
408; SLM-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [17:17.00]
409; SLM-NEXT: retq # sched: [4:1.00]
410;
411; SANDY-LABEL: test_pcmpestrm:
412; SANDY: # BB#0:
413; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
414; SANDY-NEXT: movl $7, %edx # sched: [1:0.33]
415; SANDY-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [11:2.67]
416; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
417; SANDY-NEXT: movl $7, %edx # sched: [1:0.33]
418; SANDY-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000419; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000420;
421; HASWELL-LABEL: test_pcmpestrm:
422; HASWELL: # BB#0:
423; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
424; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000425; HASWELL-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000426; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
427; HASWELL-NEXT: movl $7, %edx # sched: [1:0.25]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000428; HASWELL-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:4.00]
429; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000430;
Gadi Haber767d98b2017-08-30 08:08:50 +0000431; SKYLAKE-LABEL: test_pcmpestrm:
432; SKYLAKE: # BB#0:
433; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
434; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25]
435; SKYLAKE-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
436; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
437; SKYLAKE-NEXT: movl $7, %edx # sched: [1:0.25]
438; SKYLAKE-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:4.00]
439; SKYLAKE-NEXT: retq # sched: [2:1.00]
440;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000441; BTVER2-LABEL: test_pcmpestrm:
442; BTVER2: # BB#0:
443; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17]
444; BTVER2-NEXT: movl $7, %edx # sched: [1:0.17]
445; BTVER2-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [13:2.50]
446; BTVER2-NEXT: movl $7, %eax # sched: [1:0.17]
447; BTVER2-NEXT: movl $7, %edx # sched: [1:0.17]
448; BTVER2-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [18:2.50]
449; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000450;
451; ZNVER1-LABEL: test_pcmpestrm:
452; ZNVER1: # BB#0:
453; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
454; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000455; ZNVER1-NEXT: vpcmpestrm $7, %xmm1, %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000456; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
457; ZNVER1-NEXT: movl $7, %edx # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000458; ZNVER1-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [100:?]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000459; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000460 %1 = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7)
461 %2 = load <16 x i8>, <16 x i8> *%a2, align 16
462 %3 = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %1, i32 7, <16 x i8> %2, i32 7, i8 7)
463 ret <16 x i8> %3
464}
465declare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
466
467define i32 @test_pcmpistri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
468; GENERIC-LABEL: test_pcmpistri:
469; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000470; GENERIC-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
471; GENERIC-NEXT: movl %ecx, %eax # sched: [1:0.33]
472; GENERIC-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000473; GENERIC-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
Simon Pilgrim84846982017-08-01 15:14:35 +0000474; GENERIC-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
475; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000476;
477; SLM-LABEL: test_pcmpistri:
478; SLM: # BB#0:
479; SLM-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [17:17.00]
480; SLM-NEXT: movl %ecx, %eax # sched: [1:0.50]
481; SLM-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [17:17.00]
482; SLM-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
483; SLM-NEXT: leal (%rcx,%rax), %eax # sched: [1:1.00]
484; SLM-NEXT: retq # sched: [4:1.00]
485;
486; SANDY-LABEL: test_pcmpistri:
487; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000488; SANDY-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000489; SANDY-NEXT: movl %ecx, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000490; SANDY-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000491; SANDY-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
492; SANDY-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000493; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000494;
495; HASWELL-LABEL: test_pcmpistri:
496; HASWELL: # BB#0:
497; HASWELL-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
498; HASWELL-NEXT: movl %ecx, %eax # sched: [1:0.25]
499; HASWELL-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [11:3.00]
500; HASWELL-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
501; HASWELL-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000502; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000503;
Gadi Haber767d98b2017-08-30 08:08:50 +0000504; SKYLAKE-LABEL: test_pcmpistri:
505; SKYLAKE: # BB#0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000506; SKYLAKE-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000507; SKYLAKE-NEXT: movl %ecx, %eax # sched: [1:0.25]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000508; SKYLAKE-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [10:3.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000509; SKYLAKE-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
510; SKYLAKE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
511; SKYLAKE-NEXT: retq # sched: [2:1.00]
512;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000513; BTVER2-LABEL: test_pcmpistri:
514; BTVER2: # BB#0:
515; BTVER2-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [6:1.00]
516; BTVER2-NEXT: movl %ecx, %eax # sched: [1:0.17]
517; BTVER2-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [11:1.00]
518; BTVER2-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
519; BTVER2-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
520; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000521;
522; ZNVER1-LABEL: test_pcmpistri:
523; ZNVER1: # BB#0:
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000524; ZNVER1-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000525; ZNVER1-NEXT: movl %ecx, %eax # sched: [1:0.25]
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000526; ZNVER1-NEXT: vpcmpistri $7, (%rdi), %xmm0 # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +0000527; ZNVER1-NEXT: # kill: %ECX<def> %ECX<kill> %RCX<def>
528; ZNVER1-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000529; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000530 %1 = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %a1, i8 7)
531 %2 = load <16 x i8>, <16 x i8> *%a2, align 16
532 %3 = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %2, i8 7)
533 %4 = add i32 %1, %3
534 ret i32 %4
535}
536declare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone
537
538define <16 x i8> @test_pcmpistrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
539; GENERIC-LABEL: test_pcmpistrm:
540; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000541; GENERIC-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
542; GENERIC-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
543; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000544;
545; SLM-LABEL: test_pcmpistrm:
546; SLM: # BB#0:
547; SLM-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [13:13.00]
548; SLM-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [13:13.00]
549; SLM-NEXT: retq # sched: [4:1.00]
550;
551; SANDY-LABEL: test_pcmpistrm:
552; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000553; SANDY-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
554; SANDY-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
555; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000556;
557; HASWELL-LABEL: test_pcmpistrm:
558; HASWELL: # BB#0:
Gadi Haberd76f7b82017-08-28 10:04:16 +0000559; HASWELL-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
560; HASWELL-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [11:3.00]
561; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000562;
Gadi Haber767d98b2017-08-30 08:08:50 +0000563; SKYLAKE-LABEL: test_pcmpistrm:
564; SKYLAKE: # BB#0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000565; SKYLAKE-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00]
566; SKYLAKE-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [10:3.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000567; SKYLAKE-NEXT: retq # sched: [2:1.00]
568;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000569; BTVER2-LABEL: test_pcmpistrm:
570; BTVER2: # BB#0:
571; BTVER2-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [7:1.00]
572; BTVER2-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [12:1.00]
573; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000574;
575; ZNVER1-LABEL: test_pcmpistrm:
576; ZNVER1: # BB#0:
Andrew V. Tischenkod1fefa32017-07-26 18:55:14 +0000577; ZNVER1-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [100:?]
578; ZNVER1-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [100:?]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000579; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000580 %1 = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1, i8 7)
581 %2 = load <16 x i8>, <16 x i8> *%a2, align 16
582 %3 = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %1, <16 x i8> %2, i8 7)
583 ret <16 x i8> %3
584}
585declare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone
586
587define <2 x i64> @test_pcmpgtq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
588; GENERIC-LABEL: test_pcmpgtq:
589; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000590; GENERIC-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [5:1.00]
591; GENERIC-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [11:1.00]
592; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000593;
594; SLM-LABEL: test_pcmpgtq:
595; SLM: # BB#0:
Simon Pilgrim06d62632017-04-23 21:23:27 +0000596; SLM-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [1:0.50]
597; SLM-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [4:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000598; SLM-NEXT: retq # sched: [4:1.00]
599;
600; SANDY-LABEL: test_pcmpgtq:
601; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000602; SANDY-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
603; SANDY-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
604; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000605;
606; HASWELL-LABEL: test_pcmpgtq:
607; HASWELL: # BB#0:
608; HASWELL-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
609; HASWELL-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haberd76f7b82017-08-28 10:04:16 +0000610; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000611;
Gadi Haber767d98b2017-08-30 08:08:50 +0000612; SKYLAKE-LABEL: test_pcmpgtq:
613; SKYLAKE: # BB#0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000614; SKYLAKE-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
615; SKYLAKE-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000616; SKYLAKE-NEXT: retq # sched: [2:1.00]
617;
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000618; BTVER2-LABEL: test_pcmpgtq:
619; BTVER2: # BB#0:
Simon Pilgrim06d62632017-04-23 21:23:27 +0000620; BTVER2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
621; BTVER2-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000622; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000623;
624; ZNVER1-LABEL: test_pcmpgtq:
625; ZNVER1: # BB#0:
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000626; ZNVER1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
Craig Topper106b5b62017-07-19 02:45:14 +0000627; ZNVER1-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000628; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim7d71ed52017-04-23 21:00:25 +0000629 %1 = icmp sgt <2 x i64> %a0, %a1
630 %2 = sext <2 x i1> %1 to <2 x i64>
631 %3 = load <2 x i64>, <2 x i64>*%a2, align 16
632 %4 = icmp sgt <2 x i64> %2, %3
633 %5 = sext <2 x i1> %4 to <2 x i64>
634 ret <2 x i64> %5
635}
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000636
637define <2 x i64> @test_pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
638; GENERIC-LABEL: test_pclmulqdq:
639; GENERIC: # BB#0:
640; GENERIC-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [14:6.00]
641; GENERIC-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [14:5.67]
642; GENERIC-NEXT: retq # sched: [1:1.00]
643;
644; SLM-LABEL: test_pclmulqdq:
645; SLM: # BB#0:
646; SLM-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [10:10.00]
647; SLM-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [10:10.00]
648; SLM-NEXT: retq # sched: [4:1.00]
649;
650; SANDY-LABEL: test_pclmulqdq:
651; SANDY: # BB#0:
652; SANDY-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [14:6.00]
653; SANDY-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [14:5.67]
654; SANDY-NEXT: retq # sched: [1:1.00]
655;
656; HASWELL-LABEL: test_pclmulqdq:
657; HASWELL: # BB#0:
Gadi Haberd76f7b82017-08-28 10:04:16 +0000658; HASWELL-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [11:2.00]
659; HASWELL-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [11:2.00]
660; HASWELL-NEXT: retq # sched: [2:1.00]
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000661;
Gadi Haber767d98b2017-08-30 08:08:50 +0000662; SKYLAKE-LABEL: test_pclmulqdq:
663; SKYLAKE: # BB#0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000664; SKYLAKE-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [6:1.00]
665; SKYLAKE-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000666; SKYLAKE-NEXT: retq # sched: [2:1.00]
667;
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000668; BTVER2-LABEL: test_pclmulqdq:
669; BTVER2: # BB#0:
670; BTVER2-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
671; BTVER2-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
672; BTVER2-NEXT: retq # sched: [4:1.00]
673;
674; ZNVER1-LABEL: test_pclmulqdq:
675; ZNVER1: # BB#0:
676; ZNVER1-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [100:?]
677; ZNVER1-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [100:?]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000678; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim9eb08692017-08-18 15:08:30 +0000679 %1 = load <2 x i64>, <2 x i64> *%a2, align 16
680 %2 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, i8 0)
681 %3 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %1, <2 x i64> %2, i8 0)
682 ret <2 x i64> %3
683}
684declare <2 x i64> @llvm.x86.pclmulqdq(<2 x i64>, <2 x i64>, i8)