blob: 2acc1df5ce4aa3bd3486ebc07e0e42d37f980e15 [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:
Simon Pilgrim84846982017-08-01 15:14:35 +0000450; GENERIC-NEXT: comiss %xmm1, %xmm0 # sched: [3: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]
454; GENERIC-NEXT: comiss (%rdi), %xmm0 # sched: [7: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:
Simon Pilgrim93986492017-04-18 19:04:40 +0000492; SANDY-NEXT: vcomiss %xmm1, %xmm0 # sched: [3: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]
496; SANDY-NEXT: vcomiss (%rdi), %xmm0 # sched: [7: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:
Gadi Haber767d98b2017-08-30 08:08:50 +0000534; SKYLAKE-NEXT: vcomiss %xmm1, %xmm0 # sched: [3: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]
Gadi Haber6f8fbf42017-09-19 06:19:27 +0000538; SKYLAKE-NEXT: vcomiss (%rdi), %xmm0 # sched: [8: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:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +0000548; SKX-NEXT: vcomiss %xmm1, %xmm0 # sched: [3: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]
552; SKX-NEXT: vcomiss (%rdi), %xmm0 # sched: [8: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]
2948; GENERIC-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [7:1.00]
2949; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002950;
2951; ATOM-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002952; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002953; ATOM-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
2954; ATOM-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [1:1.00]
2955; ATOM-NEXT: nop # sched: [1:0.50]
2956; ATOM-NEXT: nop # sched: [1:0.50]
2957; ATOM-NEXT: nop # sched: [1:0.50]
2958; ATOM-NEXT: nop # sched: [1:0.50]
2959; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002960;
2961; SLM-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002962; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002963; SLM-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
2964; SLM-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [4:1.00]
2965; SLM-NEXT: retq # sched: [4:1.00]
2966;
2967; SANDY-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002968; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002969; SANDY-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002970; SANDY-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [7:1.00]
2971; 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]
Gadi Haber2cf601f2017-12-08 09:48:44 +00002976; HASWELL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [7:1.00]
2977; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002978;
Gadi Haber85d99b42017-10-17 13:45:39 +00002979; BROADWELL-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002980; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00002981; BROADWELL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00002982; BROADWELL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [6:1.00]
2983; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00002984;
Gadi Haber767d98b2017-08-30 08:08:50 +00002985; SKYLAKE-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002986; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +00002987; SKYLAKE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00002988; SKYLAKE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [7:1.00]
2989; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00002990;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002991; SKX-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002992; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002993; SKX-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00002994; SKX-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [7:1.00]
2995; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00002996;
Simon Pilgrim93986492017-04-18 19:04:40 +00002997; BTVER2-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00002998; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00002999; BTVER2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:0.50]
3000; BTVER2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [6:1.00]
3001; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003002;
3003; ZNVER1-LABEL: test_shufps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003004; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003005; ZNVER1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:0.50]
3006; ZNVER1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003007; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003008 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 0, i32 4, i32 4>
3009 %2 = load <4 x float>, <4 x float> *%a2, align 16
3010 %3 = shufflevector <4 x float> %1, <4 x float> %2, <4 x i32> <i32 0, i32 3, i32 4, i32 4>
3011 ret <4 x float> %3
3012}
3013
3014define <4 x float> @test_sqrtps(<4 x float> %a0, <4 x float> *%a1) {
3015; GENERIC-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003016; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003017; GENERIC-NEXT: sqrtps %xmm0, %xmm1 # sched: [14:1.00]
3018; GENERIC-NEXT: sqrtps (%rdi), %xmm0 # sched: [20:1.00]
3019; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
3020; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003021;
3022; ATOM-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003023; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003024; ATOM-NEXT: sqrtps %xmm0, %xmm1 # sched: [70:35.00]
3025; ATOM-NEXT: sqrtps (%rdi), %xmm0 # sched: [70:35.00]
3026; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
3027; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003028;
3029; SLM-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003030; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003031; SLM-NEXT: sqrtps (%rdi), %xmm1 # sched: [18:1.00]
3032; SLM-NEXT: sqrtps %xmm0, %xmm0 # sched: [15:1.00]
3033; SLM-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
3034; SLM-NEXT: movaps %xmm1, %xmm0 # sched: [1:1.00]
3035; SLM-NEXT: retq # sched: [4:1.00]
3036;
3037; SANDY-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003038; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00003039; SANDY-NEXT: vsqrtps %xmm0, %xmm0 # sched: [14:1.00]
3040; SANDY-NEXT: vsqrtps (%rdi), %xmm1 # sched: [20:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003041; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003042; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003043;
3044; HASWELL-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003045; HASWELL: # %bb.0:
Gadi Haberd76f7b82017-08-28 10:04:16 +00003046; HASWELL-NEXT: vsqrtps %xmm0, %xmm0 # sched: [14:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003047; HASWELL-NEXT: vsqrtps (%rdi), %xmm1 # sched: [20:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003048; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003049; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003050;
Gadi Haber85d99b42017-10-17 13:45:39 +00003051; BROADWELL-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003052; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003053; BROADWELL-NEXT: vsqrtps %xmm0, %xmm0 # sched: [14:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003054; BROADWELL-NEXT: vsqrtps (%rdi), %xmm1 # sched: [19:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003055; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003056; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003057;
Gadi Haber767d98b2017-08-30 08:08:50 +00003058; SKYLAKE-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003059; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003060; SKYLAKE-NEXT: vsqrtps %xmm0, %xmm0 # sched: [12:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003061; SKYLAKE-NEXT: vsqrtps (%rdi), %xmm1 # sched: [18:1.00]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003062; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003063; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003064;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003065; SKX-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003066; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003067; SKX-NEXT: vsqrtps %xmm0, %xmm0 # sched: [12:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00003068; SKX-NEXT: vsqrtps (%rdi), %xmm1 # sched: [18:1.00]
3069; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
3070; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003071;
Simon Pilgrim93986492017-04-18 19:04:40 +00003072; BTVER2-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003073; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003074; BTVER2-NEXT: vsqrtps (%rdi), %xmm1 # sched: [26:21.00]
3075; BTVER2-NEXT: vsqrtps %xmm0, %xmm0 # sched: [21:21.00]
3076; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3077; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003078;
3079; ZNVER1-LABEL: test_sqrtps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003080; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003081; ZNVER1-NEXT: vsqrtps (%rdi), %xmm1 # sched: [27:1.00]
3082; ZNVER1-NEXT: vsqrtps %xmm0, %xmm0 # sched: [20:1.00]
3083; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003084; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003085 %1 = call <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float> %a0)
3086 %2 = load <4 x float>, <4 x float> *%a1, align 16
3087 %3 = call <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float> %2)
3088 %4 = fadd <4 x float> %1, %3
3089 ret <4 x float> %4
3090}
3091declare <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float>) nounwind readnone
3092
3093; TODO - sqrtss_m
3094
3095define <4 x float> @test_sqrtss(<4 x float> %a0, <4 x float> *%a1) {
3096; GENERIC-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003097; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003098; GENERIC-NEXT: sqrtss %xmm0, %xmm0 # sched: [14:1.00]
3099; GENERIC-NEXT: movaps (%rdi), %xmm1 # sched: [6:0.50]
3100; GENERIC-NEXT: sqrtss %xmm1, %xmm1 # sched: [14:1.00]
3101; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
3102; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003103;
3104; ATOM-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003105; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003106; ATOM-NEXT: movaps (%rdi), %xmm1 # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003107; ATOM-NEXT: sqrtss %xmm0, %xmm0
3108; ATOM-NEXT: sqrtss %xmm1, %xmm1
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003109; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
3110; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003111;
3112; SLM-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003113; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003114; SLM-NEXT: movaps (%rdi), %xmm1 # sched: [3:1.00]
3115; SLM-NEXT: sqrtss %xmm0, %xmm0 # sched: [18:1.00]
3116; SLM-NEXT: sqrtss %xmm1, %xmm1 # sched: [18:1.00]
3117; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
3118; SLM-NEXT: retq # sched: [4:1.00]
3119;
3120; SANDY-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003121; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00003122; SANDY-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [114:1.00]
3123; SANDY-NEXT: vmovaps (%rdi), %xmm1 # sched: [6:0.50]
3124; SANDY-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [114:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003125; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003126; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003127;
3128; HASWELL-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003129; HASWELL: # %bb.0:
Gadi Haberd76f7b82017-08-28 10:04:16 +00003130; HASWELL-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [14:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003131; HASWELL-NEXT: vmovaps (%rdi), %xmm1 # sched: [6:0.50]
Gadi Haberd76f7b82017-08-28 10:04:16 +00003132; HASWELL-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [14:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003133; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003134; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003135;
Gadi Haber85d99b42017-10-17 13:45:39 +00003136; BROADWELL-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003137; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003138; BROADWELL-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [14:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003139; BROADWELL-NEXT: vmovaps (%rdi), %xmm1 # sched: [5:0.50]
Gadi Haber85d99b42017-10-17 13:45:39 +00003140; BROADWELL-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [14:1.00]
3141; BROADWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003142; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003143;
Gadi Haber767d98b2017-08-30 08:08:50 +00003144; SKYLAKE-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003145; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003146; SKYLAKE-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [12:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003147; SKYLAKE-NEXT: vmovaps (%rdi), %xmm1 # sched: [6:0.50]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003148; SKYLAKE-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [12:1.00]
3149; SKYLAKE-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003150; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003151;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003152; SKX-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003153; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003154; SKX-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [12:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00003155; SKX-NEXT: vmovaps (%rdi), %xmm1 # sched: [6:0.50]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003156; SKX-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [12:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00003157; SKX-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
3158; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003159;
Simon Pilgrim93986492017-04-18 19:04:40 +00003160; BTVER2-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003161; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003162; BTVER2-NEXT: vmovaps (%rdi), %xmm1 # sched: [5:1.00]
3163; BTVER2-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [26:21.00]
3164; BTVER2-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [26:21.00]
3165; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3166; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003167;
3168; ZNVER1-LABEL: test_sqrtss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003169; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003170; ZNVER1-NEXT: vmovaps (%rdi), %xmm1 # sched: [8:0.50]
3171; ZNVER1-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [27:1.00]
3172; ZNVER1-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [27:1.00]
3173; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003174; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003175 %1 = call <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float> %a0)
3176 %2 = load <4 x float>, <4 x float> *%a1, align 16
3177 %3 = call <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float> %2)
3178 %4 = fadd <4 x float> %1, %3
3179 ret <4 x float> %4
3180}
3181declare <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float>) nounwind readnone
3182
3183define i32 @test_stmxcsr() {
3184; GENERIC-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003185; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003186; GENERIC-NEXT: stmxcsr -{{[0-9]+}}(%rsp) # sched: [5:1.00]
3187; GENERIC-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
3188; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003189;
3190; ATOM-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003191; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003192; ATOM-NEXT: stmxcsr -{{[0-9]+}}(%rsp) # sched: [15:7.50]
3193; ATOM-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [1:1.00]
3194; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003195;
3196; SLM-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003197; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003198; SLM-NEXT: stmxcsr -{{[0-9]+}}(%rsp) # sched: [1:1.00]
3199; SLM-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [3:1.00]
3200; SLM-NEXT: retq # sched: [4:1.00]
3201;
3202; SANDY-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003203; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00003204; SANDY-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [5:1.00]
3205; SANDY-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
3206; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003207;
3208; HASWELL-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003209; HASWELL: # %bb.0:
Gadi Haber2cf601f2017-12-08 09:48:44 +00003210; HASWELL-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [2:1.00]
3211; HASWELL-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
3212; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003213;
Gadi Haber85d99b42017-10-17 13:45:39 +00003214; BROADWELL-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003215; BROADWELL: # %bb.0:
Gadi Haber323f2e12017-10-24 20:19:47 +00003216; BROADWELL-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [2:1.00]
3217; BROADWELL-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
3218; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003219;
Gadi Haber767d98b2017-08-30 08:08:50 +00003220; SKYLAKE-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003221; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003222; SKYLAKE-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [2:1.00]
3223; SKYLAKE-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
3224; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003225;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003226; SKX-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003227; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00003228; SKX-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [2:1.00]
3229; SKX-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
3230; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003231;
Simon Pilgrim93986492017-04-18 19:04:40 +00003232; BTVER2-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003233; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003234; BTVER2-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [1:1.00]
3235; BTVER2-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:1.00]
3236; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003237;
3238; ZNVER1-LABEL: test_stmxcsr:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003239; ZNVER1: # %bb.0:
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003240; ZNVER1-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [100:?]
Craig Topper106b5b62017-07-19 02:45:14 +00003241; ZNVER1-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003242; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003243 %1 = alloca i32, align 4
3244 %2 = bitcast i32* %1 to i8*
3245 call void @llvm.x86.sse.stmxcsr(i8* %2)
3246 %3 = load i32, i32* %1, align 4
3247 ret i32 %3
3248}
3249declare void @llvm.x86.sse.stmxcsr(i8*) nounwind readnone
3250
3251define <4 x float> @test_subps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
3252; GENERIC-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003253; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003254; GENERIC-NEXT: subps %xmm1, %xmm0 # sched: [3:1.00]
3255; GENERIC-NEXT: subps (%rdi), %xmm0 # sched: [9:1.00]
3256; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003257;
3258; ATOM-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003259; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003260; ATOM-NEXT: subps %xmm1, %xmm0 # sched: [5:5.00]
3261; ATOM-NEXT: subps (%rdi), %xmm0 # sched: [5:5.00]
3262; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003263;
3264; SLM-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003265; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003266; SLM-NEXT: subps %xmm1, %xmm0 # sched: [3:1.00]
3267; SLM-NEXT: subps (%rdi), %xmm0 # sched: [6:1.00]
3268; SLM-NEXT: retq # sched: [4:1.00]
3269;
3270; SANDY-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003271; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003272; SANDY-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003273; SANDY-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
3274; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003275;
3276; HASWELL-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003277; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003278; HASWELL-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003279; HASWELL-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
3280; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003281;
Gadi Haber85d99b42017-10-17 13:45:39 +00003282; BROADWELL-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003283; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003284; BROADWELL-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003285; BROADWELL-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
3286; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003287;
Gadi Haber767d98b2017-08-30 08:08:50 +00003288; SKYLAKE-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003289; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003290; SKYLAKE-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003291; SKYLAKE-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
3292; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003293;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003294; SKX-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003295; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00003296; SKX-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
3297; SKX-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [10:0.50]
3298; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003299;
Simon Pilgrim93986492017-04-18 19:04:40 +00003300; BTVER2-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003301; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003302; BTVER2-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3303; BTVER2-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
3304; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003305;
3306; ZNVER1-LABEL: test_subps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003307; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003308; ZNVER1-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3309; ZNVER1-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003310; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003311 %1 = fsub <4 x float> %a0, %a1
3312 %2 = load <4 x float>, <4 x float> *%a2, align 16
3313 %3 = fsub <4 x float> %1, %2
3314 ret <4 x float> %3
3315}
3316
3317define float @test_subss(float %a0, float %a1, float *%a2) {
3318; GENERIC-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003319; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003320; GENERIC-NEXT: subss %xmm1, %xmm0 # sched: [3:1.00]
3321; GENERIC-NEXT: subss (%rdi), %xmm0 # sched: [9:1.00]
3322; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003323;
3324; ATOM-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003325; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003326; ATOM-NEXT: subss %xmm1, %xmm0 # sched: [5:5.00]
3327; ATOM-NEXT: subss (%rdi), %xmm0 # sched: [5:5.00]
3328; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003329;
3330; SLM-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003331; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003332; SLM-NEXT: subss %xmm1, %xmm0 # sched: [3:1.00]
3333; SLM-NEXT: subss (%rdi), %xmm0 # sched: [6:1.00]
3334; SLM-NEXT: retq # sched: [4:1.00]
3335;
3336; SANDY-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003337; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003338; SANDY-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003339; SANDY-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
3340; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003341;
3342; HASWELL-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003343; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003344; HASWELL-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003345; HASWELL-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
3346; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003347;
Gadi Haber85d99b42017-10-17 13:45:39 +00003348; BROADWELL-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003349; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003350; BROADWELL-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003351; BROADWELL-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
3352; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003353;
Gadi Haber767d98b2017-08-30 08:08:50 +00003354; SKYLAKE-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003355; SKYLAKE: # %bb.0:
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003356; SKYLAKE-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [4:0.50]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003357; SKYLAKE-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
3358; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003359;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003360; SKX-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003361; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00003362; SKX-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [4:0.33]
3363; SKX-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
3364; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003365;
Simon Pilgrim93986492017-04-18 19:04:40 +00003366; BTVER2-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003367; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003368; BTVER2-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3369; BTVER2-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
3370; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003371;
3372; ZNVER1-LABEL: test_subss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003373; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003374; ZNVER1-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
3375; ZNVER1-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003376; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003377 %1 = fsub float %a0, %a1
3378 %2 = load float, float *%a2, align 4
3379 %3 = fsub float %1, %2
3380 ret float %3
3381}
3382
3383define i32 @test_ucomiss(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
3384; GENERIC-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003385; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003386; GENERIC-NEXT: ucomiss %xmm1, %xmm0 # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +00003387; GENERIC-NEXT: setnp %al # sched: [1:0.50]
3388; GENERIC-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrim84846982017-08-01 15:14:35 +00003389; GENERIC-NEXT: andb %al, %cl # sched: [1:0.33]
3390; GENERIC-NEXT: ucomiss (%rdi), %xmm0 # sched: [7:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +00003391; GENERIC-NEXT: setnp %al # sched: [1:0.50]
3392; GENERIC-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrim84846982017-08-01 15:14:35 +00003393; GENERIC-NEXT: andb %al, %dl # sched: [1:0.33]
3394; GENERIC-NEXT: orb %cl, %dl # sched: [1:0.33]
3395; GENERIC-NEXT: movzbl %dl, %eax # sched: [1:0.33]
3396; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003397;
3398; ATOM-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003399; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003400; ATOM-NEXT: ucomiss %xmm1, %xmm0 # sched: [9:4.50]
3401; ATOM-NEXT: setnp %al # sched: [1:0.50]
3402; ATOM-NEXT: sete %cl # sched: [1:0.50]
3403; ATOM-NEXT: andb %al, %cl # sched: [1:0.50]
3404; ATOM-NEXT: ucomiss (%rdi), %xmm0 # sched: [10:5.00]
3405; ATOM-NEXT: setnp %al # sched: [1:0.50]
3406; ATOM-NEXT: sete %dl # sched: [1:0.50]
3407; ATOM-NEXT: andb %al, %dl # sched: [1:0.50]
3408; ATOM-NEXT: orb %cl, %dl # sched: [1:0.50]
3409; ATOM-NEXT: movzbl %dl, %eax # sched: [1:1.00]
3410; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003411;
3412; SLM-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003413; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003414; SLM-NEXT: ucomiss %xmm1, %xmm0 # sched: [3:1.00]
3415; SLM-NEXT: setnp %al # sched: [1:0.50]
3416; SLM-NEXT: sete %cl # sched: [1:0.50]
3417; SLM-NEXT: andb %al, %cl # sched: [1:0.50]
3418; SLM-NEXT: ucomiss (%rdi), %xmm0 # sched: [6:1.00]
3419; SLM-NEXT: setnp %al # sched: [1:0.50]
3420; SLM-NEXT: sete %dl # sched: [1:0.50]
3421; SLM-NEXT: andb %al, %dl # sched: [1:0.50]
3422; SLM-NEXT: orb %cl, %dl # sched: [1:0.50]
3423; SLM-NEXT: movzbl %dl, %eax # sched: [1:0.50]
3424; SLM-NEXT: retq # sched: [4:1.00]
3425;
3426; SANDY-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003427; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003428; SANDY-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +00003429; SANDY-NEXT: setnp %al # sched: [1:0.50]
3430; SANDY-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003431; SANDY-NEXT: andb %al, %cl # sched: [1:0.33]
3432; SANDY-NEXT: vucomiss (%rdi), %xmm0 # sched: [7:1.00]
Gadi Haberbed2c502017-08-13 13:59:24 +00003433; SANDY-NEXT: setnp %al # sched: [1:0.50]
3434; SANDY-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003435; SANDY-NEXT: andb %al, %dl # sched: [1:0.33]
3436; SANDY-NEXT: orb %cl, %dl # sched: [1:0.33]
3437; SANDY-NEXT: movzbl %dl, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003438; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003439;
3440; HASWELL-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003441; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003442; HASWELL-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00003443; HASWELL-NEXT: setnp %al # sched: [1:0.50]
3444; HASWELL-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003445; HASWELL-NEXT: andb %al, %cl # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003446; HASWELL-NEXT: vucomiss (%rdi), %xmm0 # sched: [8:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00003447; HASWELL-NEXT: setnp %al # sched: [1:0.50]
3448; HASWELL-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003449; HASWELL-NEXT: andb %al, %dl # sched: [1:0.25]
3450; HASWELL-NEXT: orb %cl, %dl # sched: [1:0.25]
3451; HASWELL-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003452; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003453;
Gadi Haber85d99b42017-10-17 13:45:39 +00003454; BROADWELL-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003455; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003456; BROADWELL-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
3457; BROADWELL-NEXT: setnp %al # sched: [1:0.50]
3458; BROADWELL-NEXT: sete %cl # sched: [1:0.50]
3459; BROADWELL-NEXT: andb %al, %cl # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +00003460; BROADWELL-NEXT: vucomiss (%rdi), %xmm0 # sched: [8:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003461; BROADWELL-NEXT: setnp %al # sched: [1:0.50]
3462; BROADWELL-NEXT: sete %dl # sched: [1:0.50]
3463; BROADWELL-NEXT: andb %al, %dl # sched: [1:0.25]
3464; BROADWELL-NEXT: orb %cl, %dl # sched: [1:0.25]
3465; BROADWELL-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Gadi Haber323f2e12017-10-24 20:19:47 +00003466; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003467;
Gadi Haber767d98b2017-08-30 08:08:50 +00003468; SKYLAKE-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003469; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +00003470; SKYLAKE-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003471; SKYLAKE-NEXT: setnp %al # sched: [1:0.50]
3472; SKYLAKE-NEXT: sete %cl # sched: [1:0.50]
Gadi Haber767d98b2017-08-30 08:08:50 +00003473; SKYLAKE-NEXT: andb %al, %cl # sched: [1:0.25]
Gadi Haber6f8fbf42017-09-19 06:19:27 +00003474; SKYLAKE-NEXT: vucomiss (%rdi), %xmm0 # sched: [8:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003475; SKYLAKE-NEXT: setnp %al # sched: [1:0.50]
3476; SKYLAKE-NEXT: sete %dl # sched: [1:0.50]
Gadi Haber767d98b2017-08-30 08:08:50 +00003477; SKYLAKE-NEXT: andb %al, %dl # sched: [1:0.25]
3478; SKYLAKE-NEXT: orb %cl, %dl # sched: [1:0.25]
3479; SKYLAKE-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003480; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003481;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003482; SKX-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003483; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003484; SKX-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00003485; SKX-NEXT: setnp %al # sched: [1:0.50]
3486; SKX-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003487; SKX-NEXT: andb %al, %cl # sched: [1:0.25]
3488; SKX-NEXT: vucomiss (%rdi), %xmm0 # sched: [8:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00003489; SKX-NEXT: setnp %al # sched: [1:0.50]
3490; SKX-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003491; SKX-NEXT: andb %al, %dl # sched: [1:0.25]
3492; SKX-NEXT: orb %cl, %dl # sched: [1:0.25]
3493; SKX-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Gadi Haber684944b2017-10-08 12:52:54 +00003494; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003495;
Simon Pilgrim93986492017-04-18 19:04:40 +00003496; BTVER2-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003497; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003498; BTVER2-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
3499; BTVER2-NEXT: setnp %al # sched: [1:0.50]
3500; BTVER2-NEXT: sete %cl # sched: [1:0.50]
3501; BTVER2-NEXT: andb %al, %cl # sched: [1:0.50]
3502; BTVER2-NEXT: vucomiss (%rdi), %xmm0 # sched: [8:1.00]
3503; BTVER2-NEXT: setnp %al # sched: [1:0.50]
3504; BTVER2-NEXT: sete %dl # sched: [1:0.50]
3505; BTVER2-NEXT: andb %al, %dl # sched: [1:0.50]
3506; BTVER2-NEXT: orb %cl, %dl # sched: [1:0.50]
3507; BTVER2-NEXT: movzbl %dl, %eax # sched: [1:0.50]
3508; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003509;
3510; ZNVER1-LABEL: test_ucomiss:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003511; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003512; ZNVER1-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
3513; ZNVER1-NEXT: setnp %al # sched: [1:0.25]
3514; ZNVER1-NEXT: sete %cl # sched: [1:0.25]
3515; ZNVER1-NEXT: andb %al, %cl # sched: [1:0.25]
3516; ZNVER1-NEXT: vucomiss (%rdi), %xmm0 # sched: [10:1.00]
3517; ZNVER1-NEXT: setnp %al # sched: [1:0.25]
3518; ZNVER1-NEXT: sete %dl # sched: [1:0.25]
3519; ZNVER1-NEXT: andb %al, %dl # sched: [1:0.25]
3520; ZNVER1-NEXT: orb %cl, %dl # sched: [1:0.25]
3521; ZNVER1-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003522; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003523 %1 = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %a1)
3524 %2 = load <4 x float>, <4 x float> *%a2, align 4
3525 %3 = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %2)
3526 %4 = or i32 %1, %3
3527 ret i32 %4
3528}
3529declare i32 @llvm.x86.sse.ucomieq.ss(<4 x float>, <4 x float>) nounwind readnone
3530
3531define <4 x float> @test_unpckhps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
3532; GENERIC-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003533; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003534; GENERIC-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
3535; GENERIC-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [7:1.00]
3536; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003537;
3538; ATOM-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003539; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003540; ATOM-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
3541; ATOM-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [1:1.00]
3542; ATOM-NEXT: nop # sched: [1:0.50]
3543; ATOM-NEXT: nop # sched: [1:0.50]
3544; ATOM-NEXT: nop # sched: [1:0.50]
3545; ATOM-NEXT: nop # sched: [1:0.50]
3546; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003547;
3548; SLM-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003549; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003550; SLM-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
3551; SLM-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [4:1.00]
3552; SLM-NEXT: retq # sched: [4:1.00]
3553;
3554; SANDY-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003555; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003556; SANDY-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003557; SANDY-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [7:1.00]
3558; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003559;
3560; HASWELL-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003561; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003562; HASWELL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003563; HASWELL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [7:1.00]
3564; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003565;
Gadi Haber85d99b42017-10-17 13:45:39 +00003566; BROADWELL-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003567; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003568; BROADWELL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003569; BROADWELL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [6:1.00]
3570; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003571;
Gadi Haber767d98b2017-08-30 08:08:50 +00003572; SKYLAKE-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003573; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +00003574; SKYLAKE-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003575; SKYLAKE-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [7:1.00]
3576; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003577;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003578; SKX-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003579; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003580; SKX-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00003581; SKX-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [7:1.00]
3582; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003583;
Simon Pilgrim93986492017-04-18 19:04:40 +00003584; BTVER2-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003585; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003586; BTVER2-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50]
3587; BTVER2-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [6:1.00]
3588; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003589;
3590; ZNVER1-LABEL: test_unpckhps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003591; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003592; ZNVER1-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50]
3593; ZNVER1-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003594; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003595 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
3596 %2 = load <4 x float>, <4 x float> *%a2, align 16
3597 %3 = shufflevector <4 x float> %1, <4 x float> %2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
3598 ret <4 x float> %3
3599}
3600
3601define <4 x float> @test_unpcklps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
3602; GENERIC-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003603; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003604; GENERIC-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
3605; GENERIC-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [7:1.00]
3606; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003607;
3608; ATOM-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003609; ATOM: # %bb.0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003610; ATOM-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
3611; ATOM-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [1:1.00]
3612; ATOM-NEXT: nop # sched: [1:0.50]
3613; ATOM-NEXT: nop # sched: [1:0.50]
3614; ATOM-NEXT: nop # sched: [1:0.50]
3615; ATOM-NEXT: nop # sched: [1:0.50]
3616; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003617;
3618; SLM-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003619; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003620; SLM-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
3621; SLM-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [4:1.00]
3622; SLM-NEXT: retq # sched: [4:1.00]
3623;
3624; SANDY-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003625; SANDY: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003626; SANDY-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00003627; SANDY-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [7:1.00]
3628; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003629;
3630; HASWELL-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003631; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003632; HASWELL-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003633; HASWELL-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [7:1.00]
3634; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003635;
Gadi Haber85d99b42017-10-17 13:45:39 +00003636; BROADWELL-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003637; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003638; BROADWELL-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003639; BROADWELL-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [6:1.00]
3640; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003641;
Gadi Haber767d98b2017-08-30 08:08:50 +00003642; SKYLAKE-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003643; SKYLAKE: # %bb.0:
Gadi Haber767d98b2017-08-30 08:08:50 +00003644; SKYLAKE-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003645; SKYLAKE-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [7:1.00]
3646; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003647;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003648; SKX-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003649; SKX: # %bb.0:
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003650; SKX-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Gadi Haber684944b2017-10-08 12:52:54 +00003651; SKX-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [7:1.00]
3652; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003653;
Simon Pilgrim93986492017-04-18 19:04:40 +00003654; BTVER2-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003655; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003656; BTVER2-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:0.50]
3657; BTVER2-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [6:1.00]
3658; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003659;
3660; ZNVER1-LABEL: test_unpcklps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003661; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003662; ZNVER1-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:0.50]
3663; ZNVER1-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003664; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003665 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
3666 %2 = load <4 x float>, <4 x float> *%a2, align 16
3667 %3 = shufflevector <4 x float> %1, <4 x float> %2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
3668 ret <4 x float> %3
3669}
3670
3671define <4 x float> @test_xorps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
3672; GENERIC-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003673; GENERIC: # %bb.0:
Simon Pilgrim84846982017-08-01 15:14:35 +00003674; GENERIC-NEXT: xorps %xmm1, %xmm0 # sched: [1:1.00]
3675; GENERIC-NEXT: xorps (%rdi), %xmm0 # sched: [7:1.00]
3676; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003677;
3678; ATOM-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003679; ATOM: # %bb.0:
Simon Pilgrim486072d2017-08-01 17:51:20 +00003680; ATOM-NEXT: xorps %xmm1, %xmm0 # sched: [1:0.50]
3681; ATOM-NEXT: xorps (%rdi), %xmm0 # sched: [1:1.00]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00003682; ATOM-NEXT: nop # sched: [1:0.50]
3683; ATOM-NEXT: nop # sched: [1:0.50]
3684; ATOM-NEXT: nop # sched: [1:0.50]
3685; ATOM-NEXT: nop # sched: [1:0.50]
3686; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003687;
3688; SLM-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003689; SLM: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003690; SLM-NEXT: xorps %xmm1, %xmm0 # sched: [1:0.50]
3691; SLM-NEXT: xorps (%rdi), %xmm0 # sched: [4:1.00]
3692; SLM-NEXT: retq # sched: [4:1.00]
3693;
3694; SANDY-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003695; SANDY: # %bb.0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00003696; SANDY-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
3697; SANDY-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
3698; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003699;
3700; HASWELL-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003701; HASWELL: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003702; HASWELL-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Gadi Haber2cf601f2017-12-08 09:48:44 +00003703; HASWELL-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
3704; HASWELL-NEXT: retq # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00003705;
Gadi Haber85d99b42017-10-17 13:45:39 +00003706; BROADWELL-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003707; BROADWELL: # %bb.0:
Gadi Haber85d99b42017-10-17 13:45:39 +00003708; BROADWELL-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Gadi Haber323f2e12017-10-24 20:19:47 +00003709; BROADWELL-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3710; BROADWELL-NEXT: retq # sched: [7:1.00]
Gadi Haber85d99b42017-10-17 13:45:39 +00003711;
Gadi Haber767d98b2017-08-30 08:08:50 +00003712; SKYLAKE-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003713; SKYLAKE: # %bb.0:
Gadi Haber1e0f1f42017-10-17 06:47:04 +00003714; SKYLAKE-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3715; SKYLAKE-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3716; SKYLAKE-NEXT: retq # sched: [7:1.00]
Gadi Haber767d98b2017-08-30 08:08:50 +00003717;
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003718; SKX-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003719; SKX: # %bb.0:
Gadi Haber684944b2017-10-08 12:52:54 +00003720; SKX-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:0.33]
3721; SKX-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [7:0.50]
3722; SKX-NEXT: retq # sched: [7:1.00]
Simon Pilgrima29dbdf2017-10-06 13:40:29 +00003723;
Simon Pilgrim93986492017-04-18 19:04:40 +00003724; BTVER2-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003725; BTVER2: # %bb.0:
Simon Pilgrim93986492017-04-18 19:04:40 +00003726; BTVER2-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
3727; BTVER2-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
3728; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00003729;
3730; ZNVER1-LABEL: test_xorps:
Francis Visoiu Mistrih25528d62017-12-04 17:18:51 +00003731; ZNVER1: # %bb.0:
Craig Topper106b5b62017-07-19 02:45:14 +00003732; ZNVER1-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
3733; ZNVER1-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
Ashutosh Nemabfcac0b2017-08-31 12:38:35 +00003734; ZNVER1-NEXT: retq # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00003735 %1 = bitcast <4 x float> %a0 to <4 x i32>
3736 %2 = bitcast <4 x float> %a1 to <4 x i32>
3737 %3 = xor <4 x i32> %1, %2
3738 %4 = load <4 x float>, <4 x float> *%a2, align 16
3739 %5 = bitcast <4 x float> %4 to <4 x i32>
3740 %6 = xor <4 x i32> %3, %5
3741 %7 = bitcast <4 x i32> %6 to <4 x float>
3742 ret <4 x float> %7
3743}
3744
3745!0 = !{i32 1}