blob: d53db250baf5dc83a2e5482b36982535cda837a6 [file] [log] [blame]
Simon Pilgrim93986492017-04-18 19:04:40 +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 | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC
Simon Pilgrim93986492017-04-18 19:04:40 +00003; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=atom | FileCheck %s --check-prefix=CHECK --check-prefix=ATOM
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=slm | FileCheck %s --check-prefix=CHECK --check-prefix=SLM
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL
Gadi Haber85d99b42017-10-17 13:45:39 +00008; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell | FileCheck %s --check-prefix=CHECK --check-prefix=BROADWELL
Gadi Haber767d98b2017-08-30 08:08:50 +00009; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE
Simon Pilgrima29dbdf2017-10-06 13:40:29 +000010; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKX
Simon Pilgrim93986492017-04-18 19:04:40 +000011; 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 +000012; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1
Simon Pilgrim93986492017-04-18 19:04:40 +000013
14define <4 x float> @test_addps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
15; GENERIC-LABEL: test_addps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000016; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +000017; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
18; GENERIC-NEXT: addps (%rdi), %xmm0 # sched: [9:1.00]
19; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +000020;
21; ATOM-LABEL: test_addps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000022; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +000023; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
24; ATOM-NEXT: addps (%rdi), %xmm0 # sched: [5:5.00]
25; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +000026;
27; SLM-LABEL: test_addps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000028; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +000029; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
30; SLM-NEXT: addps (%rdi), %xmm0 # sched: [6:1.00]
31; SLM-NEXT: retq # sched: [4:1.00]
32;
33; SANDY-LABEL: test_addps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000034; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +000035; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +000036; SANDY-NEXT: vaddps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
37; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +000038;
39; HASWELL-LABEL: test_addps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000040; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +000041; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +000042; HASWELL-NEXT: vaddps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
43; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +000044;
Gadi Haber85d99b42017-10-17 13:45:39 +000045; BROADWELL-LABEL: test_addps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000046; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +000047; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +000048; BROADWELL-NEXT: vaddps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
49; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +000050;
Gadi Haber767d98b2017-08-30 08:08:50 +000051; SKYLAKE-LABEL: test_addps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000052; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +000053; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +000054; SKYLAKE-NEXT: vaddps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
55; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +000056;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +000057; SKX-LABEL: test_addps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000058; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +000059; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
60; SKX-NEXT: vaddps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
61; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +000062;
Simon Pilgrim93986492017-04-18 19:04:40 +000063; BTVER2-LABEL: test_addps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000064; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +000065; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
66; BTVER2-NEXT: vaddps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
67; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +000068;
69; ZNVER1-LABEL: test_addps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000070; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +000071; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
72; ZNVER1-NEXT: vaddps (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +000073; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +000074 %1 = fadd <4 x float> %a0, %a1
75 %2 = load <4 x float>, <4 x float> *%a2, align 16
76 %3 = fadd <4 x float> %1, %2
77 ret <4 x float> %3
78}
79
80define float @test_addss(float %a0, float %a1, float *%a2) {
81; GENERIC-LABEL: test_addss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000082; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +000083; GENERIC-NEXT: addss %xmm1, %xmm0 # sched: [3:1.00]
84; GENERIC-NEXT: addss (%rdi), %xmm0 # sched: [9:1.00]
85; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +000086;
87; ATOM-LABEL: test_addss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000088; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +000089; ATOM-NEXT: addss %xmm1, %xmm0 # sched: [5:5.00]
90; ATOM-NEXT: addss (%rdi), %xmm0 # sched: [5:5.00]
91; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +000092;
93; SLM-LABEL: test_addss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +000094; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +000095; SLM-NEXT: addss %xmm1, %xmm0 # sched: [3:1.00]
96; SLM-NEXT: addss (%rdi), %xmm0 # sched: [6:1.00]
97; SLM-NEXT: retq # sched: [4:1.00]
98;
99; SANDY-LABEL: test_addss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000100; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000101; SANDY-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000102; SANDY-NEXT: vaddss (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
103; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000104;
105; HASWELL-LABEL: test_addss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000106; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000107; HASWELL-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000108; HASWELL-NEXT: vaddss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
109; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000110;
Gadi Haber85d99b42017-10-17 13:45:39 +0000111; BROADWELL-LABEL: test_addss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000112; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000113; BROADWELL-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000114; BROADWELL-NEXT: vaddss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
115; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000116;
Gadi Haber767d98b2017-08-30 08:08:50 +0000117; SKYLAKE-LABEL: test_addss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000118; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000119; SKYLAKE-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000120; SKYLAKE-NEXT: vaddss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
121; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000122;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000123; SKX-LABEL: test_addss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000124; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +0000125; SKX-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
126; SKX-NEXT: vaddss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
127; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000128;
Simon Pilgrim93986492017-04-18 19:04:40 +0000129; BTVER2-LABEL: test_addss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000130; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000131; BTVER2-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
132; BTVER2-NEXT: vaddss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
133; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000134;
135; ZNVER1-LABEL: test_addss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000136; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000137; ZNVER1-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
138; ZNVER1-NEXT: vaddss (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000139; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000140 %1 = fadd float %a0, %a1
141 %2 = load float, float *%a2, align 4
142 %3 = fadd float %1, %2
143 ret float %3
144}
145
146define <4 x float> @test_andps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
147; GENERIC-LABEL: test_andps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000148; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000149; GENERIC-NEXT: andps %xmm1, %xmm0 # sched: [1:1.00]
150; GENERIC-NEXT: andps (%rdi), %xmm0 # sched: [7:1.00]
151; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000152;
153; ATOM-LABEL: test_andps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000154; ATOM: # %bb.0:
Simon Pilgrim486072d2017-08-01 17:51:20 +0000155; ATOM-NEXT: andps %xmm1, %xmm0 # sched: [1:0.50]
156; ATOM-NEXT: andps (%rdi), %xmm0 # sched: [1:1.00]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000157; ATOM-NEXT: nop # sched: [1:0.50]
158; ATOM-NEXT: nop # sched: [1:0.50]
159; ATOM-NEXT: nop # sched: [1:0.50]
160; ATOM-NEXT: nop # sched: [1:0.50]
161; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000162;
163; SLM-LABEL: test_andps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000164; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000165; SLM-NEXT: andps %xmm1, %xmm0 # sched: [1:0.50]
166; SLM-NEXT: andps (%rdi), %xmm0 # sched: [4:1.00]
167; SLM-NEXT: retq # sched: [4:1.00]
168;
169; SANDY-LABEL: test_andps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000170; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000171; SANDY-NEXT: vandps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
172; SANDY-NEXT: vandps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
173; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000174;
175; HASWELL-LABEL: test_andps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000176; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000177; HASWELL-NEXT: vandps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000178; HASWELL-NEXT: vandps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
179; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000180;
Gadi Haber85d99b42017-10-17 13:45:39 +0000181; BROADWELL-LABEL: test_andps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000182; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000183; BROADWELL-NEXT: vandps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000184; BROADWELL-NEXT: vandps (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
185; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000186;
Gadi Haber767d98b2017-08-30 08:08:50 +0000187; SKYLAKE-LABEL: test_andps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000188; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000189; SKYLAKE-NEXT: vandps %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
190; SKYLAKE-NEXT: vandps (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
191; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000192;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000193; SKX-LABEL: test_andps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000194; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +0000195; SKX-NEXT: vandps %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
196; SKX-NEXT: vandps (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
197; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000198;
Simon Pilgrim93986492017-04-18 19:04:40 +0000199; BTVER2-LABEL: test_andps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000200; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000201; BTVER2-NEXT: vandps %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
202; BTVER2-NEXT: vandps (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
203; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000204;
205; ZNVER1-LABEL: test_andps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000206; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000207; ZNVER1-NEXT: vandps %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
208; ZNVER1-NEXT: vandps (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000209; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000210 %1 = bitcast <4 x float> %a0 to <4 x i32>
211 %2 = bitcast <4 x float> %a1 to <4 x i32>
212 %3 = and <4 x i32> %1, %2
213 %4 = load <4 x float>, <4 x float> *%a2, align 16
214 %5 = bitcast <4 x float> %4 to <4 x i32>
215 %6 = and <4 x i32> %3, %5
216 %7 = bitcast <4 x i32> %6 to <4 x float>
217 ret <4 x float> %7
218}
219
220define <4 x float> @test_andnotps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
221; GENERIC-LABEL: test_andnotps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000222; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000223; GENERIC-NEXT: andnps %xmm1, %xmm0 # sched: [1:1.00]
224; GENERIC-NEXT: andnps (%rdi), %xmm0 # sched: [7:1.00]
225; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000226;
227; ATOM-LABEL: test_andnotps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000228; ATOM: # %bb.0:
Simon Pilgrim486072d2017-08-01 17:51:20 +0000229; ATOM-NEXT: andnps %xmm1, %xmm0 # sched: [1:0.50]
230; ATOM-NEXT: andnps (%rdi), %xmm0 # sched: [1:1.00]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000231; ATOM-NEXT: nop # sched: [1:0.50]
232; ATOM-NEXT: nop # sched: [1:0.50]
233; ATOM-NEXT: nop # sched: [1:0.50]
234; ATOM-NEXT: nop # sched: [1:0.50]
235; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000236;
237; SLM-LABEL: test_andnotps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000238; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000239; SLM-NEXT: andnps %xmm1, %xmm0 # sched: [1:0.50]
240; SLM-NEXT: andnps (%rdi), %xmm0 # sched: [4:1.00]
241; SLM-NEXT: retq # sched: [4:1.00]
242;
243; SANDY-LABEL: test_andnotps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000244; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000245; SANDY-NEXT: vandnps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
246; SANDY-NEXT: vandnps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
247; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000248;
249; HASWELL-LABEL: test_andnotps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000250; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000251; HASWELL-NEXT: vandnps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000252; HASWELL-NEXT: vandnps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
253; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000254;
Gadi Haber85d99b42017-10-17 13:45:39 +0000255; BROADWELL-LABEL: test_andnotps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000256; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000257; BROADWELL-NEXT: vandnps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000258; BROADWELL-NEXT: vandnps (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
259; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000260;
Gadi Haber767d98b2017-08-30 08:08:50 +0000261; SKYLAKE-LABEL: test_andnotps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000262; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000263; SKYLAKE-NEXT: vandnps %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
264; SKYLAKE-NEXT: vandnps (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
265; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000266;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000267; SKX-LABEL: test_andnotps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000268; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +0000269; SKX-NEXT: vandnps %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
270; SKX-NEXT: vandnps (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
271; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000272;
Simon Pilgrim93986492017-04-18 19:04:40 +0000273; BTVER2-LABEL: test_andnotps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000274; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000275; BTVER2-NEXT: vandnps %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
276; BTVER2-NEXT: vandnps (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
277; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000278;
279; ZNVER1-LABEL: test_andnotps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000280; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000281; ZNVER1-NEXT: vandnps %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
282; ZNVER1-NEXT: vandnps (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000283; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000284 %1 = bitcast <4 x float> %a0 to <4 x i32>
285 %2 = bitcast <4 x float> %a1 to <4 x i32>
286 %3 = xor <4 x i32> %1, <i32 -1, i32 -1, i32 -1, i32 -1>
287 %4 = and <4 x i32> %3, %2
288 %5 = load <4 x float>, <4 x float> *%a2, align 16
289 %6 = bitcast <4 x float> %5 to <4 x i32>
290 %7 = xor <4 x i32> %4, <i32 -1, i32 -1, i32 -1, i32 -1>
291 %8 = and <4 x i32> %6, %7
292 %9 = bitcast <4 x i32> %8 to <4 x float>
293 ret <4 x float> %9
294}
295
296define <4 x float> @test_cmpps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
297; GENERIC-LABEL: test_cmpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000298; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000299; GENERIC-NEXT: cmpeqps %xmm0, %xmm1 # sched: [3:1.00]
300; GENERIC-NEXT: cmpeqps (%rdi), %xmm0 # sched: [9:1.00]
301; GENERIC-NEXT: orps %xmm1, %xmm0 # sched: [1:1.00]
302; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000303;
304; ATOM-LABEL: test_cmpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000305; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000306; ATOM-NEXT: cmpeqps %xmm0, %xmm1 # sched: [5:5.00]
307; ATOM-NEXT: cmpeqps (%rdi), %xmm0 # sched: [5:5.00]
Simon Pilgrim486072d2017-08-01 17:51:20 +0000308; ATOM-NEXT: orps %xmm1, %xmm0 # sched: [1:0.50]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000309; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000310;
311; SLM-LABEL: test_cmpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000312; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000313; SLM-NEXT: cmpeqps %xmm0, %xmm1 # sched: [3:1.00]
314; SLM-NEXT: cmpeqps (%rdi), %xmm0 # sched: [6:1.00]
315; SLM-NEXT: orps %xmm1, %xmm0 # sched: [1:0.50]
316; SLM-NEXT: retq # sched: [4:1.00]
317;
318; SANDY-LABEL: test_cmpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000319; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000320; SANDY-NEXT: vcmpeqps %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000321; SANDY-NEXT: vcmpeqps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
322; SANDY-NEXT: vorps %xmm0, %xmm1, %xmm0 # sched: [1:1.00]
323; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000324;
325; HASWELL-LABEL: test_cmpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000326; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000327; HASWELL-NEXT: vcmpeqps %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000328; HASWELL-NEXT: vcmpeqps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000329; HASWELL-NEXT: vorps %xmm0, %xmm1, %xmm0 # sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000330; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000331;
Gadi Haber85d99b42017-10-17 13:45:39 +0000332; BROADWELL-LABEL: test_cmpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000333; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000334; BROADWELL-NEXT: vcmpeqps %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000335; BROADWELL-NEXT: vcmpeqps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000336; BROADWELL-NEXT: vorps %xmm0, %xmm1, %xmm0 # sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000337; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000338;
Gadi Haber767d98b2017-08-30 08:08:50 +0000339; SKYLAKE-LABEL: test_cmpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000340; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000341; SKYLAKE-NEXT: vcmpeqps %xmm1, %xmm0, %xmm1 # sched: [4:0.33]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000342; SKYLAKE-NEXT: vcmpeqps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
343; SKYLAKE-NEXT: vorps %xmm0, %xmm1, %xmm0 # sched: [1:0.33]
344; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000345;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000346; SKX-LABEL: test_cmpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000347; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +0000348; SKX-NEXT: vcmpeqps %xmm1, %xmm0, %k0 # sched: [3:1.00]
349; SKX-NEXT: vcmpeqps (%rdi), %xmm0, %k1 # sched: [9:1.00]
350; SKX-NEXT: korw %k1, %k0, %k0 # sched: [1:1.00]
Simon Pilgrim7724b032017-12-06 18:47:37 +0000351; SKX-NEXT: vpmovm2d %k0, %xmm0 # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +0000352; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000353;
Simon Pilgrim93986492017-04-18 19:04:40 +0000354; BTVER2-LABEL: test_cmpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000355; BTVER2: # %bb.0:
Andrew V. Tischenkoe58c0c92018-01-15 14:21:11 +0000356; BTVER2-NEXT: vcmpeqps %xmm1, %xmm0, %xmm1 # sched: [2:1.00]
357; BTVER2-NEXT: vcmpeqps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000358; BTVER2-NEXT: vorps %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
359; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000360;
361; ZNVER1-LABEL: test_cmpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000362; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000363; ZNVER1-NEXT: vcmpeqps %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
364; ZNVER1-NEXT: vcmpeqps (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
365; ZNVER1-NEXT: vorps %xmm0, %xmm1, %xmm0 # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000366; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000367 %1 = fcmp oeq <4 x float> %a0, %a1
368 %2 = load <4 x float>, <4 x float> *%a2, align 16
369 %3 = fcmp oeq <4 x float> %a0, %2
370 %4 = or <4 x i1> %1, %3
371 %5 = sext <4 x i1> %4 to <4 x i32>
372 %6 = bitcast <4 x i32> %5 to <4 x float>
373 ret <4 x float> %6
374}
375
376define float @test_cmpss(float %a0, float %a1, float *%a2) {
377; GENERIC-LABEL: test_cmpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000378; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000379; GENERIC-NEXT: cmpeqss %xmm1, %xmm0 # sched: [3:1.00]
Craig Toppera0be5a02017-12-10 19:47:56 +0000380; GENERIC-NEXT: cmpeqss (%rdi), %xmm0 # sched: [9:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +0000381; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000382;
383; ATOM-LABEL: test_cmpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000384; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000385; ATOM-NEXT: cmpeqss %xmm1, %xmm0 # sched: [5:5.00]
386; ATOM-NEXT: cmpeqss (%rdi), %xmm0 # sched: [5:5.00]
387; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000388;
389; SLM-LABEL: test_cmpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000390; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000391; SLM-NEXT: cmpeqss %xmm1, %xmm0 # sched: [3:1.00]
392; SLM-NEXT: cmpeqss (%rdi), %xmm0 # sched: [6:1.00]
393; SLM-NEXT: retq # sched: [4:1.00]
394;
395; SANDY-LABEL: test_cmpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000396; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000397; SANDY-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Craig Toppera0be5a02017-12-10 19:47:56 +0000398; SANDY-NEXT: vcmpeqss (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000399; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000400;
401; HASWELL-LABEL: test_cmpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000402; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000403; HASWELL-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000404; HASWELL-NEXT: vcmpeqss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
405; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000406;
Gadi Haber85d99b42017-10-17 13:45:39 +0000407; BROADWELL-LABEL: test_cmpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000408; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000409; BROADWELL-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000410; BROADWELL-NEXT: vcmpeqss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
411; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000412;
Gadi Haber767d98b2017-08-30 08:08:50 +0000413; SKYLAKE-LABEL: test_cmpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000414; SKYLAKE: # %bb.0:
Craig Toppera0be5a02017-12-10 19:47:56 +0000415; SKYLAKE-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
416; SKYLAKE-NEXT: vcmpeqss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000417; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000418;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000419; SKX-LABEL: test_cmpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000420; SKX: # %bb.0:
Craig Toppera0be5a02017-12-10 19:47:56 +0000421; SKX-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
422; SKX-NEXT: vcmpeqss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
Gadi Haber684944b2017-10-08 12:52:54 +0000423; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000424;
Simon Pilgrim93986492017-04-18 19:04:40 +0000425; BTVER2-LABEL: test_cmpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000426; BTVER2: # %bb.0:
Simon Pilgrima8e6b882018-01-16 22:15:41 +0000427; BTVER2-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
428; BTVER2-NEXT: vcmpeqss (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000429; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000430;
431; ZNVER1-LABEL: test_cmpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000432; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000433; ZNVER1-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
434; ZNVER1-NEXT: vcmpeqss (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000435; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000436 %1 = insertelement <4 x float> undef, float %a0, i32 0
437 %2 = insertelement <4 x float> undef, float %a1, i32 0
438 %3 = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %1, <4 x float> %2, i8 0)
439 %4 = load float, float *%a2, align 4
440 %5 = insertelement <4 x float> undef, float %4, i32 0
441 %6 = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %3, <4 x float> %5, i8 0)
442 %7 = extractelement <4 x float> %6, i32 0
443 ret float %7
444}
445declare <4 x float> @llvm.x86.sse.cmp.ss(<4 x float>, <4 x float>, i8) nounwind readnone
446
447define i32 @test_comiss(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
448; GENERIC-LABEL: test_comiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000449; GENERIC: # %bb.0:
Craig Topper00265772018-01-23 21:37:51 +0000450; GENERIC-NEXT: comiss %xmm1, %xmm0 # sched: [2:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +0000451; GENERIC-NEXT: setnp %al # sched: [1:0.50]
452; GENERIC-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrim84846982017-08-01 15:14:35 +0000453; GENERIC-NEXT: andb %al, %cl # sched: [1:0.33]
Craig Topper00265772018-01-23 21:37:51 +0000454; GENERIC-NEXT: comiss (%rdi), %xmm0 # sched: [8:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +0000455; GENERIC-NEXT: setnp %al # sched: [1:0.50]
456; GENERIC-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrim84846982017-08-01 15:14:35 +0000457; GENERIC-NEXT: andb %al, %dl # sched: [1:0.33]
458; GENERIC-NEXT: orb %cl, %dl # sched: [1:0.33]
459; GENERIC-NEXT: movzbl %dl, %eax # sched: [1:0.33]
460; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000461;
462; ATOM-LABEL: test_comiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000463; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000464; ATOM-NEXT: comiss %xmm1, %xmm0 # sched: [9:4.50]
465; ATOM-NEXT: setnp %al # sched: [1:0.50]
466; ATOM-NEXT: sete %cl # sched: [1:0.50]
467; ATOM-NEXT: andb %al, %cl # sched: [1:0.50]
468; ATOM-NEXT: comiss (%rdi), %xmm0 # sched: [10:5.00]
469; ATOM-NEXT: setnp %al # sched: [1:0.50]
470; ATOM-NEXT: sete %dl # sched: [1:0.50]
471; ATOM-NEXT: andb %al, %dl # sched: [1:0.50]
472; ATOM-NEXT: orb %cl, %dl # sched: [1:0.50]
473; ATOM-NEXT: movzbl %dl, %eax # sched: [1:1.00]
474; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000475;
476; SLM-LABEL: test_comiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000477; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000478; SLM-NEXT: comiss %xmm1, %xmm0 # sched: [3:1.00]
479; SLM-NEXT: setnp %al # sched: [1:0.50]
480; SLM-NEXT: sete %cl # sched: [1:0.50]
481; SLM-NEXT: andb %al, %cl # sched: [1:0.50]
482; SLM-NEXT: comiss (%rdi), %xmm0 # sched: [6:1.00]
483; SLM-NEXT: setnp %al # sched: [1:0.50]
484; SLM-NEXT: sete %dl # sched: [1:0.50]
485; SLM-NEXT: andb %al, %dl # sched: [1:0.50]
486; SLM-NEXT: orb %cl, %dl # sched: [1:0.50]
487; SLM-NEXT: movzbl %dl, %eax # sched: [1:0.50]
488; SLM-NEXT: retq # sched: [4:1.00]
489;
490; SANDY-LABEL: test_comiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000491; SANDY: # %bb.0:
Craig Topper00265772018-01-23 21:37:51 +0000492; SANDY-NEXT: vcomiss %xmm1, %xmm0 # sched: [2:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +0000493; SANDY-NEXT: setnp %al # sched: [1:0.50]
494; SANDY-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000495; SANDY-NEXT: andb %al, %cl # sched: [1:0.33]
Craig Topper00265772018-01-23 21:37:51 +0000496; SANDY-NEXT: vcomiss (%rdi), %xmm0 # sched: [8:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +0000497; SANDY-NEXT: setnp %al # sched: [1:0.50]
498; SANDY-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000499; SANDY-NEXT: andb %al, %dl # sched: [1:0.33]
500; SANDY-NEXT: orb %cl, %dl # sched: [1:0.33]
501; SANDY-NEXT: movzbl %dl, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000502; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000503;
504; HASWELL-LABEL: test_comiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000505; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000506; HASWELL-NEXT: vcomiss %xmm1, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000507; HASWELL-NEXT: setnp %al # sched: [1:0.50]
508; HASWELL-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000509; HASWELL-NEXT: andb %al, %cl # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000510; HASWELL-NEXT: vcomiss (%rdi), %xmm0 # sched: [8:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000511; HASWELL-NEXT: setnp %al # sched: [1:0.50]
512; HASWELL-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000513; HASWELL-NEXT: andb %al, %dl # sched: [1:0.25]
514; HASWELL-NEXT: orb %cl, %dl # sched: [1:0.25]
515; HASWELL-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000516; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000517;
Gadi Haber85d99b42017-10-17 13:45:39 +0000518; BROADWELL-LABEL: test_comiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000519; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000520; BROADWELL-NEXT: vcomiss %xmm1, %xmm0 # sched: [3:1.00]
521; BROADWELL-NEXT: setnp %al # sched: [1:0.50]
522; BROADWELL-NEXT: sete %cl # sched: [1:0.50]
523; BROADWELL-NEXT: andb %al, %cl # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000524; BROADWELL-NEXT: vcomiss (%rdi), %xmm0 # sched: [8:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000525; BROADWELL-NEXT: setnp %al # sched: [1:0.50]
526; BROADWELL-NEXT: sete %dl # sched: [1:0.50]
527; BROADWELL-NEXT: andb %al, %dl # sched: [1:0.25]
528; BROADWELL-NEXT: orb %cl, %dl # sched: [1:0.25]
529; BROADWELL-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000530; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000531;
Gadi Haber767d98b2017-08-30 08:08:50 +0000532; SKYLAKE-LABEL: test_comiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000533; SKYLAKE: # %bb.0:
Craig Topper00265772018-01-23 21:37:51 +0000534; SKYLAKE-NEXT: vcomiss %xmm1, %xmm0 # sched: [2:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000535; SKYLAKE-NEXT: setnp %al # sched: [1:0.50]
536; SKYLAKE-NEXT: sete %cl # sched: [1:0.50]
Gadi Haber767d98b2017-08-30 08:08:50 +0000537; SKYLAKE-NEXT: andb %al, %cl # sched: [1:0.25]
Craig Topper00265772018-01-23 21:37:51 +0000538; SKYLAKE-NEXT: vcomiss (%rdi), %xmm0 # sched: [7:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000539; SKYLAKE-NEXT: setnp %al # sched: [1:0.50]
540; SKYLAKE-NEXT: sete %dl # sched: [1:0.50]
Gadi Haber767d98b2017-08-30 08:08:50 +0000541; SKYLAKE-NEXT: andb %al, %dl # sched: [1:0.25]
542; SKYLAKE-NEXT: orb %cl, %dl # sched: [1:0.25]
543; SKYLAKE-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000544; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000545;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000546; SKX-LABEL: test_comiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000547; SKX: # %bb.0:
Craig Topper00265772018-01-23 21:37:51 +0000548; SKX-NEXT: vcomiss %xmm1, %xmm0 # sched: [2:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +0000549; SKX-NEXT: setnp %al # sched: [1:0.50]
550; SKX-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000551; SKX-NEXT: andb %al, %cl # sched: [1:0.25]
Craig Topper00265772018-01-23 21:37:51 +0000552; SKX-NEXT: vcomiss (%rdi), %xmm0 # sched: [7:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +0000553; SKX-NEXT: setnp %al # sched: [1:0.50]
554; SKX-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000555; SKX-NEXT: andb %al, %dl # sched: [1:0.25]
556; SKX-NEXT: orb %cl, %dl # sched: [1:0.25]
557; SKX-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +0000558; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000559;
Simon Pilgrim93986492017-04-18 19:04:40 +0000560; BTVER2-LABEL: test_comiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000561; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000562; BTVER2-NEXT: vcomiss %xmm1, %xmm0 # sched: [3:1.00]
563; BTVER2-NEXT: setnp %al # sched: [1:0.50]
564; BTVER2-NEXT: sete %cl # sched: [1:0.50]
565; BTVER2-NEXT: andb %al, %cl # sched: [1:0.50]
566; BTVER2-NEXT: vcomiss (%rdi), %xmm0 # sched: [8:1.00]
567; BTVER2-NEXT: setnp %al # sched: [1:0.50]
568; BTVER2-NEXT: sete %dl # sched: [1:0.50]
569; BTVER2-NEXT: andb %al, %dl # sched: [1:0.50]
570; BTVER2-NEXT: orb %cl, %dl # sched: [1:0.50]
571; BTVER2-NEXT: movzbl %dl, %eax # sched: [1:0.50]
572; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000573;
574; ZNVER1-LABEL: test_comiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000575; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000576; ZNVER1-NEXT: vcomiss %xmm1, %xmm0 # sched: [3:1.00]
577; ZNVER1-NEXT: setnp %al # sched: [1:0.25]
578; ZNVER1-NEXT: sete %cl # sched: [1:0.25]
579; ZNVER1-NEXT: andb %al, %cl # sched: [1:0.25]
580; ZNVER1-NEXT: vcomiss (%rdi), %xmm0 # sched: [10:1.00]
581; ZNVER1-NEXT: setnp %al # sched: [1:0.25]
582; ZNVER1-NEXT: sete %dl # sched: [1:0.25]
583; ZNVER1-NEXT: andb %al, %dl # sched: [1:0.25]
584; ZNVER1-NEXT: orb %cl, %dl # sched: [1:0.25]
585; ZNVER1-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000586; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000587 %1 = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %a1)
588 %2 = load <4 x float>, <4 x float> *%a2, align 4
589 %3 = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %2)
590 %4 = or i32 %1, %3
591 ret i32 %4
592}
593declare i32 @llvm.x86.sse.comieq.ss(<4 x float>, <4 x float>) nounwind readnone
594
595define float @test_cvtsi2ss(i32 %a0, i32 *%a1) {
596; GENERIC-LABEL: test_cvtsi2ss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000597; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000598; GENERIC-NEXT: cvtsi2ssl %edi, %xmm1 # sched: [5:2.00]
599; GENERIC-NEXT: cvtsi2ssl (%rsi), %xmm0 # sched: [10:1.00]
600; GENERIC-NEXT: addss %xmm1, %xmm0 # sched: [3:1.00]
601; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000602;
603; ATOM-LABEL: test_cvtsi2ss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000604; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000605; ATOM-NEXT: cvtsi2ssl (%rsi), %xmm0 # sched: [7:3.50]
606; ATOM-NEXT: cvtsi2ssl %edi, %xmm1 # sched: [6:3.00]
607; ATOM-NEXT: addss %xmm1, %xmm0 # sched: [5:5.00]
608; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000609;
610; SLM-LABEL: test_cvtsi2ss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000611; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000612; SLM-NEXT: cvtsi2ssl (%rsi), %xmm0 # sched: [7:1.00]
613; SLM-NEXT: cvtsi2ssl %edi, %xmm1 # sched: [4:0.50]
614; SLM-NEXT: addss %xmm1, %xmm0 # sched: [3:1.00]
615; SLM-NEXT: retq # sched: [4:1.00]
616;
617; SANDY-LABEL: test_cvtsi2ss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000618; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000619; SANDY-NEXT: vcvtsi2ssl %edi, %xmm0, %xmm0 # sched: [5:2.00]
620; SANDY-NEXT: vcvtsi2ssl (%rsi), %xmm1, %xmm1 # sched: [10:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000621; SANDY-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000622; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000623;
624; HASWELL-LABEL: test_cvtsi2ss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000625; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000626; HASWELL-NEXT: vcvtsi2ssl %edi, %xmm0, %xmm0 # sched: [4:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000627; HASWELL-NEXT: vcvtsi2ssl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000628; HASWELL-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000629; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000630;
Gadi Haber85d99b42017-10-17 13:45:39 +0000631; BROADWELL-LABEL: test_cvtsi2ss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000632; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000633; BROADWELL-NEXT: vcvtsi2ssl %edi, %xmm0, %xmm0 # sched: [4:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000634; BROADWELL-NEXT: vcvtsi2ssl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000635; BROADWELL-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000636; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000637;
Gadi Haber767d98b2017-08-30 08:08:50 +0000638; SKYLAKE-LABEL: test_cvtsi2ss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000639; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000640; SKYLAKE-NEXT: vcvtsi2ssl %edi, %xmm0, %xmm0 # sched: [5:1.00]
641; SKYLAKE-NEXT: vcvtsi2ssl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
642; SKYLAKE-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000643; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000644;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000645; SKX-LABEL: test_cvtsi2ss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000646; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000647; SKX-NEXT: vcvtsi2ssl %edi, %xmm0, %xmm0 # sched: [5:1.00]
648; SKX-NEXT: vcvtsi2ssl (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +0000649; SKX-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
650; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000651;
Simon Pilgrim93986492017-04-18 19:04:40 +0000652; BTVER2-LABEL: test_cvtsi2ss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000653; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000654; BTVER2-NEXT: vcvtsi2ssl %edi, %xmm0, %xmm0 # sched: [3:1.00]
655; BTVER2-NEXT: vcvtsi2ssl (%rsi), %xmm1, %xmm1 # sched: [8:1.00]
656; BTVER2-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
657; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000658;
659; ZNVER1-LABEL: test_cvtsi2ss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000660; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000661; ZNVER1-NEXT: vcvtsi2ssl %edi, %xmm0, %xmm0 # sched: [5:1.00]
662; ZNVER1-NEXT: vcvtsi2ssl (%rsi), %xmm1, %xmm1 # sched: [12:1.00]
663; ZNVER1-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000664; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000665 %1 = sitofp i32 %a0 to float
666 %2 = load i32, i32 *%a1, align 4
667 %3 = sitofp i32 %2 to float
668 %4 = fadd float %1, %3
669 ret float %4
670}
671
672define float @test_cvtsi2ssq(i64 %a0, i64 *%a1) {
673; GENERIC-LABEL: test_cvtsi2ssq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000674; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000675; GENERIC-NEXT: cvtsi2ssq %rdi, %xmm1 # sched: [5:2.00]
676; GENERIC-NEXT: cvtsi2ssq (%rsi), %xmm0 # sched: [10:1.00]
677; GENERIC-NEXT: addss %xmm1, %xmm0 # sched: [3:1.00]
678; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000679;
680; ATOM-LABEL: test_cvtsi2ssq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000681; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000682; ATOM-NEXT: cvtsi2ssq (%rsi), %xmm0 # sched: [7:3.50]
683; ATOM-NEXT: cvtsi2ssq %rdi, %xmm1 # sched: [6:3.00]
684; ATOM-NEXT: addss %xmm1, %xmm0 # sched: [5:5.00]
685; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000686;
687; SLM-LABEL: test_cvtsi2ssq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000688; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000689; SLM-NEXT: cvtsi2ssq (%rsi), %xmm0 # sched: [7:1.00]
690; SLM-NEXT: cvtsi2ssq %rdi, %xmm1 # sched: [4:0.50]
691; SLM-NEXT: addss %xmm1, %xmm0 # sched: [3:1.00]
692; SLM-NEXT: retq # sched: [4:1.00]
693;
694; SANDY-LABEL: test_cvtsi2ssq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000695; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000696; SANDY-NEXT: vcvtsi2ssq %rdi, %xmm0, %xmm0 # sched: [5:2.00]
697; SANDY-NEXT: vcvtsi2ssq (%rsi), %xmm1, %xmm1 # sched: [10:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000698; SANDY-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000699; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000700;
701; HASWELL-LABEL: test_cvtsi2ssq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000702; HASWELL: # %bb.0:
Gadi Haberd76f7b82017-08-28 10:04:16 +0000703; HASWELL-NEXT: vcvtsi2ssq %rdi, %xmm0, %xmm0 # sched: [5:2.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000704; HASWELL-NEXT: vcvtsi2ssq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000705; HASWELL-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000706; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000707;
Gadi Haber85d99b42017-10-17 13:45:39 +0000708; BROADWELL-LABEL: test_cvtsi2ssq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000709; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +0000710; BROADWELL-NEXT: vcvtsi2ssq %rdi, %xmm0, %xmm0 # sched: [5:2.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000711; BROADWELL-NEXT: vcvtsi2ssq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000712; BROADWELL-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +0000713; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000714;
Gadi Haber767d98b2017-08-30 08:08:50 +0000715; SKYLAKE-LABEL: test_cvtsi2ssq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000716; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000717; SKYLAKE-NEXT: vcvtsi2ssq %rdi, %xmm0, %xmm0 # sched: [6:2.00]
718; SKYLAKE-NEXT: vcvtsi2ssq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
719; SKYLAKE-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000720; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000721;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000722; SKX-LABEL: test_cvtsi2ssq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000723; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000724; SKX-NEXT: vcvtsi2ssq %rdi, %xmm0, %xmm0 # sched: [6:2.00]
725; SKX-NEXT: vcvtsi2ssq (%rsi), %xmm1, %xmm1 # sched: [9:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +0000726; SKX-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
727; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000728;
Simon Pilgrim93986492017-04-18 19:04:40 +0000729; BTVER2-LABEL: test_cvtsi2ssq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000730; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000731; BTVER2-NEXT: vcvtsi2ssq %rdi, %xmm0, %xmm0 # sched: [3:1.00]
732; BTVER2-NEXT: vcvtsi2ssq (%rsi), %xmm1, %xmm1 # sched: [8:1.00]
733; BTVER2-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
734; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000735;
736; ZNVER1-LABEL: test_cvtsi2ssq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000737; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000738; ZNVER1-NEXT: vcvtsi2ssq %rdi, %xmm0, %xmm0 # sched: [5:1.00]
739; ZNVER1-NEXT: vcvtsi2ssq (%rsi), %xmm1, %xmm1 # sched: [12:1.00]
740; ZNVER1-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000741; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000742 %1 = sitofp i64 %a0 to float
743 %2 = load i64, i64 *%a1, align 8
744 %3 = sitofp i64 %2 to float
745 %4 = fadd float %1, %3
746 ret float %4
747}
748
749define i32 @test_cvtss2si(float %a0, float *%a1) {
750; GENERIC-LABEL: test_cvtss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000751; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000752; GENERIC-NEXT: cvtss2si %xmm0, %ecx # sched: [5:1.00]
753; GENERIC-NEXT: cvtss2si (%rdi), %eax # sched: [9:1.00]
754; GENERIC-NEXT: addl %ecx, %eax # sched: [1:0.33]
755; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000756;
757; ATOM-LABEL: test_cvtss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000758; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000759; ATOM-NEXT: cvtss2si (%rdi), %eax # sched: [9:4.50]
760; ATOM-NEXT: cvtss2si %xmm0, %ecx # sched: [8:4.00]
761; ATOM-NEXT: addl %ecx, %eax # sched: [1:0.50]
762; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000763;
764; SLM-LABEL: test_cvtss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000765; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000766; SLM-NEXT: cvtss2si (%rdi), %eax # sched: [7:1.00]
767; SLM-NEXT: cvtss2si %xmm0, %ecx # sched: [4:0.50]
768; SLM-NEXT: addl %ecx, %eax # sched: [1:0.50]
769; SLM-NEXT: retq # sched: [4:1.00]
770;
771; SANDY-LABEL: test_cvtss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000772; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000773; SANDY-NEXT: vcvtss2si %xmm0, %ecx # sched: [5:1.00]
774; SANDY-NEXT: vcvtss2si (%rdi), %eax # sched: [10:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000775; SANDY-NEXT: addl %ecx, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000776; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000777;
778; HASWELL-LABEL: test_cvtss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000779; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000780; HASWELL-NEXT: vcvtss2si %xmm0, %ecx # sched: [4:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000781; HASWELL-NEXT: vcvtss2si (%rdi), %eax # sched: [9:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000782; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000783; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000784;
Gadi Haber85d99b42017-10-17 13:45:39 +0000785; BROADWELL-LABEL: test_cvtss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000786; BROADWELL: # %bb.0:
Sanjoy Das81a4a022017-12-12 18:40:58 +0000787; BROADWELL-NEXT: vcvtss2si (%rdi), %eax # sched: [9:1.00]
Sanjoy Das1074eb22017-12-12 19:11:31 +0000788; BROADWELL-NEXT: vcvtss2si %xmm0, %ecx # sched: [4:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000789; BROADWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000790; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000791;
Gadi Haber767d98b2017-08-30 08:08:50 +0000792; SKYLAKE-LABEL: test_cvtss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000793; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000794; SKYLAKE-NEXT: vcvtss2si %xmm0, %ecx # sched: [6:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000795; SKYLAKE-NEXT: vcvtss2si (%rdi), %eax # sched: [11:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000796; SKYLAKE-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000797; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000798;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000799; SKX-LABEL: test_cvtss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000800; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000801; SKX-NEXT: vcvtss2si %xmm0, %ecx # sched: [6:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +0000802; SKX-NEXT: vcvtss2si (%rdi), %eax # sched: [11:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000803; SKX-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +0000804; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000805;
Simon Pilgrim93986492017-04-18 19:04:40 +0000806; BTVER2-LABEL: test_cvtss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000807; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000808; BTVER2-NEXT: vcvtss2si (%rdi), %eax # sched: [8:1.00]
809; BTVER2-NEXT: vcvtss2si %xmm0, %ecx # sched: [3:1.00]
810; BTVER2-NEXT: addl %ecx, %eax # sched: [1:0.50]
811; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000812;
813; ZNVER1-LABEL: test_cvtss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000814; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000815; ZNVER1-NEXT: vcvtss2si (%rdi), %eax # sched: [12:1.00]
816; ZNVER1-NEXT: vcvtss2si %xmm0, %ecx # sched: [5:1.00]
817; ZNVER1-NEXT: addl %ecx, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000818; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000819 %1 = insertelement <4 x float> undef, float %a0, i32 0
820 %2 = call i32 @llvm.x86.sse.cvtss2si(<4 x float> %1)
821 %3 = load float, float *%a1, align 4
822 %4 = insertelement <4 x float> undef, float %3, i32 0
823 %5 = call i32 @llvm.x86.sse.cvtss2si(<4 x float> %4)
824 %6 = add i32 %2, %5
825 ret i32 %6
826}
827declare i32 @llvm.x86.sse.cvtss2si(<4 x float>) nounwind readnone
828
829define i64 @test_cvtss2siq(float %a0, float *%a1) {
830; GENERIC-LABEL: test_cvtss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000831; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000832; GENERIC-NEXT: cvtss2si %xmm0, %rcx # sched: [5:1.00]
833; GENERIC-NEXT: cvtss2si (%rdi), %rax # sched: [9:1.00]
834; GENERIC-NEXT: addq %rcx, %rax # sched: [1:0.33]
835; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000836;
837; ATOM-LABEL: test_cvtss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000838; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000839; ATOM-NEXT: cvtss2si (%rdi), %rax # sched: [10:5.00]
840; ATOM-NEXT: cvtss2si %xmm0, %rcx # sched: [9:4.50]
841; ATOM-NEXT: addq %rcx, %rax # sched: [1:0.50]
842; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000843;
844; SLM-LABEL: test_cvtss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000845; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000846; SLM-NEXT: cvtss2si (%rdi), %rax # sched: [7:1.00]
847; SLM-NEXT: cvtss2si %xmm0, %rcx # sched: [4:0.50]
848; SLM-NEXT: addq %rcx, %rax # sched: [1:0.50]
849; SLM-NEXT: retq # sched: [4:1.00]
850;
851; SANDY-LABEL: test_cvtss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000852; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000853; SANDY-NEXT: vcvtss2si %xmm0, %rcx # sched: [5:1.00]
854; SANDY-NEXT: vcvtss2si (%rdi), %rax # sched: [10:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000855; SANDY-NEXT: addq %rcx, %rax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000856; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000857;
858; HASWELL-LABEL: test_cvtss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000859; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000860; HASWELL-NEXT: vcvtss2si %xmm0, %rcx # sched: [4:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000861; HASWELL-NEXT: vcvtss2si (%rdi), %rax # sched: [9:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000862; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000863; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000864;
Gadi Haber85d99b42017-10-17 13:45:39 +0000865; BROADWELL-LABEL: test_cvtss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000866; BROADWELL: # %bb.0:
Sanjoy Das81a4a022017-12-12 18:40:58 +0000867; BROADWELL-NEXT: vcvtss2si (%rdi), %rax # sched: [9:1.00]
Sanjoy Das1074eb22017-12-12 19:11:31 +0000868; BROADWELL-NEXT: vcvtss2si %xmm0, %rcx # sched: [4:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000869; BROADWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000870; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000871;
Gadi Haber767d98b2017-08-30 08:08:50 +0000872; SKYLAKE-LABEL: test_cvtss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000873; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000874; SKYLAKE-NEXT: vcvtss2si %xmm0, %rcx # sched: [6:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000875; SKYLAKE-NEXT: vcvtss2si (%rdi), %rax # sched: [11:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000876; SKYLAKE-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000877; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000878;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000879; SKX-LABEL: test_cvtss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000880; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000881; SKX-NEXT: vcvtss2si %xmm0, %rcx # sched: [6:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +0000882; SKX-NEXT: vcvtss2si (%rdi), %rax # sched: [11:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000883; SKX-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +0000884; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000885;
Simon Pilgrim93986492017-04-18 19:04:40 +0000886; BTVER2-LABEL: test_cvtss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000887; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000888; BTVER2-NEXT: vcvtss2si (%rdi), %rax # sched: [8:1.00]
889; BTVER2-NEXT: vcvtss2si %xmm0, %rcx # sched: [3:1.00]
890; BTVER2-NEXT: addq %rcx, %rax # sched: [1:0.50]
891; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000892;
893; ZNVER1-LABEL: test_cvtss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000894; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000895; ZNVER1-NEXT: vcvtss2si (%rdi), %rax # sched: [12:1.00]
896; ZNVER1-NEXT: vcvtss2si %xmm0, %rcx # sched: [5:1.00]
897; ZNVER1-NEXT: addq %rcx, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000898; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000899 %1 = insertelement <4 x float> undef, float %a0, i32 0
900 %2 = call i64 @llvm.x86.sse.cvtss2si64(<4 x float> %1)
901 %3 = load float, float *%a1, align 4
902 %4 = insertelement <4 x float> undef, float %3, i32 0
903 %5 = call i64 @llvm.x86.sse.cvtss2si64(<4 x float> %4)
904 %6 = add i64 %2, %5
905 ret i64 %6
906}
907declare i64 @llvm.x86.sse.cvtss2si64(<4 x float>) nounwind readnone
908
909define i32 @test_cvttss2si(float %a0, float *%a1) {
910; GENERIC-LABEL: test_cvttss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000911; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000912; GENERIC-NEXT: cvttss2si %xmm0, %ecx # sched: [5:1.00]
913; GENERIC-NEXT: cvttss2si (%rdi), %eax # sched: [9:1.00]
914; GENERIC-NEXT: addl %ecx, %eax # sched: [1:0.33]
915; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000916;
917; ATOM-LABEL: test_cvttss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000918; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000919; ATOM-NEXT: cvttss2si (%rdi), %eax # sched: [9:4.50]
920; ATOM-NEXT: cvttss2si %xmm0, %ecx # sched: [8:4.00]
921; ATOM-NEXT: addl %ecx, %eax # sched: [1:0.50]
922; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000923;
924; SLM-LABEL: test_cvttss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000925; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000926; SLM-NEXT: cvttss2si (%rdi), %eax # sched: [7:1.00]
927; SLM-NEXT: cvttss2si %xmm0, %ecx # sched: [4:0.50]
928; SLM-NEXT: addl %ecx, %eax # sched: [1:0.50]
929; SLM-NEXT: retq # sched: [4:1.00]
930;
931; SANDY-LABEL: test_cvttss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000932; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000933; SANDY-NEXT: vcvttss2si %xmm0, %ecx # sched: [5:1.00]
934; SANDY-NEXT: vcvttss2si (%rdi), %eax # sched: [10:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000935; SANDY-NEXT: addl %ecx, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000936; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000937;
938; HASWELL-LABEL: test_cvttss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000939; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000940; HASWELL-NEXT: vcvttss2si %xmm0, %ecx # sched: [4:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000941; HASWELL-NEXT: vcvttss2si (%rdi), %eax # sched: [9:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000942; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +0000943; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000944;
Gadi Haber85d99b42017-10-17 13:45:39 +0000945; BROADWELL-LABEL: test_cvttss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000946; BROADWELL: # %bb.0:
Sanjoy Das81a4a022017-12-12 18:40:58 +0000947; BROADWELL-NEXT: vcvttss2si (%rdi), %eax # sched: [9:1.00]
Sanjoy Das1074eb22017-12-12 19:11:31 +0000948; BROADWELL-NEXT: vcvttss2si %xmm0, %ecx # sched: [4:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000949; BROADWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +0000950; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +0000951;
Gadi Haber767d98b2017-08-30 08:08:50 +0000952; SKYLAKE-LABEL: test_cvttss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000953; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000954; SKYLAKE-NEXT: vcvttss2si %xmm0, %ecx # sched: [7:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000955; SKYLAKE-NEXT: vcvttss2si (%rdi), %eax # sched: [11:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000956; SKYLAKE-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +0000957; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +0000958;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000959; SKX-LABEL: test_cvttss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000960; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000961; SKX-NEXT: vcvttss2si %xmm0, %ecx # sched: [7:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +0000962; SKX-NEXT: vcvttss2si (%rdi), %eax # sched: [11:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000963; SKX-NEXT: addl %ecx, %eax # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +0000964; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000965;
Simon Pilgrim93986492017-04-18 19:04:40 +0000966; BTVER2-LABEL: test_cvttss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000967; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +0000968; BTVER2-NEXT: vcvttss2si (%rdi), %eax # sched: [8:1.00]
969; BTVER2-NEXT: vcvttss2si %xmm0, %ecx # sched: [3:1.00]
970; BTVER2-NEXT: addl %ecx, %eax # sched: [1:0.50]
971; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000972;
973; ZNVER1-LABEL: test_cvttss2si:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000974; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +0000975; ZNVER1-NEXT: vcvttss2si (%rdi), %eax # sched: [12:1.00]
976; ZNVER1-NEXT: vcvttss2si %xmm0, %ecx # sched: [5:1.00]
977; ZNVER1-NEXT: addl %ecx, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +0000978; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000979 %1 = fptosi float %a0 to i32
980 %2 = load float, float *%a1, align 4
981 %3 = fptosi float %2 to i32
982 %4 = add i32 %1, %3
983 ret i32 %4
984}
985
986define i64 @test_cvttss2siq(float %a0, float *%a1) {
987; GENERIC-LABEL: test_cvttss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000988; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000989; GENERIC-NEXT: cvttss2si %xmm0, %rcx # sched: [5:1.00]
990; GENERIC-NEXT: cvttss2si (%rdi), %rax # sched: [9:1.00]
991; GENERIC-NEXT: addq %rcx, %rax # sched: [1:0.33]
992; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000993;
994; ATOM-LABEL: test_cvttss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +0000995; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000996; ATOM-NEXT: cvttss2si (%rdi), %rax # sched: [10:5.00]
997; ATOM-NEXT: cvttss2si %xmm0, %rcx # sched: [9:4.50]
998; ATOM-NEXT: addq %rcx, %rax # sched: [1:0.50]
999; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001000;
1001; SLM-LABEL: test_cvttss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001002; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001003; SLM-NEXT: cvttss2si (%rdi), %rax # sched: [7:1.00]
1004; SLM-NEXT: cvttss2si %xmm0, %rcx # sched: [4:0.50]
1005; SLM-NEXT: addq %rcx, %rax # sched: [1:0.50]
1006; SLM-NEXT: retq # sched: [4:1.00]
1007;
1008; SANDY-LABEL: test_cvttss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001009; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001010; SANDY-NEXT: vcvttss2si %xmm0, %rcx # sched: [5:1.00]
1011; SANDY-NEXT: vcvttss2si (%rdi), %rax # sched: [10:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001012; SANDY-NEXT: addq %rcx, %rax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001013; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001014;
1015; HASWELL-LABEL: test_cvttss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001016; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001017; HASWELL-NEXT: vcvttss2si %xmm0, %rcx # sched: [4:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001018; HASWELL-NEXT: vcvttss2si (%rdi), %rax # sched: [9:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001019; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001020; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001021;
Gadi Haber85d99b42017-10-17 13:45:39 +00001022; BROADWELL-LABEL: test_cvttss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001023; BROADWELL: # %bb.0:
Sanjoy Das81a4a022017-12-12 18:40:58 +00001024; BROADWELL-NEXT: vcvttss2si (%rdi), %rax # sched: [9:1.00]
Sanjoy Das1074eb22017-12-12 19:11:31 +00001025; BROADWELL-NEXT: vcvttss2si %xmm0, %rcx # sched: [4:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001026; BROADWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +00001027; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001028;
Gadi Haber767d98b2017-08-30 08:08:50 +00001029; SKYLAKE-LABEL: test_cvttss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001030; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001031; SKYLAKE-NEXT: vcvttss2si %xmm0, %rcx # sched: [7:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001032; SKYLAKE-NEXT: vcvttss2si (%rdi), %rax # sched: [11:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001033; SKYLAKE-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001034; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001035;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001036; SKX-LABEL: test_cvttss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001037; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001038; SKX-NEXT: vcvttss2si %xmm0, %rcx # sched: [7:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00001039; SKX-NEXT: vcvttss2si (%rdi), %rax # sched: [11:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001040; SKX-NEXT: addq %rcx, %rax # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +00001041; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001042;
Simon Pilgrim93986492017-04-18 19:04:40 +00001043; BTVER2-LABEL: test_cvttss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001044; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001045; BTVER2-NEXT: vcvttss2si (%rdi), %rax # sched: [8:1.00]
1046; BTVER2-NEXT: vcvttss2si %xmm0, %rcx # sched: [3:1.00]
1047; BTVER2-NEXT: addq %rcx, %rax # sched: [1:0.50]
1048; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001049;
1050; ZNVER1-LABEL: test_cvttss2siq:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001051; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00001052; ZNVER1-NEXT: vcvttss2si (%rdi), %rax # sched: [12:1.00]
1053; ZNVER1-NEXT: vcvttss2si %xmm0, %rcx # sched: [5:1.00]
1054; ZNVER1-NEXT: addq %rcx, %rax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001055; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001056 %1 = fptosi float %a0 to i64
1057 %2 = load float, float *%a1, align 4
1058 %3 = fptosi float %2 to i64
1059 %4 = add i64 %1, %3
1060 ret i64 %4
1061}
1062
1063define <4 x float> @test_divps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
1064; GENERIC-LABEL: test_divps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001065; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001066; GENERIC-NEXT: divps %xmm1, %xmm0 # sched: [14:1.00]
1067; GENERIC-NEXT: divps (%rdi), %xmm0 # sched: [20:1.00]
1068; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001069;
1070; ATOM-LABEL: test_divps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001071; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001072; ATOM-NEXT: divps %xmm1, %xmm0 # sched: [70:35.00]
1073; ATOM-NEXT: divps (%rdi), %xmm0 # sched: [125:62.50]
1074; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001075;
1076; SLM-LABEL: test_divps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001077; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001078; SLM-NEXT: divps %xmm1, %xmm0 # sched: [34:34.00]
1079; SLM-NEXT: divps (%rdi), %xmm0 # sched: [37:34.00]
1080; SLM-NEXT: retq # sched: [4:1.00]
1081;
1082; SANDY-LABEL: test_divps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001083; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001084; SANDY-NEXT: vdivps %xmm1, %xmm0, %xmm0 # sched: [14:1.00]
1085; SANDY-NEXT: vdivps (%rdi), %xmm0, %xmm0 # sched: [20:1.00]
1086; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001087;
1088; HASWELL-LABEL: test_divps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001089; HASWELL: # %bb.0:
Gadi Haberd76f7b82017-08-28 10:04:16 +00001090; HASWELL-NEXT: vdivps %xmm1, %xmm0, %xmm0 # sched: [13:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001091; HASWELL-NEXT: vdivps (%rdi), %xmm0, %xmm0 # sched: [19:1.00]
1092; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001093;
Gadi Haber85d99b42017-10-17 13:45:39 +00001094; BROADWELL-LABEL: test_divps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001095; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +00001096; BROADWELL-NEXT: vdivps %xmm1, %xmm0, %xmm0 # sched: [11:1.00]
1097; BROADWELL-NEXT: vdivps (%rdi), %xmm0, %xmm0 # sched: [16:1.00]
1098; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001099;
Gadi Haber767d98b2017-08-30 08:08:50 +00001100; SKYLAKE-LABEL: test_divps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001101; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001102; SKYLAKE-NEXT: vdivps %xmm1, %xmm0, %xmm0 # sched: [11:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001103; SKYLAKE-NEXT: vdivps (%rdi), %xmm0, %xmm0 # sched: [17:1.00]
1104; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001105;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001106; SKX-LABEL: test_divps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001107; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001108; SKX-NEXT: vdivps %xmm1, %xmm0, %xmm0 # sched: [11:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00001109; SKX-NEXT: vdivps (%rdi), %xmm0, %xmm0 # sched: [17:1.00]
1110; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001111;
Simon Pilgrim93986492017-04-18 19:04:40 +00001112; BTVER2-LABEL: test_divps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001113; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001114; BTVER2-NEXT: vdivps %xmm1, %xmm0, %xmm0 # sched: [19:19.00]
1115; BTVER2-NEXT: vdivps (%rdi), %xmm0, %xmm0 # sched: [24:19.00]
1116; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001117;
1118; ZNVER1-LABEL: test_divps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001119; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00001120; ZNVER1-NEXT: vdivps %xmm1, %xmm0, %xmm0 # sched: [15:1.00]
1121; ZNVER1-NEXT: vdivps (%rdi), %xmm0, %xmm0 # sched: [22:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001122; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001123 %1 = fdiv <4 x float> %a0, %a1
1124 %2 = load <4 x float>, <4 x float> *%a2, align 16
1125 %3 = fdiv <4 x float> %1, %2
1126 ret <4 x float> %3
1127}
1128
1129define float @test_divss(float %a0, float %a1, float *%a2) {
1130; GENERIC-LABEL: test_divss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001131; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001132; GENERIC-NEXT: divss %xmm1, %xmm0 # sched: [14:1.00]
1133; GENERIC-NEXT: divss (%rdi), %xmm0 # sched: [20:1.00]
1134; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001135;
1136; ATOM-LABEL: test_divss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001137; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001138; ATOM-NEXT: divss %xmm1, %xmm0 # sched: [34:17.00]
1139; ATOM-NEXT: divss (%rdi), %xmm0 # sched: [62:31.00]
1140; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001141;
1142; SLM-LABEL: test_divss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001143; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001144; SLM-NEXT: divss %xmm1, %xmm0 # sched: [34:34.00]
1145; SLM-NEXT: divss (%rdi), %xmm0 # sched: [37:34.00]
1146; SLM-NEXT: retq # sched: [4:1.00]
1147;
1148; SANDY-LABEL: test_divss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001149; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001150; SANDY-NEXT: vdivss %xmm1, %xmm0, %xmm0 # sched: [14:1.00]
1151; SANDY-NEXT: vdivss (%rdi), %xmm0, %xmm0 # sched: [20:1.00]
1152; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001153;
1154; HASWELL-LABEL: test_divss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001155; HASWELL: # %bb.0:
Gadi Haberd76f7b82017-08-28 10:04:16 +00001156; HASWELL-NEXT: vdivss %xmm1, %xmm0, %xmm0 # sched: [13:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001157; HASWELL-NEXT: vdivss (%rdi), %xmm0, %xmm0 # sched: [18:1.00]
1158; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001159;
Gadi Haber85d99b42017-10-17 13:45:39 +00001160; BROADWELL-LABEL: test_divss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001161; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +00001162; BROADWELL-NEXT: vdivss %xmm1, %xmm0, %xmm0 # sched: [11:1.00]
1163; BROADWELL-NEXT: vdivss (%rdi), %xmm0, %xmm0 # sched: [16:1.00]
1164; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001165;
Gadi Haber767d98b2017-08-30 08:08:50 +00001166; SKYLAKE-LABEL: test_divss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001167; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001168; SKYLAKE-NEXT: vdivss %xmm1, %xmm0, %xmm0 # sched: [11:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001169; SKYLAKE-NEXT: vdivss (%rdi), %xmm0, %xmm0 # sched: [16:1.00]
1170; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001171;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001172; SKX-LABEL: test_divss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001173; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001174; SKX-NEXT: vdivss %xmm1, %xmm0, %xmm0 # sched: [11:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00001175; SKX-NEXT: vdivss (%rdi), %xmm0, %xmm0 # sched: [16:1.00]
1176; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001177;
Simon Pilgrim93986492017-04-18 19:04:40 +00001178; BTVER2-LABEL: test_divss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001179; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001180; BTVER2-NEXT: vdivss %xmm1, %xmm0, %xmm0 # sched: [19:19.00]
1181; BTVER2-NEXT: vdivss (%rdi), %xmm0, %xmm0 # sched: [24:19.00]
1182; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001183;
1184; ZNVER1-LABEL: test_divss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001185; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00001186; ZNVER1-NEXT: vdivss %xmm1, %xmm0, %xmm0 # sched: [15:1.00]
1187; ZNVER1-NEXT: vdivss (%rdi), %xmm0, %xmm0 # sched: [22:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001188; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001189 %1 = fdiv float %a0, %a1
1190 %2 = load float, float *%a2, align 4
1191 %3 = fdiv float %1, %2
1192 ret float %3
1193}
1194
1195define void @test_ldmxcsr(i32 %a0) {
1196; GENERIC-LABEL: test_ldmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001197; GENERIC: # %bb.0:
Gadi Haberbed2c502017-08-13 13:59:24 +00001198; GENERIC-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [5:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +00001199; GENERIC-NEXT: ldmxcsr -{{[0-9]+}}(%rsp) # sched: [5:1.00]
1200; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001201;
1202; ATOM-LABEL: test_ldmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001203; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001204; ATOM-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
1205; ATOM-NEXT: ldmxcsr -{{[0-9]+}}(%rsp) # sched: [5:2.50]
1206; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001207;
1208; SLM-LABEL: test_ldmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001209; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001210; SLM-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
1211; SLM-NEXT: ldmxcsr -{{[0-9]+}}(%rsp) # sched: [3:1.00]
1212; SLM-NEXT: retq # sched: [4:1.00]
1213;
1214; SANDY-LABEL: test_ldmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001215; SANDY: # %bb.0:
Gadi Haberbed2c502017-08-13 13:59:24 +00001216; SANDY-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [5:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001217; SANDY-NEXT: vldmxcsr -{{[0-9]+}}(%rsp) # sched: [5:1.00]
1218; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001219;
1220; HASWELL-LABEL: test_ldmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001221; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001222; HASWELL-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001223; HASWELL-NEXT: vldmxcsr -{{[0-9]+}}(%rsp) # sched: [7:1.00]
1224; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001225;
Gadi Haber85d99b42017-10-17 13:45:39 +00001226; BROADWELL-LABEL: test_ldmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001227; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00001228; BROADWELL-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00001229; BROADWELL-NEXT: vldmxcsr -{{[0-9]+}}(%rsp) # sched: [7:1.00]
1230; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001231;
Gadi Haber767d98b2017-08-30 08:08:50 +00001232; SKYLAKE-LABEL: test_ldmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001233; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +00001234; SKYLAKE-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001235; SKYLAKE-NEXT: vldmxcsr -{{[0-9]+}}(%rsp) # sched: [7:1.00]
1236; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001237;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001238; SKX-LABEL: test_ldmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001239; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001240; SKX-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00001241; SKX-NEXT: vldmxcsr -{{[0-9]+}}(%rsp) # sched: [7:1.00]
1242; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001243;
Simon Pilgrim93986492017-04-18 19:04:40 +00001244; BTVER2-LABEL: test_ldmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001245; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001246; BTVER2-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
1247; BTVER2-NEXT: vldmxcsr -{{[0-9]+}}(%rsp) # sched: [5:1.00]
1248; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001249;
1250; ZNVER1-LABEL: test_ldmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001251; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00001252; ZNVER1-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001253; ZNVER1-NEXT: vldmxcsr -{{[0-9]+}}(%rsp) # sched: [100:?]
1254; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001255 %1 = alloca i32, align 4
1256 %2 = bitcast i32* %1 to i8*
1257 store i32 %a0, i32* %1
1258 call void @llvm.x86.sse.ldmxcsr(i8* %2)
1259 ret void
1260}
1261declare void @llvm.x86.sse.ldmxcsr(i8*) nounwind readnone
1262
1263define <4 x float> @test_maxps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
1264; GENERIC-LABEL: test_maxps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001265; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001266; GENERIC-NEXT: maxps %xmm1, %xmm0 # sched: [3:1.00]
1267; GENERIC-NEXT: maxps (%rdi), %xmm0 # sched: [9:1.00]
1268; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001269;
1270; ATOM-LABEL: test_maxps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001271; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001272; ATOM-NEXT: maxps %xmm1, %xmm0 # sched: [5:5.00]
1273; ATOM-NEXT: maxps (%rdi), %xmm0 # sched: [5:5.00]
1274; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001275;
1276; SLM-LABEL: test_maxps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001277; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001278; SLM-NEXT: maxps %xmm1, %xmm0 # sched: [3:1.00]
1279; SLM-NEXT: maxps (%rdi), %xmm0 # sched: [6:1.00]
1280; SLM-NEXT: retq # sched: [4:1.00]
1281;
1282; SANDY-LABEL: test_maxps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001283; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001284; SANDY-NEXT: vmaxps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001285; SANDY-NEXT: vmaxps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
1286; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001287;
1288; HASWELL-LABEL: test_maxps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001289; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001290; HASWELL-NEXT: vmaxps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001291; HASWELL-NEXT: vmaxps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
1292; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001293;
Gadi Haber85d99b42017-10-17 13:45:39 +00001294; BROADWELL-LABEL: test_maxps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001295; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00001296; BROADWELL-NEXT: vmaxps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00001297; BROADWELL-NEXT: vmaxps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
1298; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001299;
Gadi Haber767d98b2017-08-30 08:08:50 +00001300; SKYLAKE-LABEL: test_maxps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001301; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001302; SKYLAKE-NEXT: vmaxps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001303; SKYLAKE-NEXT: vmaxps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
1304; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001305;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001306; SKX-LABEL: test_maxps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001307; SKX: # %bb.0:
Gadi Haberc9f23002017-11-13 08:42:07 +00001308; SKX-NEXT: vmaxps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
1309; SKX-NEXT: vmaxps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
Gadi Haber684944b2017-10-08 12:52:54 +00001310; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001311;
Simon Pilgrim93986492017-04-18 19:04:40 +00001312; BTVER2-LABEL: test_maxps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001313; BTVER2: # %bb.0:
Andrew V. Tischenkoe58c0c92018-01-15 14:21:11 +00001314; BTVER2-NEXT: vmaxps %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
1315; BTVER2-NEXT: vmaxps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001316; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001317;
1318; ZNVER1-LABEL: test_maxps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001319; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00001320; ZNVER1-NEXT: vmaxps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1321; ZNVER1-NEXT: vmaxps (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001322; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001323 %1 = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %a0, <4 x float> %a1)
1324 %2 = load <4 x float>, <4 x float> *%a2, align 16
1325 %3 = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %1, <4 x float> %2)
1326 ret <4 x float> %3
1327}
1328declare <4 x float> @llvm.x86.sse.max.ps(<4 x float>, <4 x float>) nounwind readnone
1329
1330define <4 x float> @test_maxss(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
1331; GENERIC-LABEL: test_maxss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001332; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001333; GENERIC-NEXT: maxss %xmm1, %xmm0 # sched: [3:1.00]
1334; GENERIC-NEXT: maxss (%rdi), %xmm0 # sched: [9:1.00]
1335; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001336;
1337; ATOM-LABEL: test_maxss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001338; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001339; ATOM-NEXT: maxss %xmm1, %xmm0 # sched: [5:5.00]
1340; ATOM-NEXT: maxss (%rdi), %xmm0 # sched: [5:5.00]
1341; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001342;
1343; SLM-LABEL: test_maxss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001344; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001345; SLM-NEXT: maxss %xmm1, %xmm0 # sched: [3:1.00]
1346; SLM-NEXT: maxss (%rdi), %xmm0 # sched: [6:1.00]
1347; SLM-NEXT: retq # sched: [4:1.00]
1348;
1349; SANDY-LABEL: test_maxss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001350; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001351; SANDY-NEXT: vmaxss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001352; SANDY-NEXT: vmaxss (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
1353; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001354;
1355; HASWELL-LABEL: test_maxss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001356; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001357; HASWELL-NEXT: vmaxss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001358; HASWELL-NEXT: vmaxss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
1359; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001360;
Gadi Haber85d99b42017-10-17 13:45:39 +00001361; BROADWELL-LABEL: test_maxss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001362; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00001363; BROADWELL-NEXT: vmaxss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00001364; BROADWELL-NEXT: vmaxss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
1365; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001366;
Gadi Haber767d98b2017-08-30 08:08:50 +00001367; SKYLAKE-LABEL: test_maxss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001368; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001369; SKYLAKE-NEXT: vmaxss %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001370; SKYLAKE-NEXT: vmaxss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
1371; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001372;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001373; SKX-LABEL: test_maxss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001374; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001375; SKX-NEXT: vmaxss %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
Gadi Haber684944b2017-10-08 12:52:54 +00001376; SKX-NEXT: vmaxss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
1377; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001378;
Simon Pilgrim93986492017-04-18 19:04:40 +00001379; BTVER2-LABEL: test_maxss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001380; BTVER2: # %bb.0:
Andrew V. Tischenkoe58c0c92018-01-15 14:21:11 +00001381; BTVER2-NEXT: vmaxss %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
1382; BTVER2-NEXT: vmaxss (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001383; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001384;
1385; ZNVER1-LABEL: test_maxss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001386; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00001387; ZNVER1-NEXT: vmaxss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1388; ZNVER1-NEXT: vmaxss (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001389; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001390 %1 = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> %a0, <4 x float> %a1)
1391 %2 = load <4 x float>, <4 x float> *%a2, align 16
1392 %3 = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> %1, <4 x float> %2)
1393 ret <4 x float> %3
1394}
1395declare <4 x float> @llvm.x86.sse.max.ss(<4 x float>, <4 x float>) nounwind readnone
1396
1397define <4 x float> @test_minps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
1398; GENERIC-LABEL: test_minps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001399; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001400; GENERIC-NEXT: minps %xmm1, %xmm0 # sched: [3:1.00]
1401; GENERIC-NEXT: minps (%rdi), %xmm0 # sched: [9:1.00]
1402; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001403;
1404; ATOM-LABEL: test_minps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001405; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001406; ATOM-NEXT: minps %xmm1, %xmm0 # sched: [5:5.00]
1407; ATOM-NEXT: minps (%rdi), %xmm0 # sched: [5:5.00]
1408; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001409;
1410; SLM-LABEL: test_minps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001411; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001412; SLM-NEXT: minps %xmm1, %xmm0 # sched: [3:1.00]
1413; SLM-NEXT: minps (%rdi), %xmm0 # sched: [6:1.00]
1414; SLM-NEXT: retq # sched: [4:1.00]
1415;
1416; SANDY-LABEL: test_minps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001417; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001418; SANDY-NEXT: vminps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001419; SANDY-NEXT: vminps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
1420; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001421;
1422; HASWELL-LABEL: test_minps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001423; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001424; HASWELL-NEXT: vminps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001425; HASWELL-NEXT: vminps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
1426; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001427;
Gadi Haber85d99b42017-10-17 13:45:39 +00001428; BROADWELL-LABEL: test_minps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001429; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00001430; BROADWELL-NEXT: vminps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00001431; BROADWELL-NEXT: vminps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
1432; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001433;
Gadi Haber767d98b2017-08-30 08:08:50 +00001434; SKYLAKE-LABEL: test_minps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001435; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001436; SKYLAKE-NEXT: vminps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001437; SKYLAKE-NEXT: vminps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
1438; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001439;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001440; SKX-LABEL: test_minps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001441; SKX: # %bb.0:
Gadi Haberc9f23002017-11-13 08:42:07 +00001442; SKX-NEXT: vminps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
1443; SKX-NEXT: vminps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
Gadi Haber684944b2017-10-08 12:52:54 +00001444; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001445;
Simon Pilgrim93986492017-04-18 19:04:40 +00001446; BTVER2-LABEL: test_minps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001447; BTVER2: # %bb.0:
Andrew V. Tischenkoe58c0c92018-01-15 14:21:11 +00001448; BTVER2-NEXT: vminps %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
1449; BTVER2-NEXT: vminps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001450; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001451;
1452; ZNVER1-LABEL: test_minps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001453; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00001454; ZNVER1-NEXT: vminps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1455; ZNVER1-NEXT: vminps (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001456; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001457 %1 = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %a0, <4 x float> %a1)
1458 %2 = load <4 x float>, <4 x float> *%a2, align 16
1459 %3 = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %1, <4 x float> %2)
1460 ret <4 x float> %3
1461}
1462declare <4 x float> @llvm.x86.sse.min.ps(<4 x float>, <4 x float>) nounwind readnone
1463
1464define <4 x float> @test_minss(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
1465; GENERIC-LABEL: test_minss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001466; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001467; GENERIC-NEXT: minss %xmm1, %xmm0 # sched: [3:1.00]
1468; GENERIC-NEXT: minss (%rdi), %xmm0 # sched: [9:1.00]
1469; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001470;
1471; ATOM-LABEL: test_minss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001472; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001473; ATOM-NEXT: minss %xmm1, %xmm0 # sched: [5:5.00]
1474; ATOM-NEXT: minss (%rdi), %xmm0 # sched: [5:5.00]
1475; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001476;
1477; SLM-LABEL: test_minss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001478; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001479; SLM-NEXT: minss %xmm1, %xmm0 # sched: [3:1.00]
1480; SLM-NEXT: minss (%rdi), %xmm0 # sched: [6:1.00]
1481; SLM-NEXT: retq # sched: [4:1.00]
1482;
1483; SANDY-LABEL: test_minss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001484; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001485; SANDY-NEXT: vminss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001486; SANDY-NEXT: vminss (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
1487; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001488;
1489; HASWELL-LABEL: test_minss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001490; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001491; HASWELL-NEXT: vminss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001492; HASWELL-NEXT: vminss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
1493; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001494;
Gadi Haber85d99b42017-10-17 13:45:39 +00001495; BROADWELL-LABEL: test_minss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001496; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00001497; BROADWELL-NEXT: vminss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00001498; BROADWELL-NEXT: vminss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
1499; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001500;
Gadi Haber767d98b2017-08-30 08:08:50 +00001501; SKYLAKE-LABEL: test_minss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001502; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001503; SKYLAKE-NEXT: vminss %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001504; SKYLAKE-NEXT: vminss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
1505; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001506;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001507; SKX-LABEL: test_minss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001508; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001509; SKX-NEXT: vminss %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
Gadi Haber684944b2017-10-08 12:52:54 +00001510; SKX-NEXT: vminss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
1511; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001512;
Simon Pilgrim93986492017-04-18 19:04:40 +00001513; BTVER2-LABEL: test_minss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001514; BTVER2: # %bb.0:
Andrew V. Tischenkoe58c0c92018-01-15 14:21:11 +00001515; BTVER2-NEXT: vminss %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
1516; BTVER2-NEXT: vminss (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001517; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001518;
1519; ZNVER1-LABEL: test_minss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001520; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00001521; ZNVER1-NEXT: vminss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1522; ZNVER1-NEXT: vminss (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001523; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001524 %1 = call <4 x float> @llvm.x86.sse.min.ss(<4 x float> %a0, <4 x float> %a1)
1525 %2 = load <4 x float>, <4 x float> *%a2, align 16
1526 %3 = call <4 x float> @llvm.x86.sse.min.ss(<4 x float> %1, <4 x float> %2)
1527 ret <4 x float> %3
1528}
1529declare <4 x float> @llvm.x86.sse.min.ss(<4 x float>, <4 x float>) nounwind readnone
1530
1531define void @test_movaps(<4 x float> *%a0, <4 x float> *%a1) {
1532; GENERIC-LABEL: test_movaps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001533; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001534; GENERIC-NEXT: movaps (%rdi), %xmm0 # sched: [6:0.50]
1535; GENERIC-NEXT: addps %xmm0, %xmm0 # sched: [3:1.00]
1536; GENERIC-NEXT: movaps %xmm0, (%rsi) # sched: [5:1.00]
1537; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001538;
1539; ATOM-LABEL: test_movaps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001540; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001541; ATOM-NEXT: movaps (%rdi), %xmm0 # sched: [1:1.00]
1542; ATOM-NEXT: addps %xmm0, %xmm0 # sched: [5:5.00]
1543; ATOM-NEXT: movaps %xmm0, (%rsi) # sched: [1:1.00]
1544; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001545;
1546; SLM-LABEL: test_movaps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001547; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001548; SLM-NEXT: movaps (%rdi), %xmm0 # sched: [3:1.00]
1549; SLM-NEXT: addps %xmm0, %xmm0 # sched: [3:1.00]
1550; SLM-NEXT: movaps %xmm0, (%rsi) # sched: [1:1.00]
1551; SLM-NEXT: retq # sched: [4:1.00]
1552;
1553; SANDY-LABEL: test_movaps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001554; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001555; SANDY-NEXT: vmovaps (%rdi), %xmm0 # sched: [6:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001556; SANDY-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001557; SANDY-NEXT: vmovaps %xmm0, (%rsi) # sched: [5:1.00]
1558; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001559;
1560; HASWELL-LABEL: test_movaps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001561; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +00001562; HASWELL-NEXT: vmovaps (%rdi), %xmm0 # sched: [6:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001563; HASWELL-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001564; HASWELL-NEXT: vmovaps %xmm0, (%rsi) # sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001565; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001566;
Gadi Haber85d99b42017-10-17 13:45:39 +00001567; BROADWELL-LABEL: test_movaps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001568; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +00001569; BROADWELL-NEXT: vmovaps (%rdi), %xmm0 # sched: [5:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +00001570; BROADWELL-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
1571; BROADWELL-NEXT: vmovaps %xmm0, (%rsi) # sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00001572; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001573;
Gadi Haber767d98b2017-08-30 08:08:50 +00001574; SKYLAKE-LABEL: test_movaps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001575; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001576; SKYLAKE-NEXT: vmovaps (%rdi), %xmm0 # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001577; SKYLAKE-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber767d98b2017-08-30 08:08:50 +00001578; SKYLAKE-NEXT: vmovaps %xmm0, (%rsi) # sched: [1:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001579; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001580;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001581; SKX-LABEL: test_movaps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001582; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00001583; SKX-NEXT: vmovaps (%rdi), %xmm0 # sched: [6:0.50]
1584; SKX-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [4:0.33]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001585; SKX-NEXT: vmovaps %xmm0, (%rsi) # sched: [1:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00001586; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001587;
Simon Pilgrim93986492017-04-18 19:04:40 +00001588; BTVER2-LABEL: test_movaps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001589; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001590; BTVER2-NEXT: vmovaps (%rdi), %xmm0 # sched: [5:1.00]
1591; BTVER2-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
1592; BTVER2-NEXT: vmovaps %xmm0, (%rsi) # sched: [1:1.00]
1593; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001594;
1595; ZNVER1-LABEL: test_movaps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001596; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00001597; ZNVER1-NEXT: vmovaps (%rdi), %xmm0 # sched: [8:0.50]
1598; ZNVER1-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
1599; ZNVER1-NEXT: vmovaps %xmm0, (%rsi) # sched: [1:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001600; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001601 %1 = load <4 x float>, <4 x float> *%a0, align 16
1602 %2 = fadd <4 x float> %1, %1
1603 store <4 x float> %2, <4 x float> *%a1, align 16
1604 ret void
1605}
1606
1607; TODO (v)movhlps
1608
1609define <4 x float> @test_movhlps(<4 x float> %a0, <4 x float> %a1) {
1610; GENERIC-LABEL: test_movhlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001611; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001612; GENERIC-NEXT: movhlps {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00]
1613; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001614;
1615; ATOM-LABEL: test_movhlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001616; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001617; ATOM-NEXT: movhlps {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00]
1618; ATOM-NEXT: nop # sched: [1:0.50]
1619; ATOM-NEXT: nop # sched: [1:0.50]
1620; ATOM-NEXT: nop # sched: [1:0.50]
1621; ATOM-NEXT: nop # sched: [1:0.50]
1622; ATOM-NEXT: nop # sched: [1:0.50]
1623; ATOM-NEXT: nop # sched: [1:0.50]
1624; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001625;
1626; SLM-LABEL: test_movhlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001627; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001628; SLM-NEXT: movhlps {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00]
1629; SLM-NEXT: retq # sched: [4:1.00]
1630;
1631; SANDY-LABEL: test_movhlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001632; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001633; SANDY-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001634; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001635;
1636; HASWELL-LABEL: test_movhlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001637; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001638; HASWELL-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001639; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001640;
Gadi Haber85d99b42017-10-17 13:45:39 +00001641; BROADWELL-LABEL: test_movhlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001642; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00001643; BROADWELL-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00001644; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001645;
Gadi Haber767d98b2017-08-30 08:08:50 +00001646; SKYLAKE-LABEL: test_movhlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001647; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +00001648; SKYLAKE-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001649; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001650;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001651; SKX-LABEL: test_movhlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001652; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001653; SKX-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00001654; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001655;
Simon Pilgrim93986492017-04-18 19:04:40 +00001656; BTVER2-LABEL: test_movhlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001657; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001658; BTVER2-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:0.50]
1659; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001660;
1661; ZNVER1-LABEL: test_movhlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001662; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00001663; ZNVER1-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001664; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001665 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 6, i32 7, i32 2, i32 3>
1666 ret <4 x float> %1
1667}
1668
1669; TODO (v)movhps
1670
1671define void @test_movhps(<4 x float> %a0, <4 x float> %a1, x86_mmx *%a2) {
1672; GENERIC-LABEL: test_movhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001673; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001674; GENERIC-NEXT: movhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [7:1.00]
1675; GENERIC-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
1676; GENERIC-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] sched: [1:1.00]
1677; GENERIC-NEXT: movlps %xmm1, (%rdi) # sched: [5:1.00]
1678; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001679;
1680; ATOM-LABEL: test_movhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001681; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001682; ATOM-NEXT: movhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [1:1.00]
1683; ATOM-NEXT: addps %xmm0, %xmm1 # sched: [5:5.00]
1684; ATOM-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] sched: [1:1.00]
1685; ATOM-NEXT: movlps %xmm1, (%rdi) # sched: [1:1.00]
1686; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001687;
1688; SLM-LABEL: test_movhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001689; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001690; SLM-NEXT: movhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [4:1.00]
1691; SLM-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
1692; SLM-NEXT: pextrq $1, %xmm1, (%rdi) # sched: [4:2.00]
1693; SLM-NEXT: retq # sched: [4:1.00]
1694;
1695; SANDY-LABEL: test_movhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001696; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001697; SANDY-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001698; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1699; SANDY-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [5:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001700; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001701;
1702; HASWELL-LABEL: test_movhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001703; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +00001704; HASWELL-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001705; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001706; HASWELL-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [2:1.00]
1707; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001708;
Gadi Haber85d99b42017-10-17 13:45:39 +00001709; BROADWELL-LABEL: test_movhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001710; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +00001711; BROADWELL-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001712; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00001713; BROADWELL-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [2:1.00]
1714; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001715;
Gadi Haber767d98b2017-08-30 08:08:50 +00001716; SKYLAKE-LABEL: test_movhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001717; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001718; SKYLAKE-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001719; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001720; SKYLAKE-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [2:1.00]
1721; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001722;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001723; SKX-LABEL: test_movhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001724; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00001725; SKX-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00]
1726; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
1727; SKX-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [2:1.00]
1728; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001729;
Simon Pilgrim93986492017-04-18 19:04:40 +00001730; BTVER2-LABEL: test_movhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001731; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001732; BTVER2-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00]
1733; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1734; BTVER2-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [6:1.00]
1735; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001736;
1737; ZNVER1-LABEL: test_movhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001738; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00001739; ZNVER1-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [8:0.50]
1740; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1741; ZNVER1-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [8:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001742; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001743 %1 = bitcast x86_mmx* %a2 to <2 x float>*
1744 %2 = load <2 x float>, <2 x float> *%1, align 8
1745 %3 = shufflevector <2 x float> %2, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1746 %4 = shufflevector <4 x float> %a1, <4 x float> %3, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1747 %5 = fadd <4 x float> %a0, %4
1748 %6 = shufflevector <4 x float> %5, <4 x float> undef, <2 x i32> <i32 2, i32 3>
1749 store <2 x float> %6, <2 x float>* %1
1750 ret void
1751}
1752
1753; TODO (v)movlhps
1754
1755define <4 x float> @test_movlhps(<4 x float> %a0, <4 x float> %a1) {
1756; GENERIC-LABEL: test_movlhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001757; GENERIC: # %bb.0:
Craig Toppera6054322017-09-18 04:40:58 +00001758; GENERIC-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +00001759; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
1760; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001761;
1762; ATOM-LABEL: test_movlhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001763; ATOM: # %bb.0:
Craig Toppera6054322017-09-18 04:40:58 +00001764; ATOM-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001765; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
1766; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001767;
1768; SLM-LABEL: test_movlhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001769; SLM: # %bb.0:
Craig Toppera6054322017-09-18 04:40:58 +00001770; SLM-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001771; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
1772; SLM-NEXT: retq # sched: [4:1.00]
1773;
1774; SANDY-LABEL: test_movlhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001775; SANDY: # %bb.0:
Craig Toppera6054322017-09-18 04:40:58 +00001776; SANDY-NEXT: vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001777; SANDY-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001778; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001779;
1780; HASWELL-LABEL: test_movlhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001781; HASWELL: # %bb.0:
Craig Toppera6054322017-09-18 04:40:58 +00001782; HASWELL-NEXT: vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001783; HASWELL-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001784; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001785;
Gadi Haber85d99b42017-10-17 13:45:39 +00001786; BROADWELL-LABEL: test_movlhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001787; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00001788; BROADWELL-NEXT: vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
1789; BROADWELL-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00001790; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001791;
Gadi Haber767d98b2017-08-30 08:08:50 +00001792; SKYLAKE-LABEL: test_movlhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001793; SKYLAKE: # %bb.0:
Craig Toppera6054322017-09-18 04:40:58 +00001794; SKYLAKE-NEXT: vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001795; SKYLAKE-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001796; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001797;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001798; SKX-LABEL: test_movlhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001799; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001800; SKX-NEXT: vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00001801; SKX-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [4:0.33]
1802; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001803;
Simon Pilgrim93986492017-04-18 19:04:40 +00001804; BTVER2-LABEL: test_movlhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001805; BTVER2: # %bb.0:
Craig Toppera6054322017-09-18 04:40:58 +00001806; BTVER2-NEXT: vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001807; BTVER2-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
1808; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001809;
1810; ZNVER1-LABEL: test_movlhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001811; ZNVER1: # %bb.0:
Craig Toppera6054322017-09-18 04:40:58 +00001812; ZNVER1-NEXT: vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:0.50]
Craig Topper106b5b62017-07-19 02:45:14 +00001813; ZNVER1-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001814; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001815 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1816 %2 = fadd <4 x float> %a1, %1
1817 ret <4 x float> %2
1818}
1819
1820define void @test_movlps(<4 x float> %a0, <4 x float> %a1, x86_mmx *%a2) {
1821; GENERIC-LABEL: test_movlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001822; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001823; GENERIC-NEXT: movlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [7:1.00]
1824; GENERIC-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
1825; GENERIC-NEXT: movlps %xmm1, (%rdi) # sched: [5:1.00]
1826; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001827;
1828; ATOM-LABEL: test_movlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001829; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001830; ATOM-NEXT: movlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [1:1.00]
1831; ATOM-NEXT: addps %xmm0, %xmm1 # sched: [5:5.00]
1832; ATOM-NEXT: movlps %xmm1, (%rdi) # sched: [1:1.00]
1833; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001834;
1835; SLM-LABEL: test_movlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001836; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001837; SLM-NEXT: movlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [4:1.00]
1838; SLM-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
1839; SLM-NEXT: movlps %xmm1, (%rdi) # sched: [1:1.00]
1840; SLM-NEXT: retq # sched: [4:1.00]
1841;
1842; SANDY-LABEL: test_movlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001843; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001844; SANDY-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001845; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001846; SANDY-NEXT: vmovlps %xmm0, (%rdi) # sched: [5:1.00]
1847; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001848;
1849; HASWELL-LABEL: test_movlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001850; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +00001851; HASWELL-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [6:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001852; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001853; HASWELL-NEXT: vmovlps %xmm0, (%rdi) # sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001854; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001855;
Gadi Haber85d99b42017-10-17 13:45:39 +00001856; BROADWELL-LABEL: test_movlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001857; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +00001858; BROADWELL-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [6:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001859; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1860; BROADWELL-NEXT: vmovlps %xmm0, (%rdi) # sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00001861; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001862;
Gadi Haber767d98b2017-08-30 08:08:50 +00001863; SKYLAKE-LABEL: test_movlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001864; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001865; SKYLAKE-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [6:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001866; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber767d98b2017-08-30 08:08:50 +00001867; SKYLAKE-NEXT: vmovlps %xmm0, (%rdi) # sched: [1:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001868; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001869;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001870; SKX-LABEL: test_movlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001871; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00001872; SKX-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [6:1.00]
1873; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001874; SKX-NEXT: vmovlps %xmm0, (%rdi) # sched: [1:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00001875; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001876;
Simon Pilgrim93986492017-04-18 19:04:40 +00001877; BTVER2-LABEL: test_movlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001878; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001879; BTVER2-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [6:1.00]
1880; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1881; BTVER2-NEXT: vmovlps %xmm0, (%rdi) # sched: [1:1.00]
1882; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001883;
1884; ZNVER1-LABEL: test_movlps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001885; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00001886; ZNVER1-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [8:0.50]
1887; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1888; ZNVER1-NEXT: vmovlps %xmm0, (%rdi) # sched: [1:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001889; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001890 %1 = bitcast x86_mmx* %a2 to <2 x float>*
1891 %2 = load <2 x float>, <2 x float> *%1, align 8
1892 %3 = shufflevector <2 x float> %2, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1893 %4 = shufflevector <4 x float> %a1, <4 x float> %3, <4 x i32> <i32 4, i32 5, i32 2, i32 3>
1894 %5 = fadd <4 x float> %a0, %4
1895 %6 = shufflevector <4 x float> %5, <4 x float> undef, <2 x i32> <i32 0, i32 1>
1896 store <2 x float> %6, <2 x float>* %1
1897 ret void
1898}
1899
1900define i32 @test_movmskps(<4 x float> %a0) {
1901; GENERIC-LABEL: test_movmskps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001902; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001903; GENERIC-NEXT: movmskps %xmm0, %eax # sched: [2:1.00]
1904; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001905;
1906; ATOM-LABEL: test_movmskps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001907; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001908; ATOM-NEXT: movmskps %xmm0, %eax # sched: [3:3.00]
1909; ATOM-NEXT: nop # sched: [1:0.50]
1910; ATOM-NEXT: nop # sched: [1:0.50]
1911; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001912;
1913; SLM-LABEL: test_movmskps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001914; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001915; SLM-NEXT: movmskps %xmm0, %eax # sched: [1:0.50]
1916; SLM-NEXT: retq # sched: [4:1.00]
1917;
1918; SANDY-LABEL: test_movmskps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001919; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001920; SANDY-NEXT: vmovmskps %xmm0, %eax # sched: [2:1.00]
1921; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001922;
1923; HASWELL-LABEL: test_movmskps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001924; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001925; HASWELL-NEXT: vmovmskps %xmm0, %eax # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001926; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001927;
Gadi Haber85d99b42017-10-17 13:45:39 +00001928; BROADWELL-LABEL: test_movmskps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001929; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00001930; BROADWELL-NEXT: vmovmskps %xmm0, %eax # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00001931; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001932;
Gadi Haber767d98b2017-08-30 08:08:50 +00001933; SKYLAKE-LABEL: test_movmskps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001934; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00001935; SKYLAKE-NEXT: vmovmskps %xmm0, %eax # sched: [2:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001936; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001937;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001938; SKX-LABEL: test_movmskps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001939; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001940; SKX-NEXT: vmovmskps %xmm0, %eax # sched: [2:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00001941; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001942;
Simon Pilgrim93986492017-04-18 19:04:40 +00001943; BTVER2-LABEL: test_movmskps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001944; BTVER2: # %bb.0:
Andrew V. Tischenko3c8bf5e2017-11-02 10:33:41 +00001945; BTVER2-NEXT: vmovmskps %xmm0, %eax # sched: [3:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001946; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001947;
1948; ZNVER1-LABEL: test_movmskps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001949; ZNVER1: # %bb.0:
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00001950; ZNVER1-NEXT: vmovmskps %xmm0, %eax # sched: [1:1.00]
1951; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001952 %1 = call i32 @llvm.x86.sse.movmsk.ps(<4 x float> %a0)
1953 ret i32 %1
1954}
1955declare i32 @llvm.x86.sse.movmsk.ps(<4 x float>) nounwind readnone
1956
1957define void @test_movntps(<4 x float> %a0, <4 x float> *%a1) {
1958; GENERIC-LABEL: test_movntps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001959; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001960; GENERIC-NEXT: movntps %xmm0, (%rdi) # sched: [5:1.00]
1961; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001962;
1963; ATOM-LABEL: test_movntps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001964; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001965; ATOM-NEXT: movntps %xmm0, (%rdi) # sched: [1:1.00]
1966; ATOM-NEXT: nop # sched: [1:0.50]
1967; ATOM-NEXT: nop # sched: [1:0.50]
1968; ATOM-NEXT: nop # sched: [1:0.50]
1969; ATOM-NEXT: nop # sched: [1:0.50]
1970; ATOM-NEXT: nop # sched: [1:0.50]
1971; ATOM-NEXT: nop # sched: [1:0.50]
1972; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001973;
1974; SLM-LABEL: test_movntps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001975; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00001976; SLM-NEXT: movntps %xmm0, (%rdi) # sched: [1:1.00]
1977; SLM-NEXT: retq # sched: [4:1.00]
1978;
1979; SANDY-LABEL: test_movntps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001980; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001981; SANDY-NEXT: vmovntps %xmm0, (%rdi) # sched: [5:1.00]
1982; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001983;
1984; HASWELL-LABEL: test_movntps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001985; HASWELL: # %bb.0:
Michael Zuckermanf6684002017-06-28 11:23:31 +00001986; HASWELL-NEXT: vmovntps %xmm0, (%rdi) # sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00001987; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001988;
Gadi Haber85d99b42017-10-17 13:45:39 +00001989; BROADWELL-LABEL: test_movntps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001990; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00001991; BROADWELL-NEXT: vmovntps %xmm0, (%rdi) # sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00001992; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00001993;
Gadi Haber767d98b2017-08-30 08:08:50 +00001994; SKYLAKE-LABEL: test_movntps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00001995; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +00001996; SKYLAKE-NEXT: vmovntps %xmm0, (%rdi) # sched: [1:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00001997; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00001998;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00001999; SKX-LABEL: test_movntps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002000; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002001; SKX-NEXT: vmovntps %xmm0, (%rdi) # sched: [1:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00002002; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002003;
Simon Pilgrim93986492017-04-18 19:04:40 +00002004; BTVER2-LABEL: test_movntps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002005; BTVER2: # %bb.0:
Andrew V. Tischenkoe58c0c92018-01-15 14:21:11 +00002006; BTVER2-NEXT: vmovntps %xmm0, (%rdi) # sched: [3:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002007; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002008;
2009; ZNVER1-LABEL: test_movntps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002010; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00002011; ZNVER1-NEXT: vmovntps %xmm0, (%rdi) # sched: [1:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002012; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002013 store <4 x float> %a0, <4 x float> *%a1, align 16, !nontemporal !0
2014 ret void
2015}
2016
2017define void @test_movss_mem(float* %a0, float* %a1) {
2018; GENERIC-LABEL: test_movss_mem:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002019; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002020; GENERIC-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [6:0.50]
2021; GENERIC-NEXT: addss %xmm0, %xmm0 # sched: [3:1.00]
2022; GENERIC-NEXT: movss %xmm0, (%rsi) # sched: [5:1.00]
2023; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002024;
2025; ATOM-LABEL: test_movss_mem:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002026; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002027; ATOM-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [1:1.00]
2028; ATOM-NEXT: addss %xmm0, %xmm0 # sched: [5:5.00]
2029; ATOM-NEXT: movss %xmm0, (%rsi) # sched: [1:1.00]
2030; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002031;
2032; SLM-LABEL: test_movss_mem:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002033; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002034; SLM-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [3:1.00]
2035; SLM-NEXT: addss %xmm0, %xmm0 # sched: [3:1.00]
2036; SLM-NEXT: movss %xmm0, (%rsi) # sched: [1:1.00]
2037; SLM-NEXT: retq # sched: [4:1.00]
2038;
2039; SANDY-LABEL: test_movss_mem:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002040; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00002041; SANDY-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [6:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002042; SANDY-NEXT: vaddss %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002043; SANDY-NEXT: vmovss %xmm0, (%rsi) # sched: [5:1.00]
2044; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002045;
2046; HASWELL-LABEL: test_movss_mem:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002047; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +00002048; HASWELL-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002049; HASWELL-NEXT: vaddss %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002050; HASWELL-NEXT: vmovss %xmm0, (%rsi) # sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002051; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002052;
Gadi Haber85d99b42017-10-17 13:45:39 +00002053; BROADWELL-LABEL: test_movss_mem:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002054; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +00002055; BROADWELL-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [5:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +00002056; BROADWELL-NEXT: vaddss %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
2057; BROADWELL-NEXT: vmovss %xmm0, (%rsi) # sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00002058; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002059;
Gadi Haber767d98b2017-08-30 08:08:50 +00002060; SKYLAKE-LABEL: test_movss_mem:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002061; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002062; SKYLAKE-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [5:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002063; SKYLAKE-NEXT: vaddss %xmm0, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber767d98b2017-08-30 08:08:50 +00002064; SKYLAKE-NEXT: vmovss %xmm0, (%rsi) # sched: [1:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002065; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002066;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002067; SKX-LABEL: test_movss_mem:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002068; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00002069; SKX-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [5:0.50]
2070; SKX-NEXT: vaddss %xmm0, %xmm0, %xmm0 # sched: [4:0.33]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002071; SKX-NEXT: vmovss %xmm0, (%rsi) # sched: [1:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00002072; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002073;
Simon Pilgrim93986492017-04-18 19:04:40 +00002074; BTVER2-LABEL: test_movss_mem:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002075; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002076; BTVER2-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [5:1.00]
2077; BTVER2-NEXT: vaddss %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
2078; BTVER2-NEXT: vmovss %xmm0, (%rsi) # sched: [1:1.00]
2079; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002080;
2081; ZNVER1-LABEL: test_movss_mem:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002082; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00002083; ZNVER1-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [8:0.50]
2084; ZNVER1-NEXT: vaddss %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
2085; ZNVER1-NEXT: vmovss %xmm0, (%rsi) # sched: [1:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002086; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002087 %1 = load float, float* %a0, align 1
2088 %2 = fadd float %1, %1
2089 store float %2, float *%a1, align 1
2090 ret void
2091}
2092
2093define <4 x float> @test_movss_reg(<4 x float> %a0, <4 x float> %a1) {
2094; GENERIC-LABEL: test_movss_reg:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002095; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002096; GENERIC-NEXT: movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:1.00]
2097; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002098;
2099; ATOM-LABEL: test_movss_reg:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002100; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002101; ATOM-NEXT: movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.50]
2102; ATOM-NEXT: nop # sched: [1:0.50]
2103; ATOM-NEXT: nop # sched: [1:0.50]
2104; ATOM-NEXT: nop # sched: [1:0.50]
2105; ATOM-NEXT: nop # sched: [1:0.50]
2106; ATOM-NEXT: nop # sched: [1:0.50]
2107; ATOM-NEXT: nop # sched: [1:0.50]
2108; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002109;
2110; SLM-LABEL: test_movss_reg:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002111; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002112; SLM-NEXT: blendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:1.00]
2113; SLM-NEXT: retq # sched: [4:1.00]
2114;
2115; SANDY-LABEL: test_movss_reg:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002116; SANDY: # %bb.0:
Gadi Haberbed2c502017-08-13 13:59:24 +00002117; SANDY-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.50]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002118; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002119;
2120; HASWELL-LABEL: test_movss_reg:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002121; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002122; HASWELL-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.33]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002123; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002124;
Gadi Haber85d99b42017-10-17 13:45:39 +00002125; BROADWELL-LABEL: test_movss_reg:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002126; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00002127; BROADWELL-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.33]
Gadi Haber323f2e12017-10-24 20:19:47 +00002128; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002129;
Gadi Haber767d98b2017-08-30 08:08:50 +00002130; SKYLAKE-LABEL: test_movss_reg:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002131; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002132; SKYLAKE-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.33]
2133; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002134;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002135; SKX-LABEL: test_movss_reg:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002136; SKX: # %bb.0:
Craig Topper391c6f92017-12-10 01:24:08 +00002137; SKX-NEXT: vmovss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.33]
Gadi Haber684944b2017-10-08 12:52:54 +00002138; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002139;
Simon Pilgrim93986492017-04-18 19:04:40 +00002140; BTVER2-LABEL: test_movss_reg:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002141; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002142; BTVER2-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.50]
2143; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002144;
2145; ZNVER1-LABEL: test_movss_reg:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002146; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00002147; ZNVER1-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002148; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002149 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 4, i32 1, i32 2, i32 3>
2150 ret <4 x float> %1
2151}
2152
2153define void @test_movups(<4 x float> *%a0, <4 x float> *%a1) {
2154; GENERIC-LABEL: test_movups:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002155; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002156; GENERIC-NEXT: movups (%rdi), %xmm0 # sched: [6:0.50]
2157; GENERIC-NEXT: addps %xmm0, %xmm0 # sched: [3:1.00]
2158; GENERIC-NEXT: movups %xmm0, (%rsi) # sched: [5:1.00]
2159; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002160;
2161; ATOM-LABEL: test_movups:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002162; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002163; ATOM-NEXT: movups (%rdi), %xmm0 # sched: [3:1.50]
2164; ATOM-NEXT: addps %xmm0, %xmm0 # sched: [5:5.00]
2165; ATOM-NEXT: movups %xmm0, (%rsi) # sched: [2:1.00]
2166; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002167;
2168; SLM-LABEL: test_movups:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002169; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002170; SLM-NEXT: movups (%rdi), %xmm0 # sched: [3:1.00]
2171; SLM-NEXT: addps %xmm0, %xmm0 # sched: [3:1.00]
2172; SLM-NEXT: movups %xmm0, (%rsi) # sched: [1:1.00]
2173; SLM-NEXT: retq # sched: [4:1.00]
2174;
2175; SANDY-LABEL: test_movups:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002176; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00002177; SANDY-NEXT: vmovups (%rdi), %xmm0 # sched: [6:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002178; SANDY-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002179; SANDY-NEXT: vmovups %xmm0, (%rsi) # sched: [5:1.00]
2180; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002181;
2182; HASWELL-LABEL: test_movups:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002183; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +00002184; HASWELL-NEXT: vmovups (%rdi), %xmm0 # sched: [6:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002185; HASWELL-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002186; HASWELL-NEXT: vmovups %xmm0, (%rsi) # sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002187; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002188;
Gadi Haber85d99b42017-10-17 13:45:39 +00002189; BROADWELL-LABEL: test_movups:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002190; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +00002191; BROADWELL-NEXT: vmovups (%rdi), %xmm0 # sched: [5:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +00002192; BROADWELL-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
2193; BROADWELL-NEXT: vmovups %xmm0, (%rsi) # sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00002194; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002195;
Gadi Haber767d98b2017-08-30 08:08:50 +00002196; SKYLAKE-LABEL: test_movups:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002197; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002198; SKYLAKE-NEXT: vmovups (%rdi), %xmm0 # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002199; SKYLAKE-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber767d98b2017-08-30 08:08:50 +00002200; SKYLAKE-NEXT: vmovups %xmm0, (%rsi) # sched: [1:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002201; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002202;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002203; SKX-LABEL: test_movups:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002204; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00002205; SKX-NEXT: vmovups (%rdi), %xmm0 # sched: [6:0.50]
2206; SKX-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [4:0.33]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002207; SKX-NEXT: vmovups %xmm0, (%rsi) # sched: [1:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00002208; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002209;
Simon Pilgrim93986492017-04-18 19:04:40 +00002210; BTVER2-LABEL: test_movups:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002211; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002212; BTVER2-NEXT: vmovups (%rdi), %xmm0 # sched: [5:1.00]
2213; BTVER2-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
2214; BTVER2-NEXT: vmovups %xmm0, (%rsi) # sched: [1:1.00]
2215; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002216;
2217; ZNVER1-LABEL: test_movups:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002218; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00002219; ZNVER1-NEXT: vmovups (%rdi), %xmm0 # sched: [8:0.50]
2220; ZNVER1-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
2221; ZNVER1-NEXT: vmovups %xmm0, (%rsi) # sched: [1:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002222; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002223 %1 = load <4 x float>, <4 x float> *%a0, align 1
2224 %2 = fadd <4 x float> %1, %1
2225 store <4 x float> %2, <4 x float> *%a1, align 1
2226 ret void
2227}
2228
2229define <4 x float> @test_mulps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
2230; GENERIC-LABEL: test_mulps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002231; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002232; GENERIC-NEXT: mulps %xmm1, %xmm0 # sched: [5:1.00]
2233; GENERIC-NEXT: mulps (%rdi), %xmm0 # sched: [11:1.00]
2234; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002235;
2236; ATOM-LABEL: test_mulps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002237; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002238; ATOM-NEXT: mulps %xmm1, %xmm0 # sched: [5:5.00]
2239; ATOM-NEXT: mulps (%rdi), %xmm0 # sched: [10:5.00]
2240; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002241;
2242; SLM-LABEL: test_mulps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002243; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002244; SLM-NEXT: mulps %xmm1, %xmm0 # sched: [5:2.00]
2245; SLM-NEXT: mulps (%rdi), %xmm0 # sched: [8:2.00]
2246; SLM-NEXT: retq # sched: [4:1.00]
2247;
2248; SANDY-LABEL: test_mulps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002249; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002250; SANDY-NEXT: vmulps %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002251; SANDY-NEXT: vmulps (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
2252; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002253;
2254; HASWELL-LABEL: test_mulps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002255; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002256; HASWELL-NEXT: vmulps %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002257; HASWELL-NEXT: vmulps (%rdi), %xmm0, %xmm0 # sched: [11:0.50]
2258; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002259;
Gadi Haber85d99b42017-10-17 13:45:39 +00002260; BROADWELL-LABEL: test_mulps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002261; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +00002262; BROADWELL-NEXT: vmulps %xmm1, %xmm0, %xmm0 # sched: [3:0.50]
2263; BROADWELL-NEXT: vmulps (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
2264; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002265;
Gadi Haber767d98b2017-08-30 08:08:50 +00002266; SKYLAKE-LABEL: test_mulps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002267; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002268; SKYLAKE-NEXT: vmulps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002269; SKYLAKE-NEXT: vmulps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
2270; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002271;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002272; SKX-LABEL: test_mulps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002273; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00002274; SKX-NEXT: vmulps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2275; SKX-NEXT: vmulps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
2276; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002277;
Simon Pilgrim93986492017-04-18 19:04:40 +00002278; BTVER2-LABEL: test_mulps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002279; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002280; BTVER2-NEXT: vmulps %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
2281; BTVER2-NEXT: vmulps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
2282; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002283;
2284; ZNVER1-LABEL: test_mulps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002285; ZNVER1: # %bb.0:
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002286; ZNVER1-NEXT: vmulps %xmm1, %xmm0, %xmm0 # sched: [3:0.50]
2287; ZNVER1-NEXT: vmulps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
2288; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002289 %1 = fmul <4 x float> %a0, %a1
2290 %2 = load <4 x float>, <4 x float> *%a2, align 16
2291 %3 = fmul <4 x float> %1, %2
2292 ret <4 x float> %3
2293}
2294
2295define float @test_mulss(float %a0, float %a1, float *%a2) {
2296; GENERIC-LABEL: test_mulss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002297; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002298; GENERIC-NEXT: mulss %xmm1, %xmm0 # sched: [5:1.00]
2299; GENERIC-NEXT: mulss (%rdi), %xmm0 # sched: [11:1.00]
2300; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002301;
2302; ATOM-LABEL: test_mulss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002303; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002304; ATOM-NEXT: mulss %xmm1, %xmm0 # sched: [4:4.00]
2305; ATOM-NEXT: mulss (%rdi), %xmm0 # sched: [5:5.00]
2306; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002307;
2308; SLM-LABEL: test_mulss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002309; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002310; SLM-NEXT: mulss %xmm1, %xmm0 # sched: [5:2.00]
2311; SLM-NEXT: mulss (%rdi), %xmm0 # sched: [8:2.00]
2312; SLM-NEXT: retq # sched: [4:1.00]
2313;
2314; SANDY-LABEL: test_mulss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002315; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002316; SANDY-NEXT: vmulss %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002317; SANDY-NEXT: vmulss (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
2318; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002319;
2320; HASWELL-LABEL: test_mulss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002321; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002322; HASWELL-NEXT: vmulss %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002323; HASWELL-NEXT: vmulss (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
2324; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002325;
Gadi Haber85d99b42017-10-17 13:45:39 +00002326; BROADWELL-LABEL: test_mulss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002327; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +00002328; BROADWELL-NEXT: vmulss %xmm1, %xmm0, %xmm0 # sched: [3:0.50]
2329; BROADWELL-NEXT: vmulss (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
2330; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002331;
Gadi Haber767d98b2017-08-30 08:08:50 +00002332; SKYLAKE-LABEL: test_mulss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002333; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002334; SKYLAKE-NEXT: vmulss %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002335; SKYLAKE-NEXT: vmulss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
2336; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002337;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002338; SKX-LABEL: test_mulss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002339; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00002340; SKX-NEXT: vmulss %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2341; SKX-NEXT: vmulss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
2342; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002343;
Simon Pilgrim93986492017-04-18 19:04:40 +00002344; BTVER2-LABEL: test_mulss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002345; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002346; BTVER2-NEXT: vmulss %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
2347; BTVER2-NEXT: vmulss (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
2348; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002349;
2350; ZNVER1-LABEL: test_mulss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002351; ZNVER1: # %bb.0:
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002352; ZNVER1-NEXT: vmulss %xmm1, %xmm0, %xmm0 # sched: [3:0.50]
2353; ZNVER1-NEXT: vmulss (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
2354; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002355 %1 = fmul float %a0, %a1
2356 %2 = load float, float *%a2, align 4
2357 %3 = fmul float %1, %2
2358 ret float %3
2359}
2360
2361define <4 x float> @test_orps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
2362; GENERIC-LABEL: test_orps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002363; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002364; GENERIC-NEXT: orps %xmm1, %xmm0 # sched: [1:1.00]
2365; GENERIC-NEXT: orps (%rdi), %xmm0 # sched: [7:1.00]
2366; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002367;
2368; ATOM-LABEL: test_orps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002369; ATOM: # %bb.0:
Simon Pilgrim486072d2017-08-01 17:51:20 +00002370; ATOM-NEXT: orps %xmm1, %xmm0 # sched: [1:0.50]
2371; ATOM-NEXT: orps (%rdi), %xmm0 # sched: [1:1.00]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002372; ATOM-NEXT: nop # sched: [1:0.50]
2373; ATOM-NEXT: nop # sched: [1:0.50]
2374; ATOM-NEXT: nop # sched: [1:0.50]
2375; ATOM-NEXT: nop # sched: [1:0.50]
2376; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002377;
2378; SLM-LABEL: test_orps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002379; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002380; SLM-NEXT: orps %xmm1, %xmm0 # sched: [1:0.50]
2381; SLM-NEXT: orps (%rdi), %xmm0 # sched: [4:1.00]
2382; SLM-NEXT: retq # sched: [4:1.00]
2383;
2384; SANDY-LABEL: test_orps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002385; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00002386; SANDY-NEXT: vorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
2387; SANDY-NEXT: vorps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
2388; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002389;
2390; HASWELL-LABEL: test_orps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002391; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002392; HASWELL-NEXT: vorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002393; HASWELL-NEXT: vorps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
2394; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002395;
Gadi Haber85d99b42017-10-17 13:45:39 +00002396; BROADWELL-LABEL: test_orps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002397; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00002398; BROADWELL-NEXT: vorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00002399; BROADWELL-NEXT: vorps (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
2400; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002401;
Gadi Haber767d98b2017-08-30 08:08:50 +00002402; SKYLAKE-LABEL: test_orps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002403; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002404; SKYLAKE-NEXT: vorps %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
2405; SKYLAKE-NEXT: vorps (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2406; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002407;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002408; SKX-LABEL: test_orps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002409; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00002410; SKX-NEXT: vorps %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
2411; SKX-NEXT: vorps (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
2412; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002413;
Simon Pilgrim93986492017-04-18 19:04:40 +00002414; BTVER2-LABEL: test_orps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002415; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002416; BTVER2-NEXT: vorps %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2417; BTVER2-NEXT: vorps (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
2418; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002419;
2420; ZNVER1-LABEL: test_orps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002421; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00002422; ZNVER1-NEXT: vorps %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
2423; ZNVER1-NEXT: vorps (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002424; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002425 %1 = bitcast <4 x float> %a0 to <4 x i32>
2426 %2 = bitcast <4 x float> %a1 to <4 x i32>
2427 %3 = or <4 x i32> %1, %2
2428 %4 = load <4 x float>, <4 x float> *%a2, align 16
2429 %5 = bitcast <4 x float> %4 to <4 x i32>
2430 %6 = or <4 x i32> %3, %5
2431 %7 = bitcast <4 x i32> %6 to <4 x float>
2432 ret <4 x float> %7
2433}
2434
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002435define void @test_prefetch(i8* %a0) optsize {
2436; GENERIC-LABEL: test_prefetch:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002437; GENERIC: # %bb.0:
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002438; GENERIC-NEXT: #APP
Simon Pilgrim84846982017-08-01 15:14:35 +00002439; GENERIC-NEXT: prefetchnta (%rdi) # sched: [5:0.50]
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002440; GENERIC-NEXT: prefetcht0 (%rdi) # sched: [5:0.50]
2441; GENERIC-NEXT: prefetcht1 (%rdi) # sched: [5:0.50]
2442; GENERIC-NEXT: prefetcht2 (%rdi) # sched: [5:0.50]
2443; GENERIC-NEXT: #NO_APP
Simon Pilgrim84846982017-08-01 15:14:35 +00002444; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002445;
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002446; ATOM-LABEL: test_prefetch:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002447; ATOM: # %bb.0:
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002448; ATOM-NEXT: #APP
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002449; ATOM-NEXT: prefetchnta (%rdi) # sched: [1:1.00]
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002450; ATOM-NEXT: prefetcht0 (%rdi) # sched: [1:1.00]
2451; ATOM-NEXT: prefetcht1 (%rdi) # sched: [1:1.00]
2452; ATOM-NEXT: prefetcht2 (%rdi) # sched: [1:1.00]
2453; ATOM-NEXT: #NO_APP
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002454; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002455;
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002456; SLM-LABEL: test_prefetch:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002457; SLM: # %bb.0:
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002458; SLM-NEXT: #APP
Simon Pilgrim93986492017-04-18 19:04:40 +00002459; SLM-NEXT: prefetchnta (%rdi) # sched: [3:1.00]
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002460; SLM-NEXT: prefetcht0 (%rdi) # sched: [3:1.00]
2461; SLM-NEXT: prefetcht1 (%rdi) # sched: [3:1.00]
2462; SLM-NEXT: prefetcht2 (%rdi) # sched: [3:1.00]
2463; SLM-NEXT: #NO_APP
Simon Pilgrim93986492017-04-18 19:04:40 +00002464; SLM-NEXT: retq # sched: [4:1.00]
2465;
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002466; SANDY-LABEL: test_prefetch:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002467; SANDY: # %bb.0:
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002468; SANDY-NEXT: #APP
Gadi Haberf4d154c2017-07-10 09:53:16 +00002469; SANDY-NEXT: prefetchnta (%rdi) # sched: [5:0.50]
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002470; SANDY-NEXT: prefetcht0 (%rdi) # sched: [5:0.50]
2471; SANDY-NEXT: prefetcht1 (%rdi) # sched: [5:0.50]
2472; SANDY-NEXT: prefetcht2 (%rdi) # sched: [5:0.50]
2473; SANDY-NEXT: #NO_APP
Gadi Haberf4d154c2017-07-10 09:53:16 +00002474; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002475;
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002476; HASWELL-LABEL: test_prefetch:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002477; HASWELL: # %bb.0:
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002478; HASWELL-NEXT: #APP
Gadi Haber2cf601f2017-12-08 09:48:44 +00002479; HASWELL-NEXT: prefetchnta (%rdi) # sched: [5:0.50]
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002480; HASWELL-NEXT: prefetcht0 (%rdi) # sched: [5:0.50]
2481; HASWELL-NEXT: prefetcht1 (%rdi) # sched: [5:0.50]
2482; HASWELL-NEXT: prefetcht2 (%rdi) # sched: [5:0.50]
2483; HASWELL-NEXT: #NO_APP
Gadi Haber2cf601f2017-12-08 09:48:44 +00002484; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002485;
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002486; BROADWELL-LABEL: test_prefetch:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002487; BROADWELL: # %bb.0:
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002488; BROADWELL-NEXT: #APP
Gadi Haber323f2e12017-10-24 20:19:47 +00002489; BROADWELL-NEXT: prefetchnta (%rdi) # sched: [5:0.50]
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002490; BROADWELL-NEXT: prefetcht0 (%rdi) # sched: [5:0.50]
2491; BROADWELL-NEXT: prefetcht1 (%rdi) # sched: [5:0.50]
2492; BROADWELL-NEXT: prefetcht2 (%rdi) # sched: [5:0.50]
2493; BROADWELL-NEXT: #NO_APP
Gadi Haber323f2e12017-10-24 20:19:47 +00002494; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002495;
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002496; SKYLAKE-LABEL: test_prefetch:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002497; SKYLAKE: # %bb.0:
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002498; SKYLAKE-NEXT: #APP
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002499; SKYLAKE-NEXT: prefetchnta (%rdi) # sched: [5:0.50]
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002500; SKYLAKE-NEXT: prefetcht0 (%rdi) # sched: [5:0.50]
2501; SKYLAKE-NEXT: prefetcht1 (%rdi) # sched: [5:0.50]
2502; SKYLAKE-NEXT: prefetcht2 (%rdi) # sched: [5:0.50]
2503; SKYLAKE-NEXT: #NO_APP
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002504; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002505;
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002506; SKX-LABEL: test_prefetch:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002507; SKX: # %bb.0:
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002508; SKX-NEXT: #APP
Gadi Haber684944b2017-10-08 12:52:54 +00002509; SKX-NEXT: prefetchnta (%rdi) # sched: [5:0.50]
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002510; SKX-NEXT: prefetcht0 (%rdi) # sched: [5:0.50]
2511; SKX-NEXT: prefetcht1 (%rdi) # sched: [5:0.50]
2512; SKX-NEXT: prefetcht2 (%rdi) # sched: [5:0.50]
2513; SKX-NEXT: #NO_APP
Gadi Haber684944b2017-10-08 12:52:54 +00002514; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002515;
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002516; BTVER2-LABEL: test_prefetch:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002517; BTVER2: # %bb.0:
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002518; BTVER2-NEXT: #APP
Simon Pilgrim93986492017-04-18 19:04:40 +00002519; BTVER2-NEXT: prefetchnta (%rdi) # sched: [5:1.00]
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002520; BTVER2-NEXT: prefetcht0 (%rdi) # sched: [5:1.00]
2521; BTVER2-NEXT: prefetcht1 (%rdi) # sched: [5:1.00]
2522; BTVER2-NEXT: prefetcht2 (%rdi) # sched: [5:1.00]
2523; BTVER2-NEXT: #NO_APP
Simon Pilgrim93986492017-04-18 19:04:40 +00002524; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002525;
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002526; ZNVER1-LABEL: test_prefetch:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002527; ZNVER1: # %bb.0:
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002528; ZNVER1-NEXT: #APP
Craig Topper106b5b62017-07-19 02:45:14 +00002529; ZNVER1-NEXT: prefetchnta (%rdi) # sched: [8:0.50]
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002530; ZNVER1-NEXT: prefetcht0 (%rdi) # sched: [8:0.50]
2531; ZNVER1-NEXT: prefetcht1 (%rdi) # sched: [8:0.50]
2532; ZNVER1-NEXT: prefetcht2 (%rdi) # sched: [8:0.50]
2533; ZNVER1-NEXT: #NO_APP
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002534; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim0bd31a82017-12-13 15:12:02 +00002535 call void asm sideeffect "prefetchnta $0 \0A\09 prefetcht0 $0 \0A\09 prefetcht1 $0 \0A\09 prefetcht2 $0", "*m"(i8 *%a0)
Simon Pilgrim93986492017-04-18 19:04:40 +00002536 ret void
2537}
Simon Pilgrim93986492017-04-18 19:04:40 +00002538
2539define <4 x float> @test_rcpps(<4 x float> %a0, <4 x float> *%a1) {
2540; GENERIC-LABEL: test_rcpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002541; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002542; GENERIC-NEXT: rcpps %xmm0, %xmm1 # sched: [5:1.00]
2543; GENERIC-NEXT: rcpps (%rdi), %xmm0 # sched: [11:1.00]
2544; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
2545; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002546;
2547; ATOM-LABEL: test_rcpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002548; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002549; ATOM-NEXT: rcpps (%rdi), %xmm1 # sched: [10:5.00]
2550; ATOM-NEXT: rcpps %xmm0, %xmm0 # sched: [9:4.50]
2551; ATOM-NEXT: addps %xmm0, %xmm1 # sched: [5:5.00]
2552; ATOM-NEXT: movaps %xmm1, %xmm0 # sched: [1:0.50]
2553; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002554;
2555; SLM-LABEL: test_rcpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002556; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002557; SLM-NEXT: rcpps (%rdi), %xmm1 # sched: [8:1.00]
2558; SLM-NEXT: rcpps %xmm0, %xmm0 # sched: [5:1.00]
2559; SLM-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
2560; SLM-NEXT: movaps %xmm1, %xmm0 # sched: [1:1.00]
2561; SLM-NEXT: retq # sched: [4:1.00]
2562;
2563; SANDY-LABEL: test_rcpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002564; SANDY: # %bb.0:
Gadi Haberbed2c502017-08-13 13:59:24 +00002565; SANDY-NEXT: vrcpps %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002566; SANDY-NEXT: vrcpps (%rdi), %xmm1 # sched: [11:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002567; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002568; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002569;
2570; HASWELL-LABEL: test_rcpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002571; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002572; HASWELL-NEXT: vrcpps %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002573; HASWELL-NEXT: vrcpps (%rdi), %xmm1 # sched: [11:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002574; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002575; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002576;
Gadi Haber85d99b42017-10-17 13:45:39 +00002577; BROADWELL-LABEL: test_rcpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002578; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00002579; BROADWELL-NEXT: vrcpps %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00002580; BROADWELL-NEXT: vrcpps (%rdi), %xmm1 # sched: [10:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002581; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00002582; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002583;
Gadi Haber767d98b2017-08-30 08:08:50 +00002584; SKYLAKE-LABEL: test_rcpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002585; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002586; SKYLAKE-NEXT: vrcpps %xmm0, %xmm0 # sched: [4:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002587; SKYLAKE-NEXT: vrcpps (%rdi), %xmm1 # sched: [10:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002588; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002589; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002590;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002591; SKX-LABEL: test_rcpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002592; SKX: # %bb.0:
Craig Topper692c8ef2017-11-04 18:26:41 +00002593; SKX-NEXT: vrcpps %xmm0, %xmm0 # sched: [4:1.00]
2594; SKX-NEXT: vrcpps (%rdi), %xmm1 # sched: [10:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00002595; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2596; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002597;
Simon Pilgrim93986492017-04-18 19:04:40 +00002598; BTVER2-LABEL: test_rcpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002599; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002600; BTVER2-NEXT: vrcpps (%rdi), %xmm1 # sched: [7:1.00]
2601; BTVER2-NEXT: vrcpps %xmm0, %xmm0 # sched: [2:1.00]
2602; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2603; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002604;
2605; ZNVER1-LABEL: test_rcpps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002606; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00002607; ZNVER1-NEXT: vrcpps (%rdi), %xmm1 # sched: [12:0.50]
2608; ZNVER1-NEXT: vrcpps %xmm0, %xmm0 # sched: [5:0.50]
2609; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002610; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002611 %1 = call <4 x float> @llvm.x86.sse.rcp.ps(<4 x float> %a0)
2612 %2 = load <4 x float>, <4 x float> *%a1, align 16
2613 %3 = call <4 x float> @llvm.x86.sse.rcp.ps(<4 x float> %2)
2614 %4 = fadd <4 x float> %1, %3
2615 ret <4 x float> %4
2616}
2617declare <4 x float> @llvm.x86.sse.rcp.ps(<4 x float>) nounwind readnone
2618
2619; TODO - rcpss_m
2620
2621define <4 x float> @test_rcpss(float %a0, float *%a1) {
2622; GENERIC-LABEL: test_rcpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002623; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002624; GENERIC-NEXT: rcpss %xmm0, %xmm0 # sched: [5:1.00]
2625; GENERIC-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [6:0.50]
2626; GENERIC-NEXT: rcpss %xmm1, %xmm1 # sched: [5:1.00]
2627; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
2628; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002629;
2630; ATOM-LABEL: test_rcpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002631; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002632; ATOM-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002633; ATOM-NEXT: rcpss %xmm0, %xmm0
2634; ATOM-NEXT: rcpss %xmm1, %xmm1
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002635; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
2636; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002637;
2638; SLM-LABEL: test_rcpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002639; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002640; SLM-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [3:1.00]
2641; SLM-NEXT: rcpss %xmm0, %xmm0 # sched: [8:1.00]
2642; SLM-NEXT: rcpss %xmm1, %xmm1 # sched: [8:1.00]
2643; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
2644; SLM-NEXT: retq # sched: [4:1.00]
2645;
2646; SANDY-LABEL: test_rcpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002647; SANDY: # %bb.0:
Gadi Haberbed2c502017-08-13 13:59:24 +00002648; SANDY-NEXT: vrcpss %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002649; SANDY-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [6:0.50]
Gadi Haberbed2c502017-08-13 13:59:24 +00002650; SANDY-NEXT: vrcpss %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002651; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002652; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002653;
2654; HASWELL-LABEL: test_rcpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002655; HASWELL: # %bb.0:
Gadi Haberd76f7b82017-08-28 10:04:16 +00002656; HASWELL-NEXT: vrcpss %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002657; HASWELL-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +00002658; HASWELL-NEXT: vrcpss %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002659; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002660; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002661;
Gadi Haber85d99b42017-10-17 13:45:39 +00002662; BROADWELL-LABEL: test_rcpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002663; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00002664; BROADWELL-NEXT: vrcpss %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00002665; BROADWELL-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +00002666; BROADWELL-NEXT: vrcpss %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
2667; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00002668; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002669;
Gadi Haber767d98b2017-08-30 08:08:50 +00002670; SKYLAKE-LABEL: test_rcpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002671; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002672; SKYLAKE-NEXT: vrcpss %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002673; SKYLAKE-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002674; SKYLAKE-NEXT: vrcpss %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
2675; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002676; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002677;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002678; SKX-LABEL: test_rcpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002679; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002680; SKX-NEXT: vrcpss %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00002681; SKX-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002682; SKX-NEXT: vrcpss %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00002683; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2684; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002685;
Simon Pilgrim93986492017-04-18 19:04:40 +00002686; BTVER2-LABEL: test_rcpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002687; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002688; BTVER2-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:1.00]
2689; BTVER2-NEXT: vrcpss %xmm0, %xmm0, %xmm0 # sched: [7:1.00]
2690; BTVER2-NEXT: vrcpss %xmm1, %xmm1, %xmm1 # sched: [7:1.00]
2691; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2692; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002693;
2694; ZNVER1-LABEL: test_rcpss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002695; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00002696; ZNVER1-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [8:0.50]
2697; ZNVER1-NEXT: vrcpss %xmm0, %xmm0, %xmm0 # sched: [12:0.50]
2698; ZNVER1-NEXT: vrcpss %xmm1, %xmm1, %xmm1 # sched: [12:0.50]
2699; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002700; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002701 %1 = insertelement <4 x float> undef, float %a0, i32 0
2702 %2 = call <4 x float> @llvm.x86.sse.rcp.ss(<4 x float> %1)
2703 %3 = load float, float *%a1, align 4
2704 %4 = insertelement <4 x float> undef, float %3, i32 0
2705 %5 = call <4 x float> @llvm.x86.sse.rcp.ss(<4 x float> %4)
2706 %6 = fadd <4 x float> %2, %5
2707 ret <4 x float> %6
2708}
2709declare <4 x float> @llvm.x86.sse.rcp.ss(<4 x float>) nounwind readnone
2710
2711define <4 x float> @test_rsqrtps(<4 x float> %a0, <4 x float> *%a1) {
2712; GENERIC-LABEL: test_rsqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002713; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002714; GENERIC-NEXT: rsqrtps %xmm0, %xmm1 # sched: [5:1.00]
2715; GENERIC-NEXT: rsqrtps (%rdi), %xmm0 # sched: [11:1.00]
2716; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
2717; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002718;
2719; ATOM-LABEL: test_rsqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002720; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002721; ATOM-NEXT: rsqrtps (%rdi), %xmm1 # sched: [10:5.00]
2722; ATOM-NEXT: rsqrtps %xmm0, %xmm0 # sched: [9:4.50]
2723; ATOM-NEXT: addps %xmm0, %xmm1 # sched: [5:5.00]
2724; ATOM-NEXT: movaps %xmm1, %xmm0 # sched: [1:0.50]
2725; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002726;
2727; SLM-LABEL: test_rsqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002728; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002729; SLM-NEXT: rsqrtps (%rdi), %xmm1 # sched: [8:1.00]
2730; SLM-NEXT: rsqrtps %xmm0, %xmm0 # sched: [5:1.00]
2731; SLM-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
2732; SLM-NEXT: movaps %xmm1, %xmm0 # sched: [1:1.00]
2733; SLM-NEXT: retq # sched: [4:1.00]
2734;
2735; SANDY-LABEL: test_rsqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002736; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002737; SANDY-NEXT: vrsqrtps %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002738; SANDY-NEXT: vrsqrtps (%rdi), %xmm1 # sched: [11:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002739; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002740; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002741;
2742; HASWELL-LABEL: test_rsqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002743; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002744; HASWELL-NEXT: vrsqrtps %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002745; HASWELL-NEXT: vrsqrtps (%rdi), %xmm1 # sched: [11:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002746; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002747; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002748;
Gadi Haber85d99b42017-10-17 13:45:39 +00002749; BROADWELL-LABEL: test_rsqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002750; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00002751; BROADWELL-NEXT: vrsqrtps %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00002752; BROADWELL-NEXT: vrsqrtps (%rdi), %xmm1 # sched: [10:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002753; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00002754; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002755;
Gadi Haber767d98b2017-08-30 08:08:50 +00002756; SKYLAKE-LABEL: test_rsqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002757; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002758; SKYLAKE-NEXT: vrsqrtps %xmm0, %xmm0 # sched: [4:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002759; SKYLAKE-NEXT: vrsqrtps (%rdi), %xmm1 # sched: [10:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002760; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002761; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002762;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002763; SKX-LABEL: test_rsqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002764; SKX: # %bb.0:
Craig Topper692c8ef2017-11-04 18:26:41 +00002765; SKX-NEXT: vrsqrtps %xmm0, %xmm0 # sched: [4:1.00]
2766; SKX-NEXT: vrsqrtps (%rdi), %xmm1 # sched: [10:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00002767; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2768; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002769;
Simon Pilgrim93986492017-04-18 19:04:40 +00002770; BTVER2-LABEL: test_rsqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002771; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002772; BTVER2-NEXT: vrsqrtps (%rdi), %xmm1 # sched: [7:1.00]
2773; BTVER2-NEXT: vrsqrtps %xmm0, %xmm0 # sched: [2:1.00]
2774; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2775; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002776;
2777; ZNVER1-LABEL: test_rsqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002778; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00002779; ZNVER1-NEXT: vrsqrtps (%rdi), %xmm1 # sched: [12:0.50]
2780; ZNVER1-NEXT: vrsqrtps %xmm0, %xmm0 # sched: [5:0.50]
2781; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002782; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002783 %1 = call <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> %a0)
2784 %2 = load <4 x float>, <4 x float> *%a1, align 16
2785 %3 = call <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> %2)
2786 %4 = fadd <4 x float> %1, %3
2787 ret <4 x float> %4
2788}
2789declare <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float>) nounwind readnone
2790
2791; TODO - rsqrtss_m
2792
2793define <4 x float> @test_rsqrtss(float %a0, float *%a1) {
2794; GENERIC-LABEL: test_rsqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002795; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002796; GENERIC-NEXT: rsqrtss %xmm0, %xmm0 # sched: [5:1.00]
2797; GENERIC-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [6:0.50]
2798; GENERIC-NEXT: rsqrtss %xmm1, %xmm1 # sched: [5:1.00]
2799; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
2800; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002801;
2802; ATOM-LABEL: test_rsqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002803; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002804; ATOM-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002805; ATOM-NEXT: rsqrtss %xmm0, %xmm0
2806; ATOM-NEXT: rsqrtss %xmm1, %xmm1
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002807; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
2808; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002809;
2810; SLM-LABEL: test_rsqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002811; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002812; SLM-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [3:1.00]
2813; SLM-NEXT: rsqrtss %xmm0, %xmm0 # sched: [8:1.00]
2814; SLM-NEXT: rsqrtss %xmm1, %xmm1 # sched: [8:1.00]
2815; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
2816; SLM-NEXT: retq # sched: [4:1.00]
2817;
2818; SANDY-LABEL: test_rsqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002819; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00002820; SANDY-NEXT: vrsqrtss %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
2821; SANDY-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [6:0.50]
2822; SANDY-NEXT: vrsqrtss %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002823; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002824; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002825;
2826; HASWELL-LABEL: test_rsqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002827; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002828; HASWELL-NEXT: vrsqrtss %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002829; HASWELL-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002830; HASWELL-NEXT: vrsqrtss %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
2831; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002832; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002833;
Gadi Haber85d99b42017-10-17 13:45:39 +00002834; BROADWELL-LABEL: test_rsqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002835; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00002836; BROADWELL-NEXT: vrsqrtss %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00002837; BROADWELL-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +00002838; BROADWELL-NEXT: vrsqrtss %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
2839; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00002840; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002841;
Gadi Haber767d98b2017-08-30 08:08:50 +00002842; SKYLAKE-LABEL: test_rsqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002843; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002844; SKYLAKE-NEXT: vrsqrtss %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002845; SKYLAKE-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00002846; SKYLAKE-NEXT: vrsqrtss %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
2847; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002848; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002849;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002850; SKX-LABEL: test_rsqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002851; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002852; SKX-NEXT: vrsqrtss %xmm0, %xmm0, %xmm0 # sched: [4:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00002853; SKX-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:0.50]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002854; SKX-NEXT: vrsqrtss %xmm1, %xmm1, %xmm1 # sched: [4:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00002855; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
2856; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002857;
Simon Pilgrim93986492017-04-18 19:04:40 +00002858; BTVER2-LABEL: test_rsqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002859; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002860; BTVER2-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:1.00]
2861; BTVER2-NEXT: vrsqrtss %xmm0, %xmm0, %xmm0 # sched: [7:1.00]
2862; BTVER2-NEXT: vrsqrtss %xmm1, %xmm1, %xmm1 # sched: [7:1.00]
2863; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2864; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002865;
2866; ZNVER1-LABEL: test_rsqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002867; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00002868; ZNVER1-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002869; ZNVER1-NEXT: vrsqrtss %xmm0, %xmm0, %xmm0 # sched: [5:0.50]
2870; ZNVER1-NEXT: vrsqrtss %xmm1, %xmm1, %xmm1 # sched: [5:0.50]
Craig Topper106b5b62017-07-19 02:45:14 +00002871; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002872; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002873 %1 = insertelement <4 x float> undef, float %a0, i32 0
2874 %2 = call <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float> %1)
2875 %3 = load float, float *%a1, align 4
2876 %4 = insertelement <4 x float> undef, float %3, i32 0
2877 %5 = call <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float> %4)
2878 %6 = fadd <4 x float> %2, %5
2879 ret <4 x float> %6
2880}
2881declare <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float>) nounwind readnone
2882
2883define void @test_sfence() {
2884; GENERIC-LABEL: test_sfence:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002885; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002886; GENERIC-NEXT: sfence # sched: [1:1.00]
2887; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002888;
2889; ATOM-LABEL: test_sfence:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002890; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002891; ATOM-NEXT: sfence # sched: [1:1.00]
2892; ATOM-NEXT: nop # sched: [1:0.50]
2893; ATOM-NEXT: nop # sched: [1:0.50]
2894; ATOM-NEXT: nop # sched: [1:0.50]
2895; ATOM-NEXT: nop # sched: [1:0.50]
2896; ATOM-NEXT: nop # sched: [1:0.50]
2897; ATOM-NEXT: nop # sched: [1:0.50]
2898; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002899;
2900; SLM-LABEL: test_sfence:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002901; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002902; SLM-NEXT: sfence # sched: [1:1.00]
2903; SLM-NEXT: retq # sched: [4:1.00]
2904;
2905; SANDY-LABEL: test_sfence:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002906; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002907; SANDY-NEXT: sfence # sched: [1:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002908; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002909;
2910; HASWELL-LABEL: test_sfence:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002911; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +00002912; HASWELL-NEXT: sfence # sched: [2:0.33]
2913; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002914;
Gadi Haber85d99b42017-10-17 13:45:39 +00002915; BROADWELL-LABEL: test_sfence:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002916; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +00002917; BROADWELL-NEXT: sfence # sched: [2:0.33]
2918; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002919;
Gadi Haber767d98b2017-08-30 08:08:50 +00002920; SKYLAKE-LABEL: test_sfence:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002921; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002922; SKYLAKE-NEXT: sfence # sched: [2:0.33]
2923; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002924;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002925; SKX-LABEL: test_sfence:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002926; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00002927; SKX-NEXT: sfence # sched: [2:0.33]
2928; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002929;
Simon Pilgrim93986492017-04-18 19:04:40 +00002930; BTVER2-LABEL: test_sfence:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002931; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002932; BTVER2-NEXT: sfence # sched: [1:1.00]
2933; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002934;
2935; ZNVER1-LABEL: test_sfence:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002936; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00002937; ZNVER1-NEXT: sfence # sched: [1:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00002938; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002939 call void @llvm.x86.sse.sfence()
2940 ret void
2941}
2942declare void @llvm.x86.sse.sfence() nounwind readnone
2943
2944define <4 x float> @test_shufps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) nounwind {
2945; GENERIC-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002946; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002947; GENERIC-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00002948; GENERIC-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,3],mem[0,0] sched: [7:1.00]
2949; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +00002950; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002951;
2952; ATOM-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002953; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002954; ATOM-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00002955; ATOM-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,3],mem[0,0] sched: [1:1.00]
2956; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002957; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002958;
2959; SLM-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002960; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002961; SLM-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00002962; SLM-NEXT: shufps {{.*#+}} xmm1 = xmm1[0,3],mem[0,0] sched: [4:1.00]
2963; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002964; SLM-NEXT: retq # sched: [4:1.00]
2965;
2966; SANDY-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002967; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002968; SANDY-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00002969; SANDY-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,3],mem[0,0] sched: [7:1.00]
2970; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002971; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002972;
2973; HASWELL-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002974; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002975; HASWELL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00002976; HASWELL-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,3],mem[0,0] sched: [7:1.00]
2977; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002978; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002979;
Gadi Haber85d99b42017-10-17 13:45:39 +00002980; BROADWELL-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002981; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00002982; BROADWELL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00002983; BROADWELL-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,3],mem[0,0] sched: [6:1.00]
2984; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00002985; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002986;
Gadi Haber767d98b2017-08-30 08:08:50 +00002987; SKYLAKE-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002988; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +00002989; SKYLAKE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00002990; SKYLAKE-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,3],mem[0,0] sched: [7:1.00]
2991; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002992; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002993;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002994; SKX-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002995; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002996; SKX-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00002997; SKX-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,3],mem[0,0] sched: [7:1.00]
2998; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
Gadi Haber684944b2017-10-08 12:52:54 +00002999; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003000;
Simon Pilgrim93986492017-04-18 19:04:40 +00003001; BTVER2-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003002; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003003; BTVER2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:0.50]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003004; BTVER2-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,3],mem[0,0] sched: [6:1.00]
3005; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003006; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003007;
3008; ZNVER1-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003009; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003010; ZNVER1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:0.50]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003011; ZNVER1-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,3],mem[0,0] sched: [8:0.50]
3012; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003013; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003014 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 0, i32 4, i32 4>
3015 %2 = load <4 x float>, <4 x float> *%a2, align 16
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003016 %3 = shufflevector <4 x float> %a1, <4 x float> %2, <4 x i32> <i32 0, i32 3, i32 4, i32 4>
3017 %4 = fadd <4 x float> %1, %3
3018 ret <4 x float> %4
Simon Pilgrim93986492017-04-18 19:04:40 +00003019}
3020
3021define <4 x float> @test_sqrtps(<4 x float> %a0, <4 x float> *%a1) {
3022; GENERIC-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003023; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003024; GENERIC-NEXT: sqrtps %xmm0, %xmm1 # sched: [14:1.00]
3025; GENERIC-NEXT: sqrtps (%rdi), %xmm0 # sched: [20:1.00]
3026; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
3027; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003028;
3029; ATOM-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003030; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003031; ATOM-NEXT: sqrtps %xmm0, %xmm1 # sched: [70:35.00]
3032; ATOM-NEXT: sqrtps (%rdi), %xmm0 # sched: [70:35.00]
3033; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
3034; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003035;
3036; SLM-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003037; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003038; SLM-NEXT: sqrtps (%rdi), %xmm1 # sched: [18:1.00]
3039; SLM-NEXT: sqrtps %xmm0, %xmm0 # sched: [15:1.00]
3040; SLM-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
3041; SLM-NEXT: movaps %xmm1, %xmm0 # sched: [1:1.00]
3042; SLM-NEXT: retq # sched: [4:1.00]
3043;
3044; SANDY-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003045; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00003046; SANDY-NEXT: vsqrtps %xmm0, %xmm0 # sched: [14:1.00]
3047; SANDY-NEXT: vsqrtps (%rdi), %xmm1 # sched: [20:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003048; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003049; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003050;
3051; HASWELL-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003052; HASWELL: # %bb.0:
Gadi Haberd76f7b82017-08-28 10:04:16 +00003053; HASWELL-NEXT: vsqrtps %xmm0, %xmm0 # sched: [14:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003054; HASWELL-NEXT: vsqrtps (%rdi), %xmm1 # sched: [20:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003055; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003056; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003057;
Gadi Haber85d99b42017-10-17 13:45:39 +00003058; BROADWELL-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003059; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003060; BROADWELL-NEXT: vsqrtps %xmm0, %xmm0 # sched: [14:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003061; BROADWELL-NEXT: vsqrtps (%rdi), %xmm1 # sched: [19:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003062; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003063; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003064;
Gadi Haber767d98b2017-08-30 08:08:50 +00003065; SKYLAKE-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003066; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003067; SKYLAKE-NEXT: vsqrtps %xmm0, %xmm0 # sched: [12:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003068; SKYLAKE-NEXT: vsqrtps (%rdi), %xmm1 # sched: [18:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003069; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003070; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003071;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003072; SKX-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003073; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003074; SKX-NEXT: vsqrtps %xmm0, %xmm0 # sched: [12:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00003075; SKX-NEXT: vsqrtps (%rdi), %xmm1 # sched: [18:1.00]
3076; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
3077; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003078;
Simon Pilgrim93986492017-04-18 19:04:40 +00003079; BTVER2-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003080; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003081; BTVER2-NEXT: vsqrtps (%rdi), %xmm1 # sched: [26:21.00]
3082; BTVER2-NEXT: vsqrtps %xmm0, %xmm0 # sched: [21:21.00]
3083; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3084; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003085;
3086; ZNVER1-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003087; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003088; ZNVER1-NEXT: vsqrtps (%rdi), %xmm1 # sched: [27:1.00]
3089; ZNVER1-NEXT: vsqrtps %xmm0, %xmm0 # sched: [20:1.00]
3090; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003091; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003092 %1 = call <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float> %a0)
3093 %2 = load <4 x float>, <4 x float> *%a1, align 16
3094 %3 = call <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float> %2)
3095 %4 = fadd <4 x float> %1, %3
3096 ret <4 x float> %4
3097}
3098declare <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float>) nounwind readnone
3099
3100; TODO - sqrtss_m
3101
3102define <4 x float> @test_sqrtss(<4 x float> %a0, <4 x float> *%a1) {
3103; GENERIC-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003104; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003105; GENERIC-NEXT: sqrtss %xmm0, %xmm0 # sched: [14:1.00]
3106; GENERIC-NEXT: movaps (%rdi), %xmm1 # sched: [6:0.50]
3107; GENERIC-NEXT: sqrtss %xmm1, %xmm1 # sched: [14:1.00]
3108; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
3109; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003110;
3111; ATOM-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003112; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003113; ATOM-NEXT: movaps (%rdi), %xmm1 # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003114; ATOM-NEXT: sqrtss %xmm0, %xmm0
3115; ATOM-NEXT: sqrtss %xmm1, %xmm1
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003116; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
3117; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003118;
3119; SLM-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003120; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003121; SLM-NEXT: movaps (%rdi), %xmm1 # sched: [3:1.00]
3122; SLM-NEXT: sqrtss %xmm0, %xmm0 # sched: [18:1.00]
3123; SLM-NEXT: sqrtss %xmm1, %xmm1 # sched: [18:1.00]
3124; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
3125; SLM-NEXT: retq # sched: [4:1.00]
3126;
3127; SANDY-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003128; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00003129; SANDY-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [114:1.00]
3130; SANDY-NEXT: vmovaps (%rdi), %xmm1 # sched: [6:0.50]
3131; SANDY-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [114:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003132; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003133; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003134;
3135; HASWELL-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003136; HASWELL: # %bb.0:
Gadi Haberd76f7b82017-08-28 10:04:16 +00003137; HASWELL-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [14:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003138; HASWELL-NEXT: vmovaps (%rdi), %xmm1 # sched: [6:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +00003139; HASWELL-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [14:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003140; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003141; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003142;
Gadi Haber85d99b42017-10-17 13:45:39 +00003143; BROADWELL-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003144; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003145; BROADWELL-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [14:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003146; BROADWELL-NEXT: vmovaps (%rdi), %xmm1 # sched: [5:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +00003147; BROADWELL-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [14:1.00]
3148; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003149; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003150;
Gadi Haber767d98b2017-08-30 08:08:50 +00003151; SKYLAKE-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003152; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003153; SKYLAKE-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [12:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003154; SKYLAKE-NEXT: vmovaps (%rdi), %xmm1 # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003155; SKYLAKE-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [12:1.00]
3156; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003157; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003158;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003159; SKX-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003160; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003161; SKX-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [12:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00003162; SKX-NEXT: vmovaps (%rdi), %xmm1 # sched: [6:0.50]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003163; SKX-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [12:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00003164; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
3165; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003166;
Simon Pilgrim93986492017-04-18 19:04:40 +00003167; BTVER2-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003168; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003169; BTVER2-NEXT: vmovaps (%rdi), %xmm1 # sched: [5:1.00]
3170; BTVER2-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [26:21.00]
3171; BTVER2-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [26:21.00]
3172; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3173; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003174;
3175; ZNVER1-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003176; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003177; ZNVER1-NEXT: vmovaps (%rdi), %xmm1 # sched: [8:0.50]
3178; ZNVER1-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [27:1.00]
3179; ZNVER1-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [27:1.00]
3180; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003181; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003182 %1 = call <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float> %a0)
3183 %2 = load <4 x float>, <4 x float> *%a1, align 16
3184 %3 = call <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float> %2)
3185 %4 = fadd <4 x float> %1, %3
3186 ret <4 x float> %4
3187}
3188declare <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float>) nounwind readnone
3189
3190define i32 @test_stmxcsr() {
3191; GENERIC-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003192; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003193; GENERIC-NEXT: stmxcsr -{{[0-9]+}}(%rsp) # sched: [5:1.00]
3194; GENERIC-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
3195; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003196;
3197; ATOM-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003198; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003199; ATOM-NEXT: stmxcsr -{{[0-9]+}}(%rsp) # sched: [15:7.50]
3200; ATOM-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [1:1.00]
3201; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003202;
3203; SLM-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003204; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003205; SLM-NEXT: stmxcsr -{{[0-9]+}}(%rsp) # sched: [1:1.00]
3206; SLM-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [3:1.00]
3207; SLM-NEXT: retq # sched: [4:1.00]
3208;
3209; SANDY-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003210; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00003211; SANDY-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [5:1.00]
3212; SANDY-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
3213; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003214;
3215; HASWELL-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003216; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +00003217; HASWELL-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [2:1.00]
3218; HASWELL-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
3219; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003220;
Gadi Haber85d99b42017-10-17 13:45:39 +00003221; BROADWELL-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003222; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +00003223; BROADWELL-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [2:1.00]
3224; BROADWELL-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
3225; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003226;
Gadi Haber767d98b2017-08-30 08:08:50 +00003227; SKYLAKE-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003228; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003229; SKYLAKE-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [2:1.00]
3230; SKYLAKE-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
3231; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003232;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003233; SKX-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003234; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00003235; SKX-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [2:1.00]
3236; SKX-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
3237; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003238;
Simon Pilgrim93986492017-04-18 19:04:40 +00003239; BTVER2-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003240; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003241; BTVER2-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [1:1.00]
3242; BTVER2-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:1.00]
3243; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003244;
3245; ZNVER1-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003246; ZNVER1: # %bb.0:
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003247; ZNVER1-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +00003248; ZNVER1-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003249; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003250 %1 = alloca i32, align 4
3251 %2 = bitcast i32* %1 to i8*
3252 call void @llvm.x86.sse.stmxcsr(i8* %2)
3253 %3 = load i32, i32* %1, align 4
3254 ret i32 %3
3255}
3256declare void @llvm.x86.sse.stmxcsr(i8*) nounwind readnone
3257
3258define <4 x float> @test_subps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
3259; GENERIC-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003260; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003261; GENERIC-NEXT: subps %xmm1, %xmm0 # sched: [3:1.00]
3262; GENERIC-NEXT: subps (%rdi), %xmm0 # sched: [9:1.00]
3263; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003264;
3265; ATOM-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003266; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003267; ATOM-NEXT: subps %xmm1, %xmm0 # sched: [5:5.00]
3268; ATOM-NEXT: subps (%rdi), %xmm0 # sched: [5:5.00]
3269; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003270;
3271; SLM-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003272; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003273; SLM-NEXT: subps %xmm1, %xmm0 # sched: [3:1.00]
3274; SLM-NEXT: subps (%rdi), %xmm0 # sched: [6:1.00]
3275; SLM-NEXT: retq # sched: [4:1.00]
3276;
3277; SANDY-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003278; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003279; SANDY-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003280; SANDY-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
3281; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003282;
3283; HASWELL-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003284; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003285; HASWELL-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003286; HASWELL-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
3287; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003288;
Gadi Haber85d99b42017-10-17 13:45:39 +00003289; BROADWELL-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003290; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003291; BROADWELL-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003292; BROADWELL-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
3293; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003294;
Gadi Haber767d98b2017-08-30 08:08:50 +00003295; SKYLAKE-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003296; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003297; SKYLAKE-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003298; SKYLAKE-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
3299; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003300;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003301; SKX-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003302; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00003303; SKX-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
3304; SKX-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
3305; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003306;
Simon Pilgrim93986492017-04-18 19:04:40 +00003307; BTVER2-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003308; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003309; BTVER2-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3310; BTVER2-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
3311; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003312;
3313; ZNVER1-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003314; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003315; ZNVER1-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3316; ZNVER1-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003317; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003318 %1 = fsub <4 x float> %a0, %a1
3319 %2 = load <4 x float>, <4 x float> *%a2, align 16
3320 %3 = fsub <4 x float> %1, %2
3321 ret <4 x float> %3
3322}
3323
3324define float @test_subss(float %a0, float %a1, float *%a2) {
3325; GENERIC-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003326; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003327; GENERIC-NEXT: subss %xmm1, %xmm0 # sched: [3:1.00]
3328; GENERIC-NEXT: subss (%rdi), %xmm0 # sched: [9:1.00]
3329; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003330;
3331; ATOM-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003332; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003333; ATOM-NEXT: subss %xmm1, %xmm0 # sched: [5:5.00]
3334; ATOM-NEXT: subss (%rdi), %xmm0 # sched: [5:5.00]
3335; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003336;
3337; SLM-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003338; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003339; SLM-NEXT: subss %xmm1, %xmm0 # sched: [3:1.00]
3340; SLM-NEXT: subss (%rdi), %xmm0 # sched: [6:1.00]
3341; SLM-NEXT: retq # sched: [4:1.00]
3342;
3343; SANDY-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003344; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003345; SANDY-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003346; SANDY-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
3347; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003348;
3349; HASWELL-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003350; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003351; HASWELL-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003352; HASWELL-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
3353; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003354;
Gadi Haber85d99b42017-10-17 13:45:39 +00003355; BROADWELL-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003356; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003357; BROADWELL-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003358; BROADWELL-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
3359; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003360;
Gadi Haber767d98b2017-08-30 08:08:50 +00003361; SKYLAKE-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003362; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003363; SKYLAKE-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003364; SKYLAKE-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
3365; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003366;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003367; SKX-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003368; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00003369; SKX-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
3370; SKX-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
3371; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003372;
Simon Pilgrim93986492017-04-18 19:04:40 +00003373; BTVER2-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003374; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003375; BTVER2-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3376; BTVER2-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
3377; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003378;
3379; ZNVER1-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003380; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003381; ZNVER1-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3382; ZNVER1-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003383; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003384 %1 = fsub float %a0, %a1
3385 %2 = load float, float *%a2, align 4
3386 %3 = fsub float %1, %2
3387 ret float %3
3388}
3389
3390define i32 @test_ucomiss(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
3391; GENERIC-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003392; GENERIC: # %bb.0:
Craig Topper00265772018-01-23 21:37:51 +00003393; GENERIC-NEXT: ucomiss %xmm1, %xmm0 # sched: [2:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +00003394; GENERIC-NEXT: setnp %al # sched: [1:0.50]
3395; GENERIC-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrim84846982017-08-01 15:14:35 +00003396; GENERIC-NEXT: andb %al, %cl # sched: [1:0.33]
Craig Topper00265772018-01-23 21:37:51 +00003397; GENERIC-NEXT: ucomiss (%rdi), %xmm0 # sched: [8:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +00003398; GENERIC-NEXT: setnp %al # sched: [1:0.50]
3399; GENERIC-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrim84846982017-08-01 15:14:35 +00003400; GENERIC-NEXT: andb %al, %dl # sched: [1:0.33]
3401; GENERIC-NEXT: orb %cl, %dl # sched: [1:0.33]
3402; GENERIC-NEXT: movzbl %dl, %eax # sched: [1:0.33]
3403; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003404;
3405; ATOM-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003406; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003407; ATOM-NEXT: ucomiss %xmm1, %xmm0 # sched: [9:4.50]
3408; ATOM-NEXT: setnp %al # sched: [1:0.50]
3409; ATOM-NEXT: sete %cl # sched: [1:0.50]
3410; ATOM-NEXT: andb %al, %cl # sched: [1:0.50]
3411; ATOM-NEXT: ucomiss (%rdi), %xmm0 # sched: [10:5.00]
3412; ATOM-NEXT: setnp %al # sched: [1:0.50]
3413; ATOM-NEXT: sete %dl # sched: [1:0.50]
3414; ATOM-NEXT: andb %al, %dl # sched: [1:0.50]
3415; ATOM-NEXT: orb %cl, %dl # sched: [1:0.50]
3416; ATOM-NEXT: movzbl %dl, %eax # sched: [1:1.00]
3417; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003418;
3419; SLM-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003420; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003421; SLM-NEXT: ucomiss %xmm1, %xmm0 # sched: [3:1.00]
3422; SLM-NEXT: setnp %al # sched: [1:0.50]
3423; SLM-NEXT: sete %cl # sched: [1:0.50]
3424; SLM-NEXT: andb %al, %cl # sched: [1:0.50]
3425; SLM-NEXT: ucomiss (%rdi), %xmm0 # sched: [6:1.00]
3426; SLM-NEXT: setnp %al # sched: [1:0.50]
3427; SLM-NEXT: sete %dl # sched: [1:0.50]
3428; SLM-NEXT: andb %al, %dl # sched: [1:0.50]
3429; SLM-NEXT: orb %cl, %dl # sched: [1:0.50]
3430; SLM-NEXT: movzbl %dl, %eax # sched: [1:0.50]
3431; SLM-NEXT: retq # sched: [4:1.00]
3432;
3433; SANDY-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003434; SANDY: # %bb.0:
Craig Topper00265772018-01-23 21:37:51 +00003435; SANDY-NEXT: vucomiss %xmm1, %xmm0 # sched: [2:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +00003436; SANDY-NEXT: setnp %al # sched: [1:0.50]
3437; SANDY-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003438; SANDY-NEXT: andb %al, %cl # sched: [1:0.33]
Craig Topper00265772018-01-23 21:37:51 +00003439; SANDY-NEXT: vucomiss (%rdi), %xmm0 # sched: [8:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +00003440; SANDY-NEXT: setnp %al # sched: [1:0.50]
3441; SANDY-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003442; SANDY-NEXT: andb %al, %dl # sched: [1:0.33]
3443; SANDY-NEXT: orb %cl, %dl # sched: [1:0.33]
3444; SANDY-NEXT: movzbl %dl, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003445; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003446;
3447; HASWELL-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003448; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003449; HASWELL-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00003450; HASWELL-NEXT: setnp %al # sched: [1:0.50]
3451; HASWELL-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003452; HASWELL-NEXT: andb %al, %cl # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003453; HASWELL-NEXT: vucomiss (%rdi), %xmm0 # sched: [8:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00003454; HASWELL-NEXT: setnp %al # sched: [1:0.50]
3455; HASWELL-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003456; HASWELL-NEXT: andb %al, %dl # sched: [1:0.25]
3457; HASWELL-NEXT: orb %cl, %dl # sched: [1:0.25]
3458; HASWELL-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003459; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003460;
Gadi Haber85d99b42017-10-17 13:45:39 +00003461; BROADWELL-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003462; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003463; BROADWELL-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
3464; BROADWELL-NEXT: setnp %al # sched: [1:0.50]
3465; BROADWELL-NEXT: sete %cl # sched: [1:0.50]
3466; BROADWELL-NEXT: andb %al, %cl # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +00003467; BROADWELL-NEXT: vucomiss (%rdi), %xmm0 # sched: [8:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003468; BROADWELL-NEXT: setnp %al # sched: [1:0.50]
3469; BROADWELL-NEXT: sete %dl # sched: [1:0.50]
3470; BROADWELL-NEXT: andb %al, %dl # sched: [1:0.25]
3471; BROADWELL-NEXT: orb %cl, %dl # sched: [1:0.25]
3472; BROADWELL-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +00003473; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003474;
Gadi Haber767d98b2017-08-30 08:08:50 +00003475; SKYLAKE-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003476; SKYLAKE: # %bb.0:
Craig Topper00265772018-01-23 21:37:51 +00003477; SKYLAKE-NEXT: vucomiss %xmm1, %xmm0 # sched: [2:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003478; SKYLAKE-NEXT: setnp %al # sched: [1:0.50]
3479; SKYLAKE-NEXT: sete %cl # sched: [1:0.50]
Gadi Haber767d98b2017-08-30 08:08:50 +00003480; SKYLAKE-NEXT: andb %al, %cl # sched: [1:0.25]
Craig Topper00265772018-01-23 21:37:51 +00003481; SKYLAKE-NEXT: vucomiss (%rdi), %xmm0 # sched: [7:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003482; SKYLAKE-NEXT: setnp %al # sched: [1:0.50]
3483; SKYLAKE-NEXT: sete %dl # sched: [1:0.50]
Gadi Haber767d98b2017-08-30 08:08:50 +00003484; SKYLAKE-NEXT: andb %al, %dl # sched: [1:0.25]
3485; SKYLAKE-NEXT: orb %cl, %dl # sched: [1:0.25]
3486; SKYLAKE-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003487; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003488;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003489; SKX-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003490; SKX: # %bb.0:
Craig Topper00265772018-01-23 21:37:51 +00003491; SKX-NEXT: vucomiss %xmm1, %xmm0 # sched: [2:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00003492; SKX-NEXT: setnp %al # sched: [1:0.50]
3493; SKX-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003494; SKX-NEXT: andb %al, %cl # sched: [1:0.25]
Craig Topper00265772018-01-23 21:37:51 +00003495; SKX-NEXT: vucomiss (%rdi), %xmm0 # sched: [7:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00003496; SKX-NEXT: setnp %al # sched: [1:0.50]
3497; SKX-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003498; SKX-NEXT: andb %al, %dl # sched: [1:0.25]
3499; SKX-NEXT: orb %cl, %dl # sched: [1:0.25]
3500; SKX-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +00003501; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003502;
Simon Pilgrim93986492017-04-18 19:04:40 +00003503; BTVER2-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003504; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003505; BTVER2-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
3506; BTVER2-NEXT: setnp %al # sched: [1:0.50]
3507; BTVER2-NEXT: sete %cl # sched: [1:0.50]
3508; BTVER2-NEXT: andb %al, %cl # sched: [1:0.50]
3509; BTVER2-NEXT: vucomiss (%rdi), %xmm0 # sched: [8:1.00]
3510; BTVER2-NEXT: setnp %al # sched: [1:0.50]
3511; BTVER2-NEXT: sete %dl # sched: [1:0.50]
3512; BTVER2-NEXT: andb %al, %dl # sched: [1:0.50]
3513; BTVER2-NEXT: orb %cl, %dl # sched: [1:0.50]
3514; BTVER2-NEXT: movzbl %dl, %eax # sched: [1:0.50]
3515; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003516;
3517; ZNVER1-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003518; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003519; ZNVER1-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
3520; ZNVER1-NEXT: setnp %al # sched: [1:0.25]
3521; ZNVER1-NEXT: sete %cl # sched: [1:0.25]
3522; ZNVER1-NEXT: andb %al, %cl # sched: [1:0.25]
3523; ZNVER1-NEXT: vucomiss (%rdi), %xmm0 # sched: [10:1.00]
3524; ZNVER1-NEXT: setnp %al # sched: [1:0.25]
3525; ZNVER1-NEXT: sete %dl # sched: [1:0.25]
3526; ZNVER1-NEXT: andb %al, %dl # sched: [1:0.25]
3527; ZNVER1-NEXT: orb %cl, %dl # sched: [1:0.25]
3528; ZNVER1-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003529; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003530 %1 = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %a1)
3531 %2 = load <4 x float>, <4 x float> *%a2, align 4
3532 %3 = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %2)
3533 %4 = or i32 %1, %3
3534 ret i32 %4
3535}
3536declare i32 @llvm.x86.sse.ucomieq.ss(<4 x float>, <4 x float>) nounwind readnone
3537
3538define <4 x float> @test_unpckhps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
3539; GENERIC-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003540; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003541; GENERIC-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003542; GENERIC-NEXT: unpckhps {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [7:1.00]
3543; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +00003544; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003545;
3546; ATOM-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003547; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003548; ATOM-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003549; ATOM-NEXT: unpckhps {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [1:1.00]
3550; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003551; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003552;
3553; SLM-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003554; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003555; SLM-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003556; SLM-NEXT: unpckhps {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [4:1.00]
3557; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003558; SLM-NEXT: retq # sched: [4:1.00]
3559;
3560; SANDY-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003561; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003562; SANDY-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003563; SANDY-NEXT: vunpckhps {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [7:1.00]
3564; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003565; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003566;
3567; HASWELL-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003568; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003569; HASWELL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003570; HASWELL-NEXT: vunpckhps {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [7:1.00]
3571; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003572; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003573;
Gadi Haber85d99b42017-10-17 13:45:39 +00003574; BROADWELL-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003575; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003576; BROADWELL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003577; BROADWELL-NEXT: vunpckhps {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [6:1.00]
3578; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003579; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003580;
Gadi Haber767d98b2017-08-30 08:08:50 +00003581; SKYLAKE-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003582; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +00003583; SKYLAKE-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003584; SKYLAKE-NEXT: vunpckhps {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [7:1.00]
3585; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003586; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003587;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003588; SKX-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003589; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003590; SKX-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003591; SKX-NEXT: vunpckhps {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [7:1.00]
3592; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
Gadi Haber684944b2017-10-08 12:52:54 +00003593; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003594;
Simon Pilgrim93986492017-04-18 19:04:40 +00003595; BTVER2-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003596; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003597; BTVER2-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003598; BTVER2-NEXT: vunpckhps {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [6:1.00]
3599; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003600; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003601;
3602; ZNVER1-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003603; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003604; ZNVER1-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003605; ZNVER1-NEXT: vunpckhps {{.*#+}} xmm1 = xmm1[2],mem[2],xmm1[3],mem[3] sched: [8:0.50]
3606; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003607; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003608 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
3609 %2 = load <4 x float>, <4 x float> *%a2, align 16
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003610 %3 = shufflevector <4 x float> %a1, <4 x float> %2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
3611 %4 = fadd <4 x float> %1, %3
3612 ret <4 x float> %4
Simon Pilgrim93986492017-04-18 19:04:40 +00003613}
3614
3615define <4 x float> @test_unpcklps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
3616; GENERIC-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003617; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003618; GENERIC-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003619; GENERIC-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [7:1.00]
3620; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
Simon Pilgrim84846982017-08-01 15:14:35 +00003621; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003622;
3623; ATOM-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003624; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003625; ATOM-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003626; ATOM-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [1:1.00]
3627; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003628; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003629;
3630; SLM-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003631; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003632; SLM-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003633; SLM-NEXT: unpcklps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [4:1.00]
3634; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003635; SLM-NEXT: retq # sched: [4:1.00]
3636;
3637; SANDY-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003638; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003639; SANDY-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003640; SANDY-NEXT: vunpcklps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [7:1.00]
3641; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003642; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003643;
3644; HASWELL-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003645; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003646; HASWELL-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003647; HASWELL-NEXT: vunpcklps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [7:1.00]
3648; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003649; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003650;
Gadi Haber85d99b42017-10-17 13:45:39 +00003651; BROADWELL-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003652; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003653; BROADWELL-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003654; BROADWELL-NEXT: vunpcklps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [6:1.00]
3655; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003656; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003657;
Gadi Haber767d98b2017-08-30 08:08:50 +00003658; SKYLAKE-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003659; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +00003660; SKYLAKE-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003661; SKYLAKE-NEXT: vunpcklps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [7:1.00]
3662; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003663; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003664;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003665; SKX-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003666; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003667; SKX-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003668; SKX-NEXT: vunpcklps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [7:1.00]
3669; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
Gadi Haber684944b2017-10-08 12:52:54 +00003670; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003671;
Simon Pilgrim93986492017-04-18 19:04:40 +00003672; BTVER2-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003673; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003674; BTVER2-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:0.50]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003675; BTVER2-NEXT: vunpcklps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [6:1.00]
3676; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003677; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003678;
3679; ZNVER1-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003680; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003681; ZNVER1-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:0.50]
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003682; ZNVER1-NEXT: vunpcklps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[1],mem[1] sched: [8:0.50]
3683; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003684; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003685 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
3686 %2 = load <4 x float>, <4 x float> *%a2, align 16
Simon Pilgrim8fb1dd82018-02-03 21:20:19 +00003687 %3 = shufflevector <4 x float> %a1, <4 x float> %2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
3688 %4 = fadd <4 x float> %1, %3
3689 ret <4 x float> %4
Simon Pilgrim93986492017-04-18 19:04:40 +00003690}
3691
3692define <4 x float> @test_xorps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
3693; GENERIC-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003694; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003695; GENERIC-NEXT: xorps %xmm1, %xmm0 # sched: [1:1.00]
3696; GENERIC-NEXT: xorps (%rdi), %xmm0 # sched: [7:1.00]
3697; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003698;
3699; ATOM-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003700; ATOM: # %bb.0:
Simon Pilgrim486072d2017-08-01 17:51:20 +00003701; ATOM-NEXT: xorps %xmm1, %xmm0 # sched: [1:0.50]
3702; ATOM-NEXT: xorps (%rdi), %xmm0 # sched: [1:1.00]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003703; ATOM-NEXT: nop # sched: [1:0.50]
3704; ATOM-NEXT: nop # sched: [1:0.50]
3705; ATOM-NEXT: nop # sched: [1:0.50]
3706; ATOM-NEXT: nop # sched: [1:0.50]
3707; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003708;
3709; SLM-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003710; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003711; SLM-NEXT: xorps %xmm1, %xmm0 # sched: [1:0.50]
3712; SLM-NEXT: xorps (%rdi), %xmm0 # sched: [4:1.00]
3713; SLM-NEXT: retq # sched: [4:1.00]
3714;
3715; SANDY-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003716; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00003717; SANDY-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
3718; SANDY-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
3719; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003720;
3721; HASWELL-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003722; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003723; HASWELL-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003724; HASWELL-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
3725; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003726;
Gadi Haber85d99b42017-10-17 13:45:39 +00003727; BROADWELL-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003728; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003729; BROADWELL-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003730; BROADWELL-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3731; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003732;
Gadi Haber767d98b2017-08-30 08:08:50 +00003733; SKYLAKE-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003734; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003735; SKYLAKE-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3736; SKYLAKE-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3737; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003738;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003739; SKX-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003740; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00003741; SKX-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3742; SKX-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3743; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003744;
Simon Pilgrim93986492017-04-18 19:04:40 +00003745; BTVER2-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003746; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003747; BTVER2-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3748; BTVER2-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3749; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003750;
3751; ZNVER1-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003752; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003753; ZNVER1-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3754; ZNVER1-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003755; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003756 %1 = bitcast <4 x float> %a0 to <4 x i32>
3757 %2 = bitcast <4 x float> %a1 to <4 x i32>
3758 %3 = xor <4 x i32> %1, %2
3759 %4 = load <4 x float>, <4 x float> *%a2, align 16
3760 %5 = bitcast <4 x float> %4 to <4 x i32>
3761 %6 = xor <4 x i32> %3, %5
3762 %7 = bitcast <4 x i32> %6 to <4 x float>
3763 ret <4 x float> %7
3764}
3765
3766!0 = !{i32 1}