blob: 8df3c670d4d4776733371f6d7bcef540bd033ede [file] [log] [blame]
Simon Pilgrimb884b202017-07-16 14:09:15 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
Simon Pilgrim84846982017-08-01 15:14:35 +00002; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 -mattr=+bmi2 | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC
Gadi Haber85d99b42017-10-17 13:45:39 +00003; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell | FileCheck %s --check-prefix=CHECK --check-prefix=BROADWELL
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=knl | FileCheck %s --check-prefix=CHECK --check-prefix=KNL
Gadi Habera7530802017-09-13 09:28:25 +00007; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1
Simon Pilgrimb884b202017-07-16 14:09:15 +00008
9define i32 @test_bzhi_i32(i32 %a0, i32 %a1, i32 *%a2) {
10; GENERIC-LABEL: test_bzhi_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000011; GENERIC: # %bb.0:
Simon Pilgrim8a83f162018-04-06 11:00:51 +000012; GENERIC-NEXT: bzhil %edi, (%rdx), %ecx # sched: [6:1.00]
Craig Topper89310f52018-03-29 20:41:39 +000013; GENERIC-NEXT: bzhil %edi, %esi, %eax # sched: [1:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +000014; GENERIC-NEXT: addl %ecx, %eax # sched: [1:0.33]
15; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrimb884b202017-07-16 14:09:15 +000016;
Gadi Haber1e0f1f42017-10-17 06:47:04 +000017; HASWELL-LABEL: test_bzhi_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000018; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +000019; HASWELL-NEXT: bzhil %edi, (%rdx), %ecx # sched: [6:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +000020; HASWELL-NEXT: bzhil %edi, %esi, %eax # sched: [1:0.50]
21; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +000022; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +000023;
Gadi Haber85d99b42017-10-17 13:45:39 +000024; BROADWELL-LABEL: test_bzhi_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000025; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +000026; BROADWELL-NEXT: bzhil %edi, (%rdx), %ecx # sched: [6:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +000027; BROADWELL-NEXT: bzhil %edi, %esi, %eax # sched: [1:0.50]
28; BROADWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +000029; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +000030;
Gadi Haber1e0f1f42017-10-17 06:47:04 +000031; SKYLAKE-LABEL: test_bzhi_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000032; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +000033; SKYLAKE-NEXT: bzhil %edi, (%rdx), %ecx # sched: [6:0.50]
34; SKYLAKE-NEXT: bzhil %edi, %esi, %eax # sched: [1:0.50]
35; SKYLAKE-NEXT: addl %ecx, %eax # sched: [1:0.25]
36; SKYLAKE-NEXT: retq # sched: [7:1.00]
37;
38; KNL-LABEL: test_bzhi_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000039; KNL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +000040; KNL-NEXT: bzhil %edi, (%rdx), %ecx # sched: [6:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +000041; KNL-NEXT: bzhil %edi, %esi, %eax # sched: [1:0.50]
42; KNL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +000043; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +000044;
Simon Pilgrimb884b202017-07-16 14:09:15 +000045; ZNVER1-LABEL: test_bzhi_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000046; ZNVER1: # %bb.0:
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +000047; ZNVER1-NEXT: bzhil %edi, (%rdx), %ecx # sched: [5:0.50]
48; ZNVER1-NEXT: bzhil %edi, %esi, %eax # sched: [1:0.25]
Craig Topper106b5b62017-07-19 02:45:14 +000049; ZNVER1-NEXT: addl %ecx, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +000050; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrimb884b202017-07-16 14:09:15 +000051 %1 = load i32, i32 *%a2
52 %2 = tail call i32 @llvm.x86.bmi.bzhi.32(i32 %1, i32 %a0)
53 %3 = tail call i32 @llvm.x86.bmi.bzhi.32(i32 %a1, i32 %a0)
54 %4 = add i32 %2, %3
55 ret i32 %4
56}
57declare i32 @llvm.x86.bmi.bzhi.32(i32, i32)
58
59define i64 @test_bzhi_i64(i64 %a0, i64 %a1, i64 *%a2) {
60; GENERIC-LABEL: test_bzhi_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000061; GENERIC: # %bb.0:
Simon Pilgrim8a83f162018-04-06 11:00:51 +000062; GENERIC-NEXT: bzhiq %rdi, (%rdx), %rcx # sched: [6:1.00]
Craig Topper89310f52018-03-29 20:41:39 +000063; GENERIC-NEXT: bzhiq %rdi, %rsi, %rax # sched: [1:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +000064; GENERIC-NEXT: addq %rcx, %rax # sched: [1:0.33]
65; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrimb884b202017-07-16 14:09:15 +000066;
Gadi Haber1e0f1f42017-10-17 06:47:04 +000067; HASWELL-LABEL: test_bzhi_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000068; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +000069; HASWELL-NEXT: bzhiq %rdi, (%rdx), %rcx # sched: [6:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +000070; HASWELL-NEXT: bzhiq %rdi, %rsi, %rax # sched: [1:0.50]
71; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +000072; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +000073;
Gadi Haber85d99b42017-10-17 13:45:39 +000074; BROADWELL-LABEL: test_bzhi_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000075; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +000076; BROADWELL-NEXT: bzhiq %rdi, (%rdx), %rcx # sched: [6:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +000077; BROADWELL-NEXT: bzhiq %rdi, %rsi, %rax # sched: [1:0.50]
78; BROADWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +000079; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +000080;
Gadi Haber1e0f1f42017-10-17 06:47:04 +000081; SKYLAKE-LABEL: test_bzhi_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000082; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +000083; SKYLAKE-NEXT: bzhiq %rdi, (%rdx), %rcx # sched: [6:0.50]
84; SKYLAKE-NEXT: bzhiq %rdi, %rsi, %rax # sched: [1:0.50]
85; SKYLAKE-NEXT: addq %rcx, %rax # sched: [1:0.25]
86; SKYLAKE-NEXT: retq # sched: [7:1.00]
87;
88; KNL-LABEL: test_bzhi_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000089; KNL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +000090; KNL-NEXT: bzhiq %rdi, (%rdx), %rcx # sched: [6:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +000091; KNL-NEXT: bzhiq %rdi, %rsi, %rax # sched: [1:0.50]
92; KNL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +000093; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +000094;
Simon Pilgrimb884b202017-07-16 14:09:15 +000095; ZNVER1-LABEL: test_bzhi_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000096; ZNVER1: # %bb.0:
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +000097; ZNVER1-NEXT: bzhiq %rdi, (%rdx), %rcx # sched: [5:0.50]
98; ZNVER1-NEXT: bzhiq %rdi, %rsi, %rax # sched: [1:0.25]
Craig Topper106b5b62017-07-19 02:45:14 +000099; ZNVER1-NEXT: addq %rcx, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000100; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrimb884b202017-07-16 14:09:15 +0000101 %1 = load i64, i64 *%a2
102 %2 = tail call i64 @llvm.x86.bmi.bzhi.64(i64 %1, i64 %a0)
103 %3 = tail call i64 @llvm.x86.bmi.bzhi.64(i64 %a1, i64 %a0)
104 %4 = add i64 %2, %3
105 ret i64 %4
106}
107declare i64 @llvm.x86.bmi.bzhi.64(i64, i64)
108
Simon Pilgrim5af7a6d2017-12-13 22:43:55 +0000109define void @test_mulx_i32(i32 %a0, i32 %a1, i32* %a2) optsize {
110; GENERIC-LABEL: test_mulx_i32:
111; GENERIC: # %bb.0:
112; GENERIC-NEXT: #APP
113; GENERIC-NEXT: mulxl %esi, %esi, %edi # sched: [3:1.00]
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000114; GENERIC-NEXT: mulxl (%rdx), %esi, %edi # sched: [8:1.00]
Simon Pilgrim5af7a6d2017-12-13 22:43:55 +0000115; GENERIC-NEXT: #NO_APP
116; GENERIC-NEXT: retq # sched: [1:1.00]
117;
118; HASWELL-LABEL: test_mulx_i32:
119; HASWELL: # %bb.0:
120; HASWELL-NEXT: #APP
Craig Topper4a3be6e2018-03-22 19:22:51 +0000121; HASWELL-NEXT: mulxl %esi, %esi, %edi # sched: [4:1.00]
122; HASWELL-NEXT: mulxl (%rdx), %esi, %edi # sched: [9:1.00]
Simon Pilgrim5af7a6d2017-12-13 22:43:55 +0000123; HASWELL-NEXT: #NO_APP
124; HASWELL-NEXT: retq # sched: [7:1.00]
125;
126; BROADWELL-LABEL: test_mulx_i32:
127; BROADWELL: # %bb.0:
128; BROADWELL-NEXT: #APP
Craig Topper4a3be6e2018-03-22 19:22:51 +0000129; BROADWELL-NEXT: mulxl %esi, %esi, %edi # sched: [4:1.00]
130; BROADWELL-NEXT: mulxl (%rdx), %esi, %edi # sched: [9:1.00]
Simon Pilgrim5af7a6d2017-12-13 22:43:55 +0000131; BROADWELL-NEXT: #NO_APP
132; BROADWELL-NEXT: retq # sched: [7:1.00]
133;
134; SKYLAKE-LABEL: test_mulx_i32:
135; SKYLAKE: # %bb.0:
136; SKYLAKE-NEXT: #APP
Craig Topper4a3be6e2018-03-22 19:22:51 +0000137; SKYLAKE-NEXT: mulxl %esi, %esi, %edi # sched: [4:1.00]
138; SKYLAKE-NEXT: mulxl (%rdx), %esi, %edi # sched: [9:1.00]
Simon Pilgrim5af7a6d2017-12-13 22:43:55 +0000139; SKYLAKE-NEXT: #NO_APP
140; SKYLAKE-NEXT: retq # sched: [7:1.00]
141;
142; KNL-LABEL: test_mulx_i32:
143; KNL: # %bb.0:
144; KNL-NEXT: #APP
Craig Topper4a3be6e2018-03-22 19:22:51 +0000145; KNL-NEXT: mulxl %esi, %esi, %edi # sched: [4:1.00]
146; KNL-NEXT: mulxl (%rdx), %esi, %edi # sched: [9:1.00]
Simon Pilgrim5af7a6d2017-12-13 22:43:55 +0000147; KNL-NEXT: #NO_APP
148; KNL-NEXT: retq # sched: [7:1.00]
149;
150; ZNVER1-LABEL: test_mulx_i32:
151; ZNVER1: # %bb.0:
152; ZNVER1-NEXT: #APP
153; ZNVER1-NEXT: mulxl %esi, %esi, %edi # sched: [3:2.00]
154; ZNVER1-NEXT: mulxl (%rdx), %esi, %edi # sched: [8:2.00]
155; ZNVER1-NEXT: #NO_APP
156; ZNVER1-NEXT: retq # sched: [1:0.50]
157 tail call void asm "mulx $1, $1, $0 \0A\09 mulx $2, $1, $0 ", "r,r,*m"(i32 %a0, i32 %a1, i32* %a2) nounwind
158 ret void
159}
Simon Pilgrim320f8972017-08-18 13:22:18 +0000160
161define i64 @test_mulx_i64(i64 %a0, i64 %a1, i64 *%a2) {
162; GENERIC-LABEL: test_mulx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000163; GENERIC: # %bb.0:
Simon Pilgrim320f8972017-08-18 13:22:18 +0000164; GENERIC-NEXT: movq %rdx, %rax # sched: [1:0.33]
165; GENERIC-NEXT: movq %rdi, %rdx # sched: [1:0.33]
166; GENERIC-NEXT: mulxq %rsi, %rsi, %rcx # sched: [3:1.00]
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000167; GENERIC-NEXT: mulxq (%rax), %rdx, %rax # sched: [8:1.00]
Simon Pilgrim320f8972017-08-18 13:22:18 +0000168; GENERIC-NEXT: orq %rcx, %rax # sched: [1:0.33]
169; GENERIC-NEXT: retq # sched: [1:1.00]
170;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000171; HASWELL-LABEL: test_mulx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000172; HASWELL: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000173; HASWELL-NEXT: movq %rdx, %rax # sched: [1:0.25]
174; HASWELL-NEXT: movq %rdi, %rdx # sched: [1:0.25]
175; HASWELL-NEXT: mulxq %rsi, %rsi, %rcx # sched: [4:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000176; HASWELL-NEXT: mulxq (%rax), %rdx, %rax # sched: [9:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000177; HASWELL-NEXT: orq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000178; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000179;
Gadi Haber85d99b42017-10-17 13:45:39 +0000180; BROADWELL-LABEL: test_mulx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000181; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000182; BROADWELL-NEXT: movq %rdx, %rax # sched: [1:0.25]
183; BROADWELL-NEXT: movq %rdi, %rdx # sched: [1:0.25]
184; BROADWELL-NEXT: mulxq %rsi, %rsi, %rcx # sched: [4:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000185; BROADWELL-NEXT: mulxq (%rax), %rdx, %rax # sched: [9:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000186; BROADWELL-NEXT: orq %rcx, %rax # 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 Haber1e0f1f42017-10-17 06:47:04 +0000189; SKYLAKE-LABEL: test_mulx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000190; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000191; SKYLAKE-NEXT: movq %rdx, %rax # sched: [1:0.25]
192; SKYLAKE-NEXT: movq %rdi, %rdx # sched: [1:0.25]
193; SKYLAKE-NEXT: mulxq %rsi, %rsi, %rcx # sched: [4:1.00]
194; SKYLAKE-NEXT: mulxq (%rax), %rdx, %rax # sched: [9:1.00]
195; SKYLAKE-NEXT: orq %rcx, %rax # sched: [1:0.25]
196; SKYLAKE-NEXT: retq # sched: [7:1.00]
197;
198; KNL-LABEL: test_mulx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000199; KNL: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000200; KNL-NEXT: movq %rdx, %rax # sched: [1:0.25]
201; KNL-NEXT: movq %rdi, %rdx # sched: [1:0.25]
202; KNL-NEXT: mulxq %rsi, %rsi, %rcx # sched: [4:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000203; KNL-NEXT: mulxq (%rax), %rdx, %rax # sched: [9:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000204; KNL-NEXT: orq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000205; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +0000206;
Simon Pilgrim320f8972017-08-18 13:22:18 +0000207; ZNVER1-LABEL: test_mulx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000208; ZNVER1: # %bb.0:
Simon Pilgrim320f8972017-08-18 13:22:18 +0000209; ZNVER1-NEXT: movq %rdx, %rax # sched: [1:0.25]
210; ZNVER1-NEXT: movq %rdi, %rdx # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000211; ZNVER1-NEXT: mulxq %rsi, %rsi, %rcx # sched: [3:1.00]
212; ZNVER1-NEXT: mulxq (%rax), %rdx, %rax # sched: [8:1.00]
Simon Pilgrim320f8972017-08-18 13:22:18 +0000213; ZNVER1-NEXT: orq %rcx, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000214; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim320f8972017-08-18 13:22:18 +0000215 %1 = load i64, i64 *%a2
216 %2 = zext i64 %a0 to i128
217 %3 = zext i64 %a1 to i128
218 %4 = zext i64 %1 to i128
219 %5 = mul i128 %2, %3
220 %6 = mul i128 %2, %4
221 %7 = lshr i128 %5, 64
222 %8 = lshr i128 %6, 64
223 %9 = trunc i128 %7 to i64
224 %10 = trunc i128 %8 to i64
225 %11 = or i64 %9, %10
226 ret i64 %11
227}
228
Simon Pilgrimb884b202017-07-16 14:09:15 +0000229define i32 @test_pdep_i32(i32 %a0, i32 %a1, i32 *%a2) {
230; GENERIC-LABEL: test_pdep_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000231; GENERIC: # %bb.0:
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000232; GENERIC-NEXT: pdepl (%rdx), %edi, %ecx # sched: [6:0.50]
Simon Pilgrim386b23f2017-12-07 17:37:39 +0000233; GENERIC-NEXT: pdepl %esi, %edi, %eax # sched: [1:0.33]
Simon Pilgrim84846982017-08-01 15:14:35 +0000234; GENERIC-NEXT: addl %ecx, %eax # sched: [1:0.33]
235; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrimb884b202017-07-16 14:09:15 +0000236;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000237; HASWELL-LABEL: test_pdep_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000238; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +0000239; HASWELL-NEXT: pdepl (%rdx), %edi, %ecx # sched: [8:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000240; HASWELL-NEXT: pdepl %esi, %edi, %eax # sched: [3:1.00]
241; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000242; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000243;
Gadi Haber85d99b42017-10-17 13:45:39 +0000244; BROADWELL-LABEL: test_pdep_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000245; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +0000246; BROADWELL-NEXT: pdepl (%rdx), %edi, %ecx # sched: [8:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000247; BROADWELL-NEXT: pdepl %esi, %edi, %eax # sched: [3:1.00]
248; BROADWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000249; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000250;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000251; SKYLAKE-LABEL: test_pdep_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000252; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000253; SKYLAKE-NEXT: pdepl (%rdx), %edi, %ecx # sched: [8:1.00]
254; SKYLAKE-NEXT: pdepl %esi, %edi, %eax # sched: [3:1.00]
255; SKYLAKE-NEXT: addl %ecx, %eax # sched: [1:0.25]
256; SKYLAKE-NEXT: retq # sched: [7:1.00]
257;
258; KNL-LABEL: test_pdep_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000259; KNL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +0000260; KNL-NEXT: pdepl (%rdx), %edi, %ecx # sched: [8:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000261; KNL-NEXT: pdepl %esi, %edi, %eax # sched: [3:1.00]
262; KNL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000263; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +0000264;
Simon Pilgrimb884b202017-07-16 14:09:15 +0000265; ZNVER1-LABEL: test_pdep_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000266; ZNVER1: # %bb.0:
Sanjay Patel59313be2018-06-05 23:34:45 +0000267; ZNVER1-NEXT: pdepl (%rdx), %edi, %ecx # sched: [100:0.25]
268; ZNVER1-NEXT: pdepl %esi, %edi, %eax # sched: [100:0.25]
Craig Topper106b5b62017-07-19 02:45:14 +0000269; ZNVER1-NEXT: addl %ecx, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000270; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrimb884b202017-07-16 14:09:15 +0000271 %1 = load i32, i32 *%a2
272 %2 = tail call i32 @llvm.x86.bmi.pdep.32(i32 %a0, i32 %1)
273 %3 = tail call i32 @llvm.x86.bmi.pdep.32(i32 %a0, i32 %a1)
274 %4 = add i32 %2, %3
275 ret i32 %4
276}
277declare i32 @llvm.x86.bmi.pdep.32(i32, i32)
278
279define i64 @test_pdep_i64(i64 %a0, i64 %a1, i64 *%a2) {
280; GENERIC-LABEL: test_pdep_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000281; GENERIC: # %bb.0:
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000282; GENERIC-NEXT: pdepq (%rdx), %rdi, %rcx # sched: [6:0.50]
Simon Pilgrim386b23f2017-12-07 17:37:39 +0000283; GENERIC-NEXT: pdepq %rsi, %rdi, %rax # sched: [1:0.33]
Simon Pilgrim84846982017-08-01 15:14:35 +0000284; GENERIC-NEXT: addq %rcx, %rax # sched: [1:0.33]
285; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrimb884b202017-07-16 14:09:15 +0000286;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000287; HASWELL-LABEL: test_pdep_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000288; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +0000289; HASWELL-NEXT: pdepq (%rdx), %rdi, %rcx # sched: [8:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000290; HASWELL-NEXT: pdepq %rsi, %rdi, %rax # sched: [3:1.00]
291; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000292; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000293;
Gadi Haber85d99b42017-10-17 13:45:39 +0000294; BROADWELL-LABEL: test_pdep_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000295; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +0000296; BROADWELL-NEXT: pdepq (%rdx), %rdi, %rcx # sched: [8:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000297; BROADWELL-NEXT: pdepq %rsi, %rdi, %rax # sched: [3:1.00]
298; BROADWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000299; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000300;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000301; SKYLAKE-LABEL: test_pdep_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000302; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000303; SKYLAKE-NEXT: pdepq (%rdx), %rdi, %rcx # sched: [8:1.00]
304; SKYLAKE-NEXT: pdepq %rsi, %rdi, %rax # sched: [3:1.00]
305; SKYLAKE-NEXT: addq %rcx, %rax # sched: [1:0.25]
306; SKYLAKE-NEXT: retq # sched: [7:1.00]
307;
308; KNL-LABEL: test_pdep_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000309; KNL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +0000310; KNL-NEXT: pdepq (%rdx), %rdi, %rcx # sched: [8:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000311; KNL-NEXT: pdepq %rsi, %rdi, %rax # sched: [3:1.00]
312; KNL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000313; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +0000314;
Simon Pilgrimb884b202017-07-16 14:09:15 +0000315; ZNVER1-LABEL: test_pdep_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000316; ZNVER1: # %bb.0:
Sanjay Patel59313be2018-06-05 23:34:45 +0000317; ZNVER1-NEXT: pdepq (%rdx), %rdi, %rcx # sched: [100:0.25]
318; ZNVER1-NEXT: pdepq %rsi, %rdi, %rax # sched: [100:0.25]
Craig Topper106b5b62017-07-19 02:45:14 +0000319; ZNVER1-NEXT: addq %rcx, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000320; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrimb884b202017-07-16 14:09:15 +0000321 %1 = load i64, i64 *%a2
322 %2 = tail call i64 @llvm.x86.bmi.pdep.64(i64 %a0, i64 %1)
323 %3 = tail call i64 @llvm.x86.bmi.pdep.64(i64 %a0, i64 %a1)
324 %4 = add i64 %2, %3
325 ret i64 %4
326}
327declare i64 @llvm.x86.bmi.pdep.64(i64, i64)
328
329define i32 @test_pext_i32(i32 %a0, i32 %a1, i32 *%a2) {
330; GENERIC-LABEL: test_pext_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000331; GENERIC: # %bb.0:
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000332; GENERIC-NEXT: pextl (%rdx), %edi, %ecx # sched: [6:0.50]
Simon Pilgrim386b23f2017-12-07 17:37:39 +0000333; GENERIC-NEXT: pextl %esi, %edi, %eax # sched: [1:0.33]
Simon Pilgrim84846982017-08-01 15:14:35 +0000334; GENERIC-NEXT: addl %ecx, %eax # sched: [1:0.33]
335; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrimb884b202017-07-16 14:09:15 +0000336;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000337; HASWELL-LABEL: test_pext_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000338; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +0000339; HASWELL-NEXT: pextl (%rdx), %edi, %ecx # sched: [8:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000340; HASWELL-NEXT: pextl %esi, %edi, %eax # sched: [3:1.00]
341; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000342; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000343;
Gadi Haber85d99b42017-10-17 13:45:39 +0000344; BROADWELL-LABEL: test_pext_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000345; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +0000346; BROADWELL-NEXT: pextl (%rdx), %edi, %ecx # sched: [8:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000347; BROADWELL-NEXT: pextl %esi, %edi, %eax # sched: [3:1.00]
348; BROADWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000349; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000350;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000351; SKYLAKE-LABEL: test_pext_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000352; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000353; SKYLAKE-NEXT: pextl (%rdx), %edi, %ecx # sched: [8:1.00]
354; SKYLAKE-NEXT: pextl %esi, %edi, %eax # sched: [3:1.00]
355; SKYLAKE-NEXT: addl %ecx, %eax # sched: [1:0.25]
356; SKYLAKE-NEXT: retq # sched: [7:1.00]
357;
358; KNL-LABEL: test_pext_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000359; KNL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +0000360; KNL-NEXT: pextl (%rdx), %edi, %ecx # sched: [8:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000361; KNL-NEXT: pextl %esi, %edi, %eax # sched: [3:1.00]
362; KNL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000363; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +0000364;
Simon Pilgrimb884b202017-07-16 14:09:15 +0000365; ZNVER1-LABEL: test_pext_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000366; ZNVER1: # %bb.0:
Sanjay Patel59313be2018-06-05 23:34:45 +0000367; ZNVER1-NEXT: pextl (%rdx), %edi, %ecx # sched: [100:0.25]
368; ZNVER1-NEXT: pextl %esi, %edi, %eax # sched: [100:0.25]
Craig Topper106b5b62017-07-19 02:45:14 +0000369; ZNVER1-NEXT: addl %ecx, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000370; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrimb884b202017-07-16 14:09:15 +0000371 %1 = load i32, i32 *%a2
372 %2 = tail call i32 @llvm.x86.bmi.pext.32(i32 %a0, i32 %1)
373 %3 = tail call i32 @llvm.x86.bmi.pext.32(i32 %a0, i32 %a1)
374 %4 = add i32 %2, %3
375 ret i32 %4
376}
377declare i32 @llvm.x86.bmi.pext.32(i32, i32)
378
379define i64 @test_pext_i64(i64 %a0, i64 %a1, i64 *%a2) {
380; GENERIC-LABEL: test_pext_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000381; GENERIC: # %bb.0:
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000382; GENERIC-NEXT: pextq (%rdx), %rdi, %rcx # sched: [6:0.50]
Simon Pilgrim386b23f2017-12-07 17:37:39 +0000383; GENERIC-NEXT: pextq %rsi, %rdi, %rax # sched: [1:0.33]
Simon Pilgrim84846982017-08-01 15:14:35 +0000384; GENERIC-NEXT: addq %rcx, %rax # sched: [1:0.33]
385; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrimb884b202017-07-16 14:09:15 +0000386;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000387; HASWELL-LABEL: test_pext_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000388; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +0000389; HASWELL-NEXT: pextq (%rdx), %rdi, %rcx # sched: [8:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000390; HASWELL-NEXT: pextq %rsi, %rdi, %rax # sched: [3:1.00]
391; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000392; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000393;
Gadi Haber85d99b42017-10-17 13:45:39 +0000394; BROADWELL-LABEL: test_pext_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000395; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +0000396; BROADWELL-NEXT: pextq (%rdx), %rdi, %rcx # sched: [8:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000397; BROADWELL-NEXT: pextq %rsi, %rdi, %rax # sched: [3:1.00]
398; BROADWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000399; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000400;
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000401; SKYLAKE-LABEL: test_pext_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000402; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000403; SKYLAKE-NEXT: pextq (%rdx), %rdi, %rcx # sched: [8:1.00]
404; SKYLAKE-NEXT: pextq %rsi, %rdi, %rax # sched: [3:1.00]
405; SKYLAKE-NEXT: addq %rcx, %rax # sched: [1:0.25]
406; SKYLAKE-NEXT: retq # sched: [7:1.00]
407;
408; KNL-LABEL: test_pext_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000409; KNL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +0000410; KNL-NEXT: pextq (%rdx), %rdi, %rcx # sched: [8:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000411; KNL-NEXT: pextq %rsi, %rdi, %rax # sched: [3:1.00]
412; KNL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000413; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +0000414;
Simon Pilgrimb884b202017-07-16 14:09:15 +0000415; ZNVER1-LABEL: test_pext_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000416; ZNVER1: # %bb.0:
Sanjay Patel59313be2018-06-05 23:34:45 +0000417; ZNVER1-NEXT: pextq (%rdx), %rdi, %rcx # sched: [100:0.25]
418; ZNVER1-NEXT: pextq %rsi, %rdi, %rax # sched: [100:0.25]
Craig Topper106b5b62017-07-19 02:45:14 +0000419; ZNVER1-NEXT: addq %rcx, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000420; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrimb884b202017-07-16 14:09:15 +0000421 %1 = load i64, i64 *%a2
422 %2 = tail call i64 @llvm.x86.bmi.pext.64(i64 %a0, i64 %1)
423 %3 = tail call i64 @llvm.x86.bmi.pext.64(i64 %a0, i64 %a1)
424 %4 = add i64 %2, %3
425 ret i64 %4
426}
427declare i64 @llvm.x86.bmi.pext.64(i64, i64)
Simon Pilgrim879ce042017-08-18 16:26:39 +0000428
429define i32 @test_rorx_i32(i32 %a0, i32 %a1, i32 *%a2) {
430; GENERIC-LABEL: test_rorx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000431; GENERIC: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000432; GENERIC-NEXT: rorxl $5, %edi, %ecx # sched: [1:0.50]
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000433; GENERIC-NEXT: rorxl $5, (%rdx), %eax # sched: [6:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000434; GENERIC-NEXT: addl %ecx, %eax # sched: [1:0.33]
435; GENERIC-NEXT: retq # sched: [1:1.00]
436;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000437; HASWELL-LABEL: test_rorx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000438; HASWELL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000439; HASWELL-NEXT: rorxl $5, %edi, %ecx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000440; HASWELL-NEXT: rorxl $5, (%rdx), %eax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000441; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000442; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000443;
Gadi Haber85d99b42017-10-17 13:45:39 +0000444; BROADWELL-LABEL: test_rorx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000445; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000446; BROADWELL-NEXT: rorxl $5, %edi, %ecx # sched: [1:0.50]
Gadi Haber323f2e12017-10-24 20:19:47 +0000447; BROADWELL-NEXT: rorxl $5, (%rdx), %eax # sched: [6:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +0000448; BROADWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000449; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000450;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000451; SKYLAKE-LABEL: test_rorx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000452; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000453; SKYLAKE-NEXT: rorxl $5, %edi, %ecx # sched: [1:0.50]
454; SKYLAKE-NEXT: rorxl $5, (%rdx), %eax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000455; SKYLAKE-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000456; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000457;
458; KNL-LABEL: test_rorx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000459; KNL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000460; KNL-NEXT: rorxl $5, %edi, %ecx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000461; KNL-NEXT: rorxl $5, (%rdx), %eax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000462; KNL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000463; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +0000464;
Simon Pilgrim879ce042017-08-18 16:26:39 +0000465; ZNVER1-LABEL: test_rorx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000466; ZNVER1: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000467; ZNVER1-NEXT: rorxl $5, (%rdx), %eax # sched: [5:0.50]
468; ZNVER1-NEXT: rorxl $5, %edi, %ecx # sched: [1:0.25]
469; ZNVER1-NEXT: addl %ecx, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000470; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000471 %1 = load i32, i32 *%a2
472 %2 = lshr i32 %a0, 5
473 %3 = shl i32 %a0, 27
474 %4 = or i32 %2, %3
475 %5 = lshr i32 %1, 5
476 %6 = shl i32 %1, 27
477 %7 = or i32 %5, %6
478 %8 = add i32 %4, %7
479 ret i32 %8
480}
481
482define i64 @test_rorx_i64(i64 %a0, i64 %a1, i64 *%a2) {
483; GENERIC-LABEL: test_rorx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000484; GENERIC: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000485; GENERIC-NEXT: rorxq $5, %rdi, %rcx # sched: [1:0.50]
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000486; GENERIC-NEXT: rorxq $5, (%rdx), %rax # sched: [6:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000487; GENERIC-NEXT: addq %rcx, %rax # sched: [1:0.33]
488; GENERIC-NEXT: retq # sched: [1:1.00]
489;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000490; HASWELL-LABEL: test_rorx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000491; HASWELL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000492; HASWELL-NEXT: rorxq $5, %rdi, %rcx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000493; HASWELL-NEXT: rorxq $5, (%rdx), %rax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000494; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000495; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000496;
Gadi Haber85d99b42017-10-17 13:45:39 +0000497; BROADWELL-LABEL: test_rorx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000498; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000499; BROADWELL-NEXT: rorxq $5, %rdi, %rcx # sched: [1:0.50]
Gadi Haber323f2e12017-10-24 20:19:47 +0000500; BROADWELL-NEXT: rorxq $5, (%rdx), %rax # sched: [6:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +0000501; BROADWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000502; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000503;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000504; SKYLAKE-LABEL: test_rorx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000505; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000506; SKYLAKE-NEXT: rorxq $5, %rdi, %rcx # sched: [1:0.50]
507; SKYLAKE-NEXT: rorxq $5, (%rdx), %rax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000508; SKYLAKE-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000509; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000510;
511; KNL-LABEL: test_rorx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000512; KNL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000513; KNL-NEXT: rorxq $5, %rdi, %rcx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000514; KNL-NEXT: rorxq $5, (%rdx), %rax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000515; KNL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000516; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +0000517;
Simon Pilgrim879ce042017-08-18 16:26:39 +0000518; ZNVER1-LABEL: test_rorx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000519; ZNVER1: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000520; ZNVER1-NEXT: rorxq $5, (%rdx), %rax # sched: [5:0.50]
521; ZNVER1-NEXT: rorxq $5, %rdi, %rcx # sched: [1:0.25]
522; ZNVER1-NEXT: addq %rcx, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000523; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000524 %1 = load i64, i64 *%a2
525 %2 = lshr i64 %a0, 5
526 %3 = shl i64 %a0, 59
527 %4 = or i64 %2, %3
528 %5 = lshr i64 %1, 5
529 %6 = shl i64 %1, 59
530 %7 = or i64 %5, %6
531 %8 = add i64 %4, %7
532 ret i64 %8
533}
534
535define i32 @test_sarx_i32(i32 %a0, i32 %a1, i32 *%a2) {
536; GENERIC-LABEL: test_sarx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000537; GENERIC: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000538; GENERIC-NEXT: sarxl %esi, %edi, %ecx # sched: [1:0.50]
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000539; GENERIC-NEXT: sarxl %esi, (%rdx), %eax # sched: [6:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000540; GENERIC-NEXT: addl %ecx, %eax # sched: [1:0.33]
541; GENERIC-NEXT: retq # sched: [1:1.00]
542;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000543; HASWELL-LABEL: test_sarx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000544; HASWELL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000545; HASWELL-NEXT: sarxl %esi, %edi, %ecx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000546; HASWELL-NEXT: sarxl %esi, (%rdx), %eax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000547; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000548; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000549;
Gadi Haber85d99b42017-10-17 13:45:39 +0000550; BROADWELL-LABEL: test_sarx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000551; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000552; BROADWELL-NEXT: sarxl %esi, %edi, %ecx # sched: [1:0.50]
Gadi Haber323f2e12017-10-24 20:19:47 +0000553; BROADWELL-NEXT: sarxl %esi, (%rdx), %eax # sched: [6:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +0000554; BROADWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000555; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000556;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000557; SKYLAKE-LABEL: test_sarx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000558; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000559; SKYLAKE-NEXT: sarxl %esi, %edi, %ecx # sched: [1:0.50]
560; SKYLAKE-NEXT: sarxl %esi, (%rdx), %eax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000561; SKYLAKE-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000562; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000563;
564; KNL-LABEL: test_sarx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000565; KNL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000566; KNL-NEXT: sarxl %esi, %edi, %ecx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000567; KNL-NEXT: sarxl %esi, (%rdx), %eax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000568; KNL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000569; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +0000570;
Simon Pilgrim879ce042017-08-18 16:26:39 +0000571; ZNVER1-LABEL: test_sarx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000572; ZNVER1: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000573; ZNVER1-NEXT: sarxl %esi, (%rdx), %eax # sched: [5:0.50]
574; ZNVER1-NEXT: sarxl %esi, %edi, %ecx # sched: [1:0.25]
575; ZNVER1-NEXT: addl %ecx, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000576; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000577 %1 = load i32, i32 *%a2
578 %2 = ashr i32 %a0, %a1
579 %3 = ashr i32 %1, %a1
580 %4 = add i32 %2, %3
581 ret i32 %4
582}
583
584define i64 @test_sarx_i64(i64 %a0, i64 %a1, i64 *%a2) {
585; GENERIC-LABEL: test_sarx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000586; GENERIC: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000587; GENERIC-NEXT: sarxq %rsi, %rdi, %rcx # sched: [1:0.50]
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000588; GENERIC-NEXT: sarxq %rsi, (%rdx), %rax # sched: [6:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000589; GENERIC-NEXT: addq %rcx, %rax # sched: [1:0.33]
590; GENERIC-NEXT: retq # sched: [1:1.00]
591;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000592; HASWELL-LABEL: test_sarx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000593; HASWELL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000594; HASWELL-NEXT: sarxq %rsi, %rdi, %rcx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000595; HASWELL-NEXT: sarxq %rsi, (%rdx), %rax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000596; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000597; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000598;
Gadi Haber85d99b42017-10-17 13:45:39 +0000599; BROADWELL-LABEL: test_sarx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000600; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000601; BROADWELL-NEXT: sarxq %rsi, %rdi, %rcx # sched: [1:0.50]
Gadi Haber323f2e12017-10-24 20:19:47 +0000602; BROADWELL-NEXT: sarxq %rsi, (%rdx), %rax # sched: [6:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +0000603; BROADWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000604; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000605;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000606; SKYLAKE-LABEL: test_sarx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000607; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000608; SKYLAKE-NEXT: sarxq %rsi, %rdi, %rcx # sched: [1:0.50]
609; SKYLAKE-NEXT: sarxq %rsi, (%rdx), %rax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000610; SKYLAKE-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000611; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000612;
613; KNL-LABEL: test_sarx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000614; KNL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000615; KNL-NEXT: sarxq %rsi, %rdi, %rcx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000616; KNL-NEXT: sarxq %rsi, (%rdx), %rax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000617; KNL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000618; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +0000619;
Simon Pilgrim879ce042017-08-18 16:26:39 +0000620; ZNVER1-LABEL: test_sarx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000621; ZNVER1: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000622; ZNVER1-NEXT: sarxq %rsi, (%rdx), %rax # sched: [5:0.50]
623; ZNVER1-NEXT: sarxq %rsi, %rdi, %rcx # sched: [1:0.25]
624; ZNVER1-NEXT: addq %rcx, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000625; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000626 %1 = load i64, i64 *%a2
627 %2 = ashr i64 %a0, %a1
628 %3 = ashr i64 %1, %a1
629 %4 = add i64 %2, %3
630 ret i64 %4
631}
632
633define i32 @test_shlx_i32(i32 %a0, i32 %a1, i32 *%a2) {
634; GENERIC-LABEL: test_shlx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000635; GENERIC: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000636; GENERIC-NEXT: shlxl %esi, %edi, %ecx # sched: [1:0.50]
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000637; GENERIC-NEXT: shlxl %esi, (%rdx), %eax # sched: [6:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000638; GENERIC-NEXT: addl %ecx, %eax # sched: [1:0.33]
639; GENERIC-NEXT: retq # sched: [1:1.00]
640;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000641; HASWELL-LABEL: test_shlx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000642; HASWELL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000643; HASWELL-NEXT: shlxl %esi, %edi, %ecx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000644; HASWELL-NEXT: shlxl %esi, (%rdx), %eax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000645; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000646; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000647;
Gadi Haber85d99b42017-10-17 13:45:39 +0000648; BROADWELL-LABEL: test_shlx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000649; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000650; BROADWELL-NEXT: shlxl %esi, %edi, %ecx # sched: [1:0.50]
Gadi Haber323f2e12017-10-24 20:19:47 +0000651; BROADWELL-NEXT: shlxl %esi, (%rdx), %eax # sched: [6:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +0000652; BROADWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000653; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000654;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000655; SKYLAKE-LABEL: test_shlx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000656; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000657; SKYLAKE-NEXT: shlxl %esi, %edi, %ecx # sched: [1:0.50]
658; SKYLAKE-NEXT: shlxl %esi, (%rdx), %eax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000659; SKYLAKE-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000660; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000661;
662; KNL-LABEL: test_shlx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000663; KNL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000664; KNL-NEXT: shlxl %esi, %edi, %ecx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000665; KNL-NEXT: shlxl %esi, (%rdx), %eax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000666; KNL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000667; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +0000668;
Simon Pilgrim879ce042017-08-18 16:26:39 +0000669; ZNVER1-LABEL: test_shlx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000670; ZNVER1: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000671; ZNVER1-NEXT: shlxl %esi, (%rdx), %eax # sched: [5:0.50]
672; ZNVER1-NEXT: shlxl %esi, %edi, %ecx # sched: [1:0.25]
673; ZNVER1-NEXT: addl %ecx, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000674; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000675 %1 = load i32, i32 *%a2
676 %2 = shl i32 %a0, %a1
677 %3 = shl i32 %1, %a1
678 %4 = add i32 %2, %3
679 ret i32 %4
680}
681
682define i64 @test_shlx_i64(i64 %a0, i64 %a1, i64 *%a2) {
683; GENERIC-LABEL: test_shlx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000684; GENERIC: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000685; GENERIC-NEXT: shlxq %rsi, %rdi, %rcx # sched: [1:0.50]
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000686; GENERIC-NEXT: shlxq %rsi, (%rdx), %rax # sched: [6:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000687; GENERIC-NEXT: addq %rcx, %rax # sched: [1:0.33]
688; GENERIC-NEXT: retq # sched: [1:1.00]
689;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000690; HASWELL-LABEL: test_shlx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000691; HASWELL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000692; HASWELL-NEXT: shlxq %rsi, %rdi, %rcx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000693; HASWELL-NEXT: shlxq %rsi, (%rdx), %rax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000694; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000695; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000696;
Gadi Haber85d99b42017-10-17 13:45:39 +0000697; BROADWELL-LABEL: test_shlx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000698; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000699; BROADWELL-NEXT: shlxq %rsi, %rdi, %rcx # sched: [1:0.50]
Gadi Haber323f2e12017-10-24 20:19:47 +0000700; BROADWELL-NEXT: shlxq %rsi, (%rdx), %rax # sched: [6:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +0000701; BROADWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000702; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000703;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000704; SKYLAKE-LABEL: test_shlx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000705; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000706; SKYLAKE-NEXT: shlxq %rsi, %rdi, %rcx # sched: [1:0.50]
707; SKYLAKE-NEXT: shlxq %rsi, (%rdx), %rax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000708; SKYLAKE-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000709; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000710;
711; KNL-LABEL: test_shlx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000712; KNL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000713; KNL-NEXT: shlxq %rsi, %rdi, %rcx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000714; KNL-NEXT: shlxq %rsi, (%rdx), %rax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000715; KNL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000716; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +0000717;
Simon Pilgrim879ce042017-08-18 16:26:39 +0000718; ZNVER1-LABEL: test_shlx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000719; ZNVER1: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000720; ZNVER1-NEXT: shlxq %rsi, (%rdx), %rax # sched: [5:0.50]
721; ZNVER1-NEXT: shlxq %rsi, %rdi, %rcx # sched: [1:0.25]
722; ZNVER1-NEXT: addq %rcx, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000723; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000724 %1 = load i64, i64 *%a2
725 %2 = shl i64 %a0, %a1
726 %3 = shl i64 %1, %a1
727 %4 = add i64 %2, %3
728 ret i64 %4
729}
730
731define i32 @test_shrx_i32(i32 %a0, i32 %a1, i32 *%a2) {
732; GENERIC-LABEL: test_shrx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000733; GENERIC: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000734; GENERIC-NEXT: shrxl %esi, %edi, %ecx # sched: [1:0.50]
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000735; GENERIC-NEXT: shrxl %esi, (%rdx), %eax # sched: [6:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000736; GENERIC-NEXT: addl %ecx, %eax # sched: [1:0.33]
737; GENERIC-NEXT: retq # sched: [1:1.00]
738;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000739; HASWELL-LABEL: test_shrx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000740; HASWELL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000741; HASWELL-NEXT: shrxl %esi, %edi, %ecx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000742; HASWELL-NEXT: shrxl %esi, (%rdx), %eax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000743; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000744; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000745;
Gadi Haber85d99b42017-10-17 13:45:39 +0000746; BROADWELL-LABEL: test_shrx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000747; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000748; BROADWELL-NEXT: shrxl %esi, %edi, %ecx # sched: [1:0.50]
Gadi Haber323f2e12017-10-24 20:19:47 +0000749; BROADWELL-NEXT: shrxl %esi, (%rdx), %eax # sched: [6:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +0000750; BROADWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000751; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000752;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000753; SKYLAKE-LABEL: test_shrx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000754; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000755; SKYLAKE-NEXT: shrxl %esi, %edi, %ecx # sched: [1:0.50]
756; SKYLAKE-NEXT: shrxl %esi, (%rdx), %eax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000757; SKYLAKE-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000758; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000759;
760; KNL-LABEL: test_shrx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000761; KNL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000762; KNL-NEXT: shrxl %esi, %edi, %ecx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000763; KNL-NEXT: shrxl %esi, (%rdx), %eax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000764; KNL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000765; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +0000766;
Simon Pilgrim879ce042017-08-18 16:26:39 +0000767; ZNVER1-LABEL: test_shrx_i32:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000768; ZNVER1: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000769; ZNVER1-NEXT: shrxl %esi, (%rdx), %eax # sched: [5:0.50]
770; ZNVER1-NEXT: shrxl %esi, %edi, %ecx # sched: [1:0.25]
771; ZNVER1-NEXT: addl %ecx, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000772; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000773 %1 = load i32, i32 *%a2
774 %2 = lshr i32 %a0, %a1
775 %3 = lshr i32 %1, %a1
776 %4 = add i32 %2, %3
777 ret i32 %4
778}
779
780define i64 @test_shrx_i64(i64 %a0, i64 %a1, i64 *%a2) {
781; GENERIC-LABEL: test_shrx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000782; GENERIC: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000783; GENERIC-NEXT: shrxq %rsi, %rdi, %rcx # sched: [1:0.50]
Simon Pilgrim8a83f162018-04-06 11:00:51 +0000784; GENERIC-NEXT: shrxq %rsi, (%rdx), %rax # sched: [6:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000785; GENERIC-NEXT: addq %rcx, %rax # sched: [1:0.33]
786; GENERIC-NEXT: retq # sched: [1:1.00]
787;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000788; HASWELL-LABEL: test_shrx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000789; HASWELL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000790; HASWELL-NEXT: shrxq %rsi, %rdi, %rcx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000791; HASWELL-NEXT: shrxq %rsi, (%rdx), %rax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000792; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000793; HASWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000794;
Gadi Haber85d99b42017-10-17 13:45:39 +0000795; BROADWELL-LABEL: test_shrx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000796; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000797; BROADWELL-NEXT: shrxq %rsi, %rdi, %rcx # sched: [1:0.50]
Gadi Haber323f2e12017-10-24 20:19:47 +0000798; BROADWELL-NEXT: shrxq %rsi, (%rdx), %rax # sched: [6:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +0000799; BROADWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000800; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000801;
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000802; SKYLAKE-LABEL: test_shrx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000803; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000804; SKYLAKE-NEXT: shrxq %rsi, %rdi, %rcx # sched: [1:0.50]
805; SKYLAKE-NEXT: shrxq %rsi, (%rdx), %rax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000806; SKYLAKE-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000807; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000808;
809; KNL-LABEL: test_shrx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000810; KNL: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000811; KNL-NEXT: shrxq %rsi, %rdi, %rcx # sched: [1:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000812; KNL-NEXT: shrxq %rsi, (%rdx), %rax # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000813; KNL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000814; KNL-NEXT: retq # sched: [7:1.00]
Gadi Haberfb47ab72017-09-13 09:27:39 +0000815;
Simon Pilgrim879ce042017-08-18 16:26:39 +0000816; ZNVER1-LABEL: test_shrx_i64:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000817; ZNVER1: # %bb.0:
Simon Pilgrim879ce042017-08-18 16:26:39 +0000818; ZNVER1-NEXT: shrxq %rsi, (%rdx), %rax # sched: [5:0.50]
819; ZNVER1-NEXT: shrxq %rsi, %rdi, %rcx # sched: [1:0.25]
820; ZNVER1-NEXT: addq %rcx, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000821; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim879ce042017-08-18 16:26:39 +0000822 %1 = load i64, i64 *%a2
823 %2 = lshr i64 %a0, %a1
824 %3 = lshr i64 %1, %a1
825 %4 = add i64 %2, %3
826 ret i64 %4
827}