blob: 83b1b532112ce074d20c1c81eee1210deeff84f1 [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
8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL
9; 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 +000010; 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 +000011
12define <4 x float> @test_addps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
13; GENERIC-LABEL: test_addps:
14; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +000015; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
16; GENERIC-NEXT: addps (%rdi), %xmm0 # sched: [9:1.00]
17; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +000018;
19; ATOM-LABEL: test_addps:
20; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +000021; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
22; ATOM-NEXT: addps (%rdi), %xmm0 # sched: [5:5.00]
23; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +000024;
25; SLM-LABEL: test_addps:
26; SLM: # BB#0:
27; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
28; SLM-NEXT: addps (%rdi), %xmm0 # sched: [6:1.00]
29; SLM-NEXT: retq # sched: [4:1.00]
30;
31; SANDY-LABEL: test_addps:
32; SANDY: # BB#0:
33; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +000034; SANDY-NEXT: vaddps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
35; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +000036;
37; HASWELL-LABEL: test_addps:
38; HASWELL: # BB#0:
39; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +000040; HASWELL-NEXT: vaddps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
41; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +000042;
43; BTVER2-LABEL: test_addps:
44; BTVER2: # BB#0:
45; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
46; BTVER2-NEXT: vaddps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
47; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +000048;
49; ZNVER1-LABEL: test_addps:
50; ZNVER1: # BB#0:
51; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
52; ZNVER1-NEXT: vaddps (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
53; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +000054 %1 = fadd <4 x float> %a0, %a1
55 %2 = load <4 x float>, <4 x float> *%a2, align 16
56 %3 = fadd <4 x float> %1, %2
57 ret <4 x float> %3
58}
59
60define float @test_addss(float %a0, float %a1, float *%a2) {
61; GENERIC-LABEL: test_addss:
62; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +000063; GENERIC-NEXT: addss %xmm1, %xmm0 # sched: [3:1.00]
64; GENERIC-NEXT: addss (%rdi), %xmm0 # sched: [9:1.00]
65; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +000066;
67; ATOM-LABEL: test_addss:
68; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +000069; ATOM-NEXT: addss %xmm1, %xmm0 # sched: [5:5.00]
70; ATOM-NEXT: addss (%rdi), %xmm0 # sched: [5:5.00]
71; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +000072;
73; SLM-LABEL: test_addss:
74; SLM: # BB#0:
75; SLM-NEXT: addss %xmm1, %xmm0 # sched: [3:1.00]
76; SLM-NEXT: addss (%rdi), %xmm0 # sched: [6:1.00]
77; SLM-NEXT: retq # sched: [4:1.00]
78;
79; SANDY-LABEL: test_addss:
80; SANDY: # BB#0:
81; SANDY-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +000082; SANDY-NEXT: vaddss (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
83; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +000084;
85; HASWELL-LABEL: test_addss:
86; HASWELL: # BB#0:
87; HASWELL-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +000088; HASWELL-NEXT: vaddss (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
89; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +000090;
91; BTVER2-LABEL: test_addss:
92; BTVER2: # BB#0:
93; BTVER2-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
94; BTVER2-NEXT: vaddss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
95; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +000096;
97; ZNVER1-LABEL: test_addss:
98; ZNVER1: # BB#0:
99; ZNVER1-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
100; ZNVER1-NEXT: vaddss (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
101; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000102 %1 = fadd float %a0, %a1
103 %2 = load float, float *%a2, align 4
104 %3 = fadd float %1, %2
105 ret float %3
106}
107
108define <4 x float> @test_andps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
109; GENERIC-LABEL: test_andps:
110; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000111; GENERIC-NEXT: andps %xmm1, %xmm0 # sched: [1:1.00]
112; GENERIC-NEXT: andps (%rdi), %xmm0 # sched: [7:1.00]
113; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000114;
115; ATOM-LABEL: test_andps:
116; ATOM: # BB#0:
Simon Pilgrim486072d2017-08-01 17:51:20 +0000117; ATOM-NEXT: andps %xmm1, %xmm0 # sched: [1:0.50]
118; ATOM-NEXT: andps (%rdi), %xmm0 # sched: [1:1.00]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000119; ATOM-NEXT: nop # sched: [1:0.50]
120; ATOM-NEXT: nop # sched: [1:0.50]
121; ATOM-NEXT: nop # sched: [1:0.50]
122; ATOM-NEXT: nop # sched: [1:0.50]
123; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000124;
125; SLM-LABEL: test_andps:
126; SLM: # BB#0:
127; SLM-NEXT: andps %xmm1, %xmm0 # sched: [1:0.50]
128; SLM-NEXT: andps (%rdi), %xmm0 # sched: [4:1.00]
129; SLM-NEXT: retq # sched: [4:1.00]
130;
131; SANDY-LABEL: test_andps:
132; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000133; SANDY-NEXT: vandps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
134; SANDY-NEXT: vandps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
135; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000136;
137; HASWELL-LABEL: test_andps:
138; HASWELL: # BB#0:
139; HASWELL-NEXT: vandps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000140; HASWELL-NEXT: vandps (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
141; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000142;
143; BTVER2-LABEL: test_andps:
144; BTVER2: # BB#0:
145; BTVER2-NEXT: vandps %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
146; BTVER2-NEXT: vandps (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
147; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000148;
149; ZNVER1-LABEL: test_andps:
150; ZNVER1: # BB#0:
151; ZNVER1-NEXT: vandps %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
152; ZNVER1-NEXT: vandps (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
153; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000154 %1 = bitcast <4 x float> %a0 to <4 x i32>
155 %2 = bitcast <4 x float> %a1 to <4 x i32>
156 %3 = and <4 x i32> %1, %2
157 %4 = load <4 x float>, <4 x float> *%a2, align 16
158 %5 = bitcast <4 x float> %4 to <4 x i32>
159 %6 = and <4 x i32> %3, %5
160 %7 = bitcast <4 x i32> %6 to <4 x float>
161 ret <4 x float> %7
162}
163
164define <4 x float> @test_andnotps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
165; GENERIC-LABEL: test_andnotps:
166; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000167; GENERIC-NEXT: andnps %xmm1, %xmm0 # sched: [1:1.00]
168; GENERIC-NEXT: andnps (%rdi), %xmm0 # sched: [7:1.00]
169; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000170;
171; ATOM-LABEL: test_andnotps:
172; ATOM: # BB#0:
Simon Pilgrim486072d2017-08-01 17:51:20 +0000173; ATOM-NEXT: andnps %xmm1, %xmm0 # sched: [1:0.50]
174; ATOM-NEXT: andnps (%rdi), %xmm0 # sched: [1:1.00]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000175; ATOM-NEXT: nop # sched: [1:0.50]
176; ATOM-NEXT: nop # sched: [1:0.50]
177; ATOM-NEXT: nop # sched: [1:0.50]
178; ATOM-NEXT: nop # sched: [1:0.50]
179; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000180;
181; SLM-LABEL: test_andnotps:
182; SLM: # BB#0:
183; SLM-NEXT: andnps %xmm1, %xmm0 # sched: [1:0.50]
184; SLM-NEXT: andnps (%rdi), %xmm0 # sched: [4:1.00]
185; SLM-NEXT: retq # sched: [4:1.00]
186;
187; SANDY-LABEL: test_andnotps:
188; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000189; SANDY-NEXT: vandnps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
190; SANDY-NEXT: vandnps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
191; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000192;
193; HASWELL-LABEL: test_andnotps:
194; HASWELL: # BB#0:
195; HASWELL-NEXT: vandnps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000196; HASWELL-NEXT: vandnps (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
197; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000198;
199; BTVER2-LABEL: test_andnotps:
200; BTVER2: # BB#0:
201; BTVER2-NEXT: vandnps %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
202; BTVER2-NEXT: vandnps (%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_andnotps:
206; ZNVER1: # BB#0:
207; ZNVER1-NEXT: vandnps %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
208; ZNVER1-NEXT: vandnps (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
209; ZNVER1-NEXT: retq # sched: [5: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 = xor <4 x i32> %1, <i32 -1, i32 -1, i32 -1, i32 -1>
213 %4 = and <4 x i32> %3, %2
214 %5 = load <4 x float>, <4 x float> *%a2, align 16
215 %6 = bitcast <4 x float> %5 to <4 x i32>
216 %7 = xor <4 x i32> %4, <i32 -1, i32 -1, i32 -1, i32 -1>
217 %8 = and <4 x i32> %6, %7
218 %9 = bitcast <4 x i32> %8 to <4 x float>
219 ret <4 x float> %9
220}
221
222define <4 x float> @test_cmpps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
223; GENERIC-LABEL: test_cmpps:
224; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000225; GENERIC-NEXT: cmpeqps %xmm0, %xmm1 # sched: [3:1.00]
226; GENERIC-NEXT: cmpeqps (%rdi), %xmm0 # sched: [9:1.00]
227; GENERIC-NEXT: orps %xmm1, %xmm0 # sched: [1:1.00]
228; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000229;
230; ATOM-LABEL: test_cmpps:
231; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000232; ATOM-NEXT: cmpeqps %xmm0, %xmm1 # sched: [5:5.00]
233; ATOM-NEXT: cmpeqps (%rdi), %xmm0 # sched: [5:5.00]
Simon Pilgrim486072d2017-08-01 17:51:20 +0000234; ATOM-NEXT: orps %xmm1, %xmm0 # sched: [1:0.50]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000235; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000236;
237; SLM-LABEL: test_cmpps:
238; SLM: # BB#0:
239; SLM-NEXT: cmpeqps %xmm0, %xmm1 # sched: [3:1.00]
240; SLM-NEXT: cmpeqps (%rdi), %xmm0 # sched: [6:1.00]
241; SLM-NEXT: orps %xmm1, %xmm0 # sched: [1:0.50]
242; SLM-NEXT: retq # sched: [4:1.00]
243;
244; SANDY-LABEL: test_cmpps:
245; SANDY: # BB#0:
246; SANDY-NEXT: vcmpeqps %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000247; SANDY-NEXT: vcmpeqps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
248; SANDY-NEXT: vorps %xmm0, %xmm1, %xmm0 # sched: [1:1.00]
249; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000250;
251; HASWELL-LABEL: test_cmpps:
252; HASWELL: # BB#0:
253; HASWELL-NEXT: vcmpeqps %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000254; HASWELL-NEXT: vcmpeqps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000255; HASWELL-NEXT: vorps %xmm0, %xmm1, %xmm0 # sched: [1:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000256; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000257;
258; BTVER2-LABEL: test_cmpps:
259; BTVER2: # BB#0:
260; BTVER2-NEXT: vcmpeqps %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
261; BTVER2-NEXT: vcmpeqps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
262; BTVER2-NEXT: vorps %xmm0, %xmm1, %xmm0 # sched: [1:0.50]
263; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000264;
265; ZNVER1-LABEL: test_cmpps:
266; ZNVER1: # BB#0:
267; ZNVER1-NEXT: vcmpeqps %xmm1, %xmm0, %xmm1 # sched: [3:1.00]
268; ZNVER1-NEXT: vcmpeqps (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
269; ZNVER1-NEXT: vorps %xmm0, %xmm1, %xmm0 # sched: [1:0.25]
270; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000271 %1 = fcmp oeq <4 x float> %a0, %a1
272 %2 = load <4 x float>, <4 x float> *%a2, align 16
273 %3 = fcmp oeq <4 x float> %a0, %2
274 %4 = or <4 x i1> %1, %3
275 %5 = sext <4 x i1> %4 to <4 x i32>
276 %6 = bitcast <4 x i32> %5 to <4 x float>
277 ret <4 x float> %6
278}
279
280define float @test_cmpss(float %a0, float %a1, float *%a2) {
281; GENERIC-LABEL: test_cmpss:
282; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000283; GENERIC-NEXT: cmpeqss %xmm1, %xmm0 # sched: [3:1.00]
284; GENERIC-NEXT: cmpeqss (%rdi), %xmm0 # sched: [7:1.00]
285; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000286;
287; ATOM-LABEL: test_cmpss:
288; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000289; ATOM-NEXT: cmpeqss %xmm1, %xmm0 # sched: [5:5.00]
290; ATOM-NEXT: cmpeqss (%rdi), %xmm0 # sched: [5:5.00]
291; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000292;
293; SLM-LABEL: test_cmpss:
294; SLM: # BB#0:
295; SLM-NEXT: cmpeqss %xmm1, %xmm0 # sched: [3:1.00]
296; SLM-NEXT: cmpeqss (%rdi), %xmm0 # sched: [6:1.00]
297; SLM-NEXT: retq # sched: [4:1.00]
298;
299; SANDY-LABEL: test_cmpss:
300; SANDY: # BB#0:
301; SANDY-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
302; SANDY-NEXT: vcmpeqss (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000303; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000304;
305; HASWELL-LABEL: test_cmpss:
306; HASWELL: # BB#0:
307; HASWELL-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
308; HASWELL-NEXT: vcmpeqss (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000309; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000310;
311; BTVER2-LABEL: test_cmpss:
312; BTVER2: # BB#0:
313; BTVER2-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
314; BTVER2-NEXT: vcmpeqss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
315; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000316;
317; ZNVER1-LABEL: test_cmpss:
318; ZNVER1: # BB#0:
319; ZNVER1-NEXT: vcmpeqss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
320; ZNVER1-NEXT: vcmpeqss (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
321; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000322 %1 = insertelement <4 x float> undef, float %a0, i32 0
323 %2 = insertelement <4 x float> undef, float %a1, i32 0
324 %3 = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %1, <4 x float> %2, i8 0)
325 %4 = load float, float *%a2, align 4
326 %5 = insertelement <4 x float> undef, float %4, i32 0
327 %6 = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %3, <4 x float> %5, i8 0)
328 %7 = extractelement <4 x float> %6, i32 0
329 ret float %7
330}
331declare <4 x float> @llvm.x86.sse.cmp.ss(<4 x float>, <4 x float>, i8) nounwind readnone
332
333define i32 @test_comiss(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
334; GENERIC-LABEL: test_comiss:
335; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000336; GENERIC-NEXT: comiss %xmm1, %xmm0 # sched: [3:1.00]
337; GENERIC-NEXT: setnp %al # sched: [1:1.00]
338; GENERIC-NEXT: sete %cl # sched: [1:1.00]
339; GENERIC-NEXT: andb %al, %cl # sched: [1:0.33]
340; GENERIC-NEXT: comiss (%rdi), %xmm0 # sched: [7:1.00]
341; GENERIC-NEXT: setnp %al # sched: [1:1.00]
342; GENERIC-NEXT: sete %dl # sched: [1:1.00]
343; GENERIC-NEXT: andb %al, %dl # sched: [1:0.33]
344; GENERIC-NEXT: orb %cl, %dl # sched: [1:0.33]
345; GENERIC-NEXT: movzbl %dl, %eax # sched: [1:0.33]
346; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000347;
348; ATOM-LABEL: test_comiss:
349; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000350; ATOM-NEXT: comiss %xmm1, %xmm0 # sched: [9:4.50]
351; ATOM-NEXT: setnp %al # sched: [1:0.50]
352; ATOM-NEXT: sete %cl # sched: [1:0.50]
353; ATOM-NEXT: andb %al, %cl # sched: [1:0.50]
354; ATOM-NEXT: comiss (%rdi), %xmm0 # sched: [10:5.00]
355; ATOM-NEXT: setnp %al # sched: [1:0.50]
356; ATOM-NEXT: sete %dl # sched: [1:0.50]
357; ATOM-NEXT: andb %al, %dl # sched: [1:0.50]
358; ATOM-NEXT: orb %cl, %dl # sched: [1:0.50]
359; ATOM-NEXT: movzbl %dl, %eax # sched: [1:1.00]
360; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000361;
362; SLM-LABEL: test_comiss:
363; SLM: # BB#0:
364; SLM-NEXT: comiss %xmm1, %xmm0 # sched: [3:1.00]
365; SLM-NEXT: setnp %al # sched: [1:0.50]
366; SLM-NEXT: sete %cl # sched: [1:0.50]
367; SLM-NEXT: andb %al, %cl # sched: [1:0.50]
368; SLM-NEXT: comiss (%rdi), %xmm0 # sched: [6:1.00]
369; SLM-NEXT: setnp %al # sched: [1:0.50]
370; SLM-NEXT: sete %dl # sched: [1:0.50]
371; SLM-NEXT: andb %al, %dl # sched: [1:0.50]
372; SLM-NEXT: orb %cl, %dl # sched: [1:0.50]
373; SLM-NEXT: movzbl %dl, %eax # sched: [1:0.50]
374; SLM-NEXT: retq # sched: [4:1.00]
375;
376; SANDY-LABEL: test_comiss:
377; SANDY: # BB#0:
378; SANDY-NEXT: vcomiss %xmm1, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000379; SANDY-NEXT: setnp %al # sched: [1:1.00]
380; SANDY-NEXT: sete %cl # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000381; SANDY-NEXT: andb %al, %cl # sched: [1:0.33]
382; SANDY-NEXT: vcomiss (%rdi), %xmm0 # sched: [7:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000383; SANDY-NEXT: setnp %al # sched: [1:1.00]
384; SANDY-NEXT: sete %dl # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000385; SANDY-NEXT: andb %al, %dl # sched: [1:0.33]
386; SANDY-NEXT: orb %cl, %dl # sched: [1:0.33]
387; SANDY-NEXT: movzbl %dl, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000388; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000389;
390; HASWELL-LABEL: test_comiss:
391; HASWELL: # BB#0:
392; HASWELL-NEXT: vcomiss %xmm1, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000393; HASWELL-NEXT: setnp %al # sched: [1:0.50]
394; HASWELL-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000395; HASWELL-NEXT: andb %al, %cl # sched: [1:0.25]
396; HASWELL-NEXT: vcomiss (%rdi), %xmm0 # sched: [7:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000397; HASWELL-NEXT: setnp %al # sched: [1:0.50]
398; HASWELL-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000399; HASWELL-NEXT: andb %al, %dl # sched: [1:0.25]
400; HASWELL-NEXT: orb %cl, %dl # sched: [1:0.25]
401; HASWELL-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000402; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000403;
404; BTVER2-LABEL: test_comiss:
405; BTVER2: # BB#0:
406; BTVER2-NEXT: vcomiss %xmm1, %xmm0 # sched: [3:1.00]
407; BTVER2-NEXT: setnp %al # sched: [1:0.50]
408; BTVER2-NEXT: sete %cl # sched: [1:0.50]
409; BTVER2-NEXT: andb %al, %cl # sched: [1:0.50]
410; BTVER2-NEXT: vcomiss (%rdi), %xmm0 # sched: [8:1.00]
411; BTVER2-NEXT: setnp %al # sched: [1:0.50]
412; BTVER2-NEXT: sete %dl # sched: [1:0.50]
413; BTVER2-NEXT: andb %al, %dl # sched: [1:0.50]
414; BTVER2-NEXT: orb %cl, %dl # sched: [1:0.50]
415; BTVER2-NEXT: movzbl %dl, %eax # sched: [1:0.50]
416; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000417;
418; ZNVER1-LABEL: test_comiss:
419; ZNVER1: # BB#0:
420; ZNVER1-NEXT: vcomiss %xmm1, %xmm0 # sched: [3:1.00]
421; ZNVER1-NEXT: setnp %al # sched: [1:0.25]
422; ZNVER1-NEXT: sete %cl # sched: [1:0.25]
423; ZNVER1-NEXT: andb %al, %cl # sched: [1:0.25]
424; ZNVER1-NEXT: vcomiss (%rdi), %xmm0 # sched: [10:1.00]
425; ZNVER1-NEXT: setnp %al # sched: [1:0.25]
426; ZNVER1-NEXT: sete %dl # sched: [1:0.25]
427; ZNVER1-NEXT: andb %al, %dl # sched: [1:0.25]
428; ZNVER1-NEXT: orb %cl, %dl # sched: [1:0.25]
429; ZNVER1-NEXT: movzbl %dl, %eax # sched: [1:0.25]
430; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000431 %1 = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %a1)
432 %2 = load <4 x float>, <4 x float> *%a2, align 4
433 %3 = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %2)
434 %4 = or i32 %1, %3
435 ret i32 %4
436}
437declare i32 @llvm.x86.sse.comieq.ss(<4 x float>, <4 x float>) nounwind readnone
438
439define float @test_cvtsi2ss(i32 %a0, i32 *%a1) {
440; GENERIC-LABEL: test_cvtsi2ss:
441; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000442; GENERIC-NEXT: cvtsi2ssl %edi, %xmm1 # sched: [5:2.00]
443; GENERIC-NEXT: cvtsi2ssl (%rsi), %xmm0 # sched: [10:1.00]
444; GENERIC-NEXT: addss %xmm1, %xmm0 # sched: [3:1.00]
445; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000446;
447; ATOM-LABEL: test_cvtsi2ss:
448; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000449; ATOM-NEXT: cvtsi2ssl (%rsi), %xmm0 # sched: [7:3.50]
450; ATOM-NEXT: cvtsi2ssl %edi, %xmm1 # sched: [6:3.00]
451; ATOM-NEXT: addss %xmm1, %xmm0 # sched: [5:5.00]
452; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000453;
454; SLM-LABEL: test_cvtsi2ss:
455; SLM: # BB#0:
456; SLM-NEXT: cvtsi2ssl (%rsi), %xmm0 # sched: [7:1.00]
457; SLM-NEXT: cvtsi2ssl %edi, %xmm1 # sched: [4:0.50]
458; SLM-NEXT: addss %xmm1, %xmm0 # sched: [3:1.00]
459; SLM-NEXT: retq # sched: [4:1.00]
460;
461; SANDY-LABEL: test_cvtsi2ss:
462; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000463; SANDY-NEXT: vcvtsi2ssl %edi, %xmm0, %xmm0 # sched: [5:2.00]
464; SANDY-NEXT: vcvtsi2ssl (%rsi), %xmm1, %xmm1 # sched: [10:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000465; SANDY-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000466; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000467;
468; HASWELL-LABEL: test_cvtsi2ss:
469; HASWELL: # BB#0:
470; HASWELL-NEXT: vcvtsi2ssl %edi, %xmm0, %xmm0 # sched: [4:1.00]
471; HASWELL-NEXT: vcvtsi2ssl (%rsi), %xmm1, %xmm1 # sched: [8:1.00]
472; HASWELL-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000473; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000474;
475; BTVER2-LABEL: test_cvtsi2ss:
476; BTVER2: # BB#0:
477; BTVER2-NEXT: vcvtsi2ssl %edi, %xmm0, %xmm0 # sched: [3:1.00]
478; BTVER2-NEXT: vcvtsi2ssl (%rsi), %xmm1, %xmm1 # sched: [8:1.00]
479; BTVER2-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
480; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000481;
482; ZNVER1-LABEL: test_cvtsi2ss:
483; ZNVER1: # BB#0:
484; ZNVER1-NEXT: vcvtsi2ssl %edi, %xmm0, %xmm0 # sched: [5:1.00]
485; ZNVER1-NEXT: vcvtsi2ssl (%rsi), %xmm1, %xmm1 # sched: [12:1.00]
486; ZNVER1-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
487; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000488 %1 = sitofp i32 %a0 to float
489 %2 = load i32, i32 *%a1, align 4
490 %3 = sitofp i32 %2 to float
491 %4 = fadd float %1, %3
492 ret float %4
493}
494
495define float @test_cvtsi2ssq(i64 %a0, i64 *%a1) {
496; GENERIC-LABEL: test_cvtsi2ssq:
497; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000498; GENERIC-NEXT: cvtsi2ssq %rdi, %xmm1 # sched: [5:2.00]
499; GENERIC-NEXT: cvtsi2ssq (%rsi), %xmm0 # sched: [10:1.00]
500; GENERIC-NEXT: addss %xmm1, %xmm0 # sched: [3:1.00]
501; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000502;
503; ATOM-LABEL: test_cvtsi2ssq:
504; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000505; ATOM-NEXT: cvtsi2ssq (%rsi), %xmm0 # sched: [7:3.50]
506; ATOM-NEXT: cvtsi2ssq %rdi, %xmm1 # sched: [6:3.00]
507; ATOM-NEXT: addss %xmm1, %xmm0 # sched: [5:5.00]
508; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000509;
510; SLM-LABEL: test_cvtsi2ssq:
511; SLM: # BB#0:
512; SLM-NEXT: cvtsi2ssq (%rsi), %xmm0 # sched: [7:1.00]
513; SLM-NEXT: cvtsi2ssq %rdi, %xmm1 # sched: [4:0.50]
514; SLM-NEXT: addss %xmm1, %xmm0 # sched: [3:1.00]
515; SLM-NEXT: retq # sched: [4:1.00]
516;
517; SANDY-LABEL: test_cvtsi2ssq:
518; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000519; SANDY-NEXT: vcvtsi2ssq %rdi, %xmm0, %xmm0 # sched: [5:2.00]
520; SANDY-NEXT: vcvtsi2ssq (%rsi), %xmm1, %xmm1 # sched: [10:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000521; SANDY-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000522; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000523;
524; HASWELL-LABEL: test_cvtsi2ssq:
525; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +0000526; HASWELL-NEXT: vcvtsi2ssq %rdi, %xmm0, %xmm0 # sched: [4:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000527; HASWELL-NEXT: vcvtsi2ssq (%rsi), %xmm1, %xmm1 # sched: [8:1.00]
528; HASWELL-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000529; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000530;
531; BTVER2-LABEL: test_cvtsi2ssq:
532; BTVER2: # BB#0:
533; BTVER2-NEXT: vcvtsi2ssq %rdi, %xmm0, %xmm0 # sched: [3:1.00]
534; BTVER2-NEXT: vcvtsi2ssq (%rsi), %xmm1, %xmm1 # sched: [8:1.00]
535; BTVER2-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
536; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000537;
538; ZNVER1-LABEL: test_cvtsi2ssq:
539; ZNVER1: # BB#0:
540; ZNVER1-NEXT: vcvtsi2ssq %rdi, %xmm0, %xmm0 # sched: [5:1.00]
541; ZNVER1-NEXT: vcvtsi2ssq (%rsi), %xmm1, %xmm1 # sched: [12:1.00]
542; ZNVER1-NEXT: vaddss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
543; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000544 %1 = sitofp i64 %a0 to float
545 %2 = load i64, i64 *%a1, align 8
546 %3 = sitofp i64 %2 to float
547 %4 = fadd float %1, %3
548 ret float %4
549}
550
551define i32 @test_cvtss2si(float %a0, float *%a1) {
552; GENERIC-LABEL: test_cvtss2si:
553; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000554; GENERIC-NEXT: cvtss2si %xmm0, %ecx # sched: [5:1.00]
555; GENERIC-NEXT: cvtss2si (%rdi), %eax # sched: [9:1.00]
556; GENERIC-NEXT: addl %ecx, %eax # sched: [1:0.33]
557; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000558;
559; ATOM-LABEL: test_cvtss2si:
560; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000561; ATOM-NEXT: cvtss2si (%rdi), %eax # sched: [9:4.50]
562; ATOM-NEXT: cvtss2si %xmm0, %ecx # sched: [8:4.00]
563; ATOM-NEXT: addl %ecx, %eax # sched: [1:0.50]
564; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000565;
566; SLM-LABEL: test_cvtss2si:
567; SLM: # BB#0:
568; SLM-NEXT: cvtss2si (%rdi), %eax # sched: [7:1.00]
569; SLM-NEXT: cvtss2si %xmm0, %ecx # sched: [4:0.50]
570; SLM-NEXT: addl %ecx, %eax # sched: [1:0.50]
571; SLM-NEXT: retq # sched: [4:1.00]
572;
573; SANDY-LABEL: test_cvtss2si:
574; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000575; SANDY-NEXT: vcvtss2si %xmm0, %ecx # sched: [5:1.00]
576; SANDY-NEXT: vcvtss2si (%rdi), %eax # sched: [10:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000577; SANDY-NEXT: addl %ecx, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000578; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000579;
580; HASWELL-LABEL: test_cvtss2si:
581; HASWELL: # BB#0:
582; HASWELL-NEXT: vcvtss2si %xmm0, %ecx # sched: [4:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000583; HASWELL-NEXT: vcvtss2si (%rdi), %eax # sched: [8:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000584; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000585; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000586;
587; BTVER2-LABEL: test_cvtss2si:
588; BTVER2: # BB#0:
589; BTVER2-NEXT: vcvtss2si (%rdi), %eax # sched: [8:1.00]
590; BTVER2-NEXT: vcvtss2si %xmm0, %ecx # sched: [3:1.00]
591; BTVER2-NEXT: addl %ecx, %eax # sched: [1:0.50]
592; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000593;
594; ZNVER1-LABEL: test_cvtss2si:
595; ZNVER1: # BB#0:
596; ZNVER1-NEXT: vcvtss2si (%rdi), %eax # sched: [12:1.00]
597; ZNVER1-NEXT: vcvtss2si %xmm0, %ecx # sched: [5:1.00]
598; ZNVER1-NEXT: addl %ecx, %eax # sched: [1:0.25]
599; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000600 %1 = insertelement <4 x float> undef, float %a0, i32 0
601 %2 = call i32 @llvm.x86.sse.cvtss2si(<4 x float> %1)
602 %3 = load float, float *%a1, align 4
603 %4 = insertelement <4 x float> undef, float %3, i32 0
604 %5 = call i32 @llvm.x86.sse.cvtss2si(<4 x float> %4)
605 %6 = add i32 %2, %5
606 ret i32 %6
607}
608declare i32 @llvm.x86.sse.cvtss2si(<4 x float>) nounwind readnone
609
610define i64 @test_cvtss2siq(float %a0, float *%a1) {
611; GENERIC-LABEL: test_cvtss2siq:
612; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000613; GENERIC-NEXT: cvtss2si %xmm0, %rcx # sched: [5:1.00]
614; GENERIC-NEXT: cvtss2si (%rdi), %rax # sched: [9:1.00]
615; GENERIC-NEXT: addq %rcx, %rax # sched: [1:0.33]
616; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000617;
618; ATOM-LABEL: test_cvtss2siq:
619; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000620; ATOM-NEXT: cvtss2si (%rdi), %rax # sched: [10:5.00]
621; ATOM-NEXT: cvtss2si %xmm0, %rcx # sched: [9:4.50]
622; ATOM-NEXT: addq %rcx, %rax # sched: [1:0.50]
623; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000624;
625; SLM-LABEL: test_cvtss2siq:
626; SLM: # BB#0:
627; SLM-NEXT: cvtss2si (%rdi), %rax # sched: [7:1.00]
628; SLM-NEXT: cvtss2si %xmm0, %rcx # sched: [4:0.50]
629; SLM-NEXT: addq %rcx, %rax # sched: [1:0.50]
630; SLM-NEXT: retq # sched: [4:1.00]
631;
632; SANDY-LABEL: test_cvtss2siq:
633; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000634; SANDY-NEXT: vcvtss2si %xmm0, %rcx # sched: [5:1.00]
635; SANDY-NEXT: vcvtss2si (%rdi), %rax # sched: [10:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000636; SANDY-NEXT: addq %rcx, %rax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000637; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000638;
639; HASWELL-LABEL: test_cvtss2siq:
640; HASWELL: # BB#0:
641; HASWELL-NEXT: vcvtss2si %xmm0, %rcx # sched: [4:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000642; HASWELL-NEXT: vcvtss2si (%rdi), %rax # sched: [8:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000643; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000644; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000645;
646; BTVER2-LABEL: test_cvtss2siq:
647; BTVER2: # BB#0:
648; BTVER2-NEXT: vcvtss2si (%rdi), %rax # sched: [8:1.00]
649; BTVER2-NEXT: vcvtss2si %xmm0, %rcx # sched: [3:1.00]
650; BTVER2-NEXT: addq %rcx, %rax # sched: [1:0.50]
651; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000652;
653; ZNVER1-LABEL: test_cvtss2siq:
654; ZNVER1: # BB#0:
655; ZNVER1-NEXT: vcvtss2si (%rdi), %rax # sched: [12:1.00]
656; ZNVER1-NEXT: vcvtss2si %xmm0, %rcx # sched: [5:1.00]
657; ZNVER1-NEXT: addq %rcx, %rax # sched: [1:0.25]
658; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000659 %1 = insertelement <4 x float> undef, float %a0, i32 0
660 %2 = call i64 @llvm.x86.sse.cvtss2si64(<4 x float> %1)
661 %3 = load float, float *%a1, align 4
662 %4 = insertelement <4 x float> undef, float %3, i32 0
663 %5 = call i64 @llvm.x86.sse.cvtss2si64(<4 x float> %4)
664 %6 = add i64 %2, %5
665 ret i64 %6
666}
667declare i64 @llvm.x86.sse.cvtss2si64(<4 x float>) nounwind readnone
668
669define i32 @test_cvttss2si(float %a0, float *%a1) {
670; GENERIC-LABEL: test_cvttss2si:
671; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000672; GENERIC-NEXT: cvttss2si %xmm0, %ecx # sched: [5:1.00]
673; GENERIC-NEXT: cvttss2si (%rdi), %eax # sched: [9:1.00]
674; GENERIC-NEXT: addl %ecx, %eax # sched: [1:0.33]
675; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000676;
677; ATOM-LABEL: test_cvttss2si:
678; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000679; ATOM-NEXT: cvttss2si (%rdi), %eax # sched: [9:4.50]
680; ATOM-NEXT: cvttss2si %xmm0, %ecx # sched: [8:4.00]
681; ATOM-NEXT: addl %ecx, %eax # sched: [1:0.50]
682; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000683;
684; SLM-LABEL: test_cvttss2si:
685; SLM: # BB#0:
686; SLM-NEXT: cvttss2si (%rdi), %eax # sched: [7:1.00]
687; SLM-NEXT: cvttss2si %xmm0, %ecx # sched: [4:0.50]
688; SLM-NEXT: addl %ecx, %eax # sched: [1:0.50]
689; SLM-NEXT: retq # sched: [4:1.00]
690;
691; SANDY-LABEL: test_cvttss2si:
692; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000693; SANDY-NEXT: vcvttss2si %xmm0, %ecx # sched: [5:1.00]
694; SANDY-NEXT: vcvttss2si (%rdi), %eax # sched: [10:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000695; SANDY-NEXT: addl %ecx, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000696; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000697;
698; HASWELL-LABEL: test_cvttss2si:
699; HASWELL: # BB#0:
700; HASWELL-NEXT: vcvttss2si %xmm0, %ecx # sched: [4:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000701; HASWELL-NEXT: vcvttss2si (%rdi), %eax # sched: [8:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000702; HASWELL-NEXT: addl %ecx, %eax # sched: [1:0.25]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000703; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000704;
705; BTVER2-LABEL: test_cvttss2si:
706; BTVER2: # BB#0:
707; BTVER2-NEXT: vcvttss2si (%rdi), %eax # sched: [8:1.00]
708; BTVER2-NEXT: vcvttss2si %xmm0, %ecx # sched: [3:1.00]
709; BTVER2-NEXT: addl %ecx, %eax # sched: [1:0.50]
710; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000711;
712; ZNVER1-LABEL: test_cvttss2si:
713; ZNVER1: # BB#0:
714; ZNVER1-NEXT: vcvttss2si (%rdi), %eax # sched: [12:1.00]
715; ZNVER1-NEXT: vcvttss2si %xmm0, %ecx # sched: [5:1.00]
716; ZNVER1-NEXT: addl %ecx, %eax # sched: [1:0.25]
717; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000718 %1 = fptosi float %a0 to i32
719 %2 = load float, float *%a1, align 4
720 %3 = fptosi float %2 to i32
721 %4 = add i32 %1, %3
722 ret i32 %4
723}
724
725define i64 @test_cvttss2siq(float %a0, float *%a1) {
726; GENERIC-LABEL: test_cvttss2siq:
727; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000728; GENERIC-NEXT: cvttss2si %xmm0, %rcx # sched: [5:1.00]
729; GENERIC-NEXT: cvttss2si (%rdi), %rax # sched: [9:1.00]
730; GENERIC-NEXT: addq %rcx, %rax # sched: [1:0.33]
731; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000732;
733; ATOM-LABEL: test_cvttss2siq:
734; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000735; ATOM-NEXT: cvttss2si (%rdi), %rax # sched: [10:5.00]
736; ATOM-NEXT: cvttss2si %xmm0, %rcx # sched: [9:4.50]
737; ATOM-NEXT: addq %rcx, %rax # sched: [1:0.50]
738; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000739;
740; SLM-LABEL: test_cvttss2siq:
741; SLM: # BB#0:
742; SLM-NEXT: cvttss2si (%rdi), %rax # sched: [7:1.00]
743; SLM-NEXT: cvttss2si %xmm0, %rcx # sched: [4:0.50]
744; SLM-NEXT: addq %rcx, %rax # sched: [1:0.50]
745; SLM-NEXT: retq # sched: [4:1.00]
746;
747; SANDY-LABEL: test_cvttss2siq:
748; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000749; SANDY-NEXT: vcvttss2si %xmm0, %rcx # sched: [5:1.00]
750; SANDY-NEXT: vcvttss2si (%rdi), %rax # sched: [10:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000751; SANDY-NEXT: addq %rcx, %rax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000752; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000753;
754; HASWELL-LABEL: test_cvttss2siq:
755; HASWELL: # BB#0:
756; HASWELL-NEXT: vcvttss2si %xmm0, %rcx # sched: [4:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000757; HASWELL-NEXT: vcvttss2si (%rdi), %rax # sched: [8:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000758; HASWELL-NEXT: addq %rcx, %rax # sched: [1:0.25]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000759; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000760;
761; BTVER2-LABEL: test_cvttss2siq:
762; BTVER2: # BB#0:
763; BTVER2-NEXT: vcvttss2si (%rdi), %rax # sched: [8:1.00]
764; BTVER2-NEXT: vcvttss2si %xmm0, %rcx # sched: [3:1.00]
765; BTVER2-NEXT: addq %rcx, %rax # sched: [1:0.50]
766; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000767;
768; ZNVER1-LABEL: test_cvttss2siq:
769; ZNVER1: # BB#0:
770; ZNVER1-NEXT: vcvttss2si (%rdi), %rax # sched: [12:1.00]
771; ZNVER1-NEXT: vcvttss2si %xmm0, %rcx # sched: [5:1.00]
772; ZNVER1-NEXT: addq %rcx, %rax # sched: [1:0.25]
773; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000774 %1 = fptosi float %a0 to i64
775 %2 = load float, float *%a1, align 4
776 %3 = fptosi float %2 to i64
777 %4 = add i64 %1, %3
778 ret i64 %4
779}
780
781define <4 x float> @test_divps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
782; GENERIC-LABEL: test_divps:
783; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000784; GENERIC-NEXT: divps %xmm1, %xmm0 # sched: [14:1.00]
785; GENERIC-NEXT: divps (%rdi), %xmm0 # sched: [20:1.00]
786; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000787;
788; ATOM-LABEL: test_divps:
789; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000790; ATOM-NEXT: divps %xmm1, %xmm0 # sched: [70:35.00]
791; ATOM-NEXT: divps (%rdi), %xmm0 # sched: [125:62.50]
792; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000793;
794; SLM-LABEL: test_divps:
795; SLM: # BB#0:
796; SLM-NEXT: divps %xmm1, %xmm0 # sched: [34:34.00]
797; SLM-NEXT: divps (%rdi), %xmm0 # sched: [37:34.00]
798; SLM-NEXT: retq # sched: [4:1.00]
799;
800; SANDY-LABEL: test_divps:
801; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000802; SANDY-NEXT: vdivps %xmm1, %xmm0, %xmm0 # sched: [14:1.00]
803; SANDY-NEXT: vdivps (%rdi), %xmm0, %xmm0 # sched: [20:1.00]
804; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000805;
806; HASWELL-LABEL: test_divps:
807; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +0000808; HASWELL-NEXT: vdivps %xmm1, %xmm0, %xmm0 # sched: [12:1.00]
809; HASWELL-NEXT: vdivps (%rdi), %xmm0, %xmm0 # sched: [16:1.00]
810; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000811;
812; BTVER2-LABEL: test_divps:
813; BTVER2: # BB#0:
814; BTVER2-NEXT: vdivps %xmm1, %xmm0, %xmm0 # sched: [19:19.00]
815; BTVER2-NEXT: vdivps (%rdi), %xmm0, %xmm0 # sched: [24:19.00]
816; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000817;
818; ZNVER1-LABEL: test_divps:
819; ZNVER1: # BB#0:
820; ZNVER1-NEXT: vdivps %xmm1, %xmm0, %xmm0 # sched: [15:1.00]
821; ZNVER1-NEXT: vdivps (%rdi), %xmm0, %xmm0 # sched: [22:1.00]
822; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000823 %1 = fdiv <4 x float> %a0, %a1
824 %2 = load <4 x float>, <4 x float> *%a2, align 16
825 %3 = fdiv <4 x float> %1, %2
826 ret <4 x float> %3
827}
828
829define float @test_divss(float %a0, float %a1, float *%a2) {
830; GENERIC-LABEL: test_divss:
831; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000832; GENERIC-NEXT: divss %xmm1, %xmm0 # sched: [14:1.00]
833; GENERIC-NEXT: divss (%rdi), %xmm0 # sched: [20:1.00]
834; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000835;
836; ATOM-LABEL: test_divss:
837; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000838; ATOM-NEXT: divss %xmm1, %xmm0 # sched: [34:17.00]
839; ATOM-NEXT: divss (%rdi), %xmm0 # sched: [62:31.00]
840; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000841;
842; SLM-LABEL: test_divss:
843; SLM: # BB#0:
844; SLM-NEXT: divss %xmm1, %xmm0 # sched: [34:34.00]
845; SLM-NEXT: divss (%rdi), %xmm0 # sched: [37:34.00]
846; SLM-NEXT: retq # sched: [4:1.00]
847;
848; SANDY-LABEL: test_divss:
849; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +0000850; SANDY-NEXT: vdivss %xmm1, %xmm0, %xmm0 # sched: [14:1.00]
851; SANDY-NEXT: vdivss (%rdi), %xmm0, %xmm0 # sched: [20:1.00]
852; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000853;
854; HASWELL-LABEL: test_divss:
855; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +0000856; HASWELL-NEXT: vdivss %xmm1, %xmm0, %xmm0 # sched: [12:1.00]
857; HASWELL-NEXT: vdivss (%rdi), %xmm0, %xmm0 # sched: [16:1.00]
858; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000859;
860; BTVER2-LABEL: test_divss:
861; BTVER2: # BB#0:
862; BTVER2-NEXT: vdivss %xmm1, %xmm0, %xmm0 # sched: [19:19.00]
863; BTVER2-NEXT: vdivss (%rdi), %xmm0, %xmm0 # sched: [24:19.00]
864; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000865;
866; ZNVER1-LABEL: test_divss:
867; ZNVER1: # BB#0:
868; ZNVER1-NEXT: vdivss %xmm1, %xmm0, %xmm0 # sched: [15:1.00]
869; ZNVER1-NEXT: vdivss (%rdi), %xmm0, %xmm0 # sched: [22:1.00]
870; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000871 %1 = fdiv float %a0, %a1
872 %2 = load float, float *%a2, align 4
873 %3 = fdiv float %1, %2
874 ret float %3
875}
876
877define void @test_ldmxcsr(i32 %a0) {
878; GENERIC-LABEL: test_ldmxcsr:
879; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000880; GENERIC-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
881; GENERIC-NEXT: ldmxcsr -{{[0-9]+}}(%rsp) # sched: [5:1.00]
882; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000883;
884; ATOM-LABEL: test_ldmxcsr:
885; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000886; ATOM-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
887; ATOM-NEXT: ldmxcsr -{{[0-9]+}}(%rsp) # sched: [5:2.50]
888; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000889;
890; SLM-LABEL: test_ldmxcsr:
891; SLM: # BB#0:
892; SLM-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
893; SLM-NEXT: ldmxcsr -{{[0-9]+}}(%rsp) # sched: [3:1.00]
894; SLM-NEXT: retq # sched: [4:1.00]
895;
896; SANDY-LABEL: test_ldmxcsr:
897; SANDY: # BB#0:
898; SANDY-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000899; SANDY-NEXT: vldmxcsr -{{[0-9]+}}(%rsp) # sched: [5:1.00]
900; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000901;
902; HASWELL-LABEL: test_ldmxcsr:
903; HASWELL: # BB#0:
904; HASWELL-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000905; HASWELL-NEXT: vldmxcsr -{{[0-9]+}}(%rsp) # sched: [6:1.00]
906; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000907;
908; BTVER2-LABEL: test_ldmxcsr:
909; BTVER2: # BB#0:
910; BTVER2-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:1.00]
911; BTVER2-NEXT: vldmxcsr -{{[0-9]+}}(%rsp) # sched: [5:1.00]
912; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000913;
914; ZNVER1-LABEL: test_ldmxcsr:
915; ZNVER1: # BB#0:
916; ZNVER1-NEXT: movl %edi, -{{[0-9]+}}(%rsp) # sched: [1:0.50]
917; ZNVER1-NEXT: vldmxcsr -{{[0-9]+}}(%rsp) # sched: [8:0.50]
918; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000919 %1 = alloca i32, align 4
920 %2 = bitcast i32* %1 to i8*
921 store i32 %a0, i32* %1
922 call void @llvm.x86.sse.ldmxcsr(i8* %2)
923 ret void
924}
925declare void @llvm.x86.sse.ldmxcsr(i8*) nounwind readnone
926
927define <4 x float> @test_maxps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
928; GENERIC-LABEL: test_maxps:
929; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000930; GENERIC-NEXT: maxps %xmm1, %xmm0 # sched: [3:1.00]
931; GENERIC-NEXT: maxps (%rdi), %xmm0 # sched: [9:1.00]
932; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000933;
934; ATOM-LABEL: test_maxps:
935; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000936; ATOM-NEXT: maxps %xmm1, %xmm0 # sched: [5:5.00]
937; ATOM-NEXT: maxps (%rdi), %xmm0 # sched: [5:5.00]
938; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000939;
940; SLM-LABEL: test_maxps:
941; SLM: # BB#0:
942; SLM-NEXT: maxps %xmm1, %xmm0 # sched: [3:1.00]
943; SLM-NEXT: maxps (%rdi), %xmm0 # sched: [6:1.00]
944; SLM-NEXT: retq # sched: [4:1.00]
945;
946; SANDY-LABEL: test_maxps:
947; SANDY: # BB#0:
948; SANDY-NEXT: vmaxps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000949; SANDY-NEXT: vmaxps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
950; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000951;
952; HASWELL-LABEL: test_maxps:
953; HASWELL: # BB#0:
954; HASWELL-NEXT: vmaxps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +0000955; HASWELL-NEXT: vmaxps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
956; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000957;
958; BTVER2-LABEL: test_maxps:
959; BTVER2: # BB#0:
960; BTVER2-NEXT: vmaxps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
961; BTVER2-NEXT: vmaxps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
962; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +0000963;
964; ZNVER1-LABEL: test_maxps:
965; ZNVER1: # BB#0:
966; ZNVER1-NEXT: vmaxps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
967; ZNVER1-NEXT: vmaxps (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
968; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000969 %1 = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %a0, <4 x float> %a1)
970 %2 = load <4 x float>, <4 x float> *%a2, align 16
971 %3 = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %1, <4 x float> %2)
972 ret <4 x float> %3
973}
974declare <4 x float> @llvm.x86.sse.max.ps(<4 x float>, <4 x float>) nounwind readnone
975
976define <4 x float> @test_maxss(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
977; GENERIC-LABEL: test_maxss:
978; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +0000979; GENERIC-NEXT: maxss %xmm1, %xmm0 # sched: [3:1.00]
980; GENERIC-NEXT: maxss (%rdi), %xmm0 # sched: [9:1.00]
981; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +0000982;
983; ATOM-LABEL: test_maxss:
984; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +0000985; ATOM-NEXT: maxss %xmm1, %xmm0 # sched: [5:5.00]
986; ATOM-NEXT: maxss (%rdi), %xmm0 # sched: [5:5.00]
987; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +0000988;
989; SLM-LABEL: test_maxss:
990; SLM: # BB#0:
991; SLM-NEXT: maxss %xmm1, %xmm0 # sched: [3:1.00]
992; SLM-NEXT: maxss (%rdi), %xmm0 # sched: [6:1.00]
993; SLM-NEXT: retq # sched: [4:1.00]
994;
995; SANDY-LABEL: test_maxss:
996; SANDY: # BB#0:
997; SANDY-NEXT: vmaxss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +0000998; SANDY-NEXT: vmaxss (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
999; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001000;
1001; HASWELL-LABEL: test_maxss:
1002; HASWELL: # BB#0:
1003; HASWELL-NEXT: vmaxss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001004; HASWELL-NEXT: vmaxss (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
1005; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001006;
1007; BTVER2-LABEL: test_maxss:
1008; BTVER2: # BB#0:
1009; BTVER2-NEXT: vmaxss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1010; BTVER2-NEXT: vmaxss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
1011; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001012;
1013; ZNVER1-LABEL: test_maxss:
1014; ZNVER1: # BB#0:
1015; ZNVER1-NEXT: vmaxss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1016; ZNVER1-NEXT: vmaxss (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
1017; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001018 %1 = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> %a0, <4 x float> %a1)
1019 %2 = load <4 x float>, <4 x float> *%a2, align 16
1020 %3 = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> %1, <4 x float> %2)
1021 ret <4 x float> %3
1022}
1023declare <4 x float> @llvm.x86.sse.max.ss(<4 x float>, <4 x float>) nounwind readnone
1024
1025define <4 x float> @test_minps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
1026; GENERIC-LABEL: test_minps:
1027; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001028; GENERIC-NEXT: minps %xmm1, %xmm0 # sched: [3:1.00]
1029; GENERIC-NEXT: minps (%rdi), %xmm0 # sched: [9:1.00]
1030; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001031;
1032; ATOM-LABEL: test_minps:
1033; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001034; ATOM-NEXT: minps %xmm1, %xmm0 # sched: [5:5.00]
1035; ATOM-NEXT: minps (%rdi), %xmm0 # sched: [5:5.00]
1036; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001037;
1038; SLM-LABEL: test_minps:
1039; SLM: # BB#0:
1040; SLM-NEXT: minps %xmm1, %xmm0 # sched: [3:1.00]
1041; SLM-NEXT: minps (%rdi), %xmm0 # sched: [6:1.00]
1042; SLM-NEXT: retq # sched: [4:1.00]
1043;
1044; SANDY-LABEL: test_minps:
1045; SANDY: # BB#0:
1046; SANDY-NEXT: vminps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001047; SANDY-NEXT: vminps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
1048; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001049;
1050; HASWELL-LABEL: test_minps:
1051; HASWELL: # BB#0:
1052; HASWELL-NEXT: vminps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001053; HASWELL-NEXT: vminps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
1054; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001055;
1056; BTVER2-LABEL: test_minps:
1057; BTVER2: # BB#0:
1058; BTVER2-NEXT: vminps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1059; BTVER2-NEXT: vminps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
1060; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001061;
1062; ZNVER1-LABEL: test_minps:
1063; ZNVER1: # BB#0:
1064; ZNVER1-NEXT: vminps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1065; ZNVER1-NEXT: vminps (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
1066; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001067 %1 = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %a0, <4 x float> %a1)
1068 %2 = load <4 x float>, <4 x float> *%a2, align 16
1069 %3 = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %1, <4 x float> %2)
1070 ret <4 x float> %3
1071}
1072declare <4 x float> @llvm.x86.sse.min.ps(<4 x float>, <4 x float>) nounwind readnone
1073
1074define <4 x float> @test_minss(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
1075; GENERIC-LABEL: test_minss:
1076; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001077; GENERIC-NEXT: minss %xmm1, %xmm0 # sched: [3:1.00]
1078; GENERIC-NEXT: minss (%rdi), %xmm0 # sched: [9:1.00]
1079; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001080;
1081; ATOM-LABEL: test_minss:
1082; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001083; ATOM-NEXT: minss %xmm1, %xmm0 # sched: [5:5.00]
1084; ATOM-NEXT: minss (%rdi), %xmm0 # sched: [5:5.00]
1085; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001086;
1087; SLM-LABEL: test_minss:
1088; SLM: # BB#0:
1089; SLM-NEXT: minss %xmm1, %xmm0 # sched: [3:1.00]
1090; SLM-NEXT: minss (%rdi), %xmm0 # sched: [6:1.00]
1091; SLM-NEXT: retq # sched: [4:1.00]
1092;
1093; SANDY-LABEL: test_minss:
1094; SANDY: # BB#0:
1095; SANDY-NEXT: vminss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001096; SANDY-NEXT: vminss (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
1097; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001098;
1099; HASWELL-LABEL: test_minss:
1100; HASWELL: # BB#0:
1101; HASWELL-NEXT: vminss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001102; HASWELL-NEXT: vminss (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
1103; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001104;
1105; BTVER2-LABEL: test_minss:
1106; BTVER2: # BB#0:
1107; BTVER2-NEXT: vminss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1108; BTVER2-NEXT: vminss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
1109; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001110;
1111; ZNVER1-LABEL: test_minss:
1112; ZNVER1: # BB#0:
1113; ZNVER1-NEXT: vminss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1114; ZNVER1-NEXT: vminss (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
1115; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001116 %1 = call <4 x float> @llvm.x86.sse.min.ss(<4 x float> %a0, <4 x float> %a1)
1117 %2 = load <4 x float>, <4 x float> *%a2, align 16
1118 %3 = call <4 x float> @llvm.x86.sse.min.ss(<4 x float> %1, <4 x float> %2)
1119 ret <4 x float> %3
1120}
1121declare <4 x float> @llvm.x86.sse.min.ss(<4 x float>, <4 x float>) nounwind readnone
1122
1123define void @test_movaps(<4 x float> *%a0, <4 x float> *%a1) {
1124; GENERIC-LABEL: test_movaps:
1125; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001126; GENERIC-NEXT: movaps (%rdi), %xmm0 # sched: [6:0.50]
1127; GENERIC-NEXT: addps %xmm0, %xmm0 # sched: [3:1.00]
1128; GENERIC-NEXT: movaps %xmm0, (%rsi) # sched: [5:1.00]
1129; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001130;
1131; ATOM-LABEL: test_movaps:
1132; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001133; ATOM-NEXT: movaps (%rdi), %xmm0 # sched: [1:1.00]
1134; ATOM-NEXT: addps %xmm0, %xmm0 # sched: [5:5.00]
1135; ATOM-NEXT: movaps %xmm0, (%rsi) # sched: [1:1.00]
1136; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001137;
1138; SLM-LABEL: test_movaps:
1139; SLM: # BB#0:
1140; SLM-NEXT: movaps (%rdi), %xmm0 # sched: [3:1.00]
1141; SLM-NEXT: addps %xmm0, %xmm0 # sched: [3:1.00]
1142; SLM-NEXT: movaps %xmm0, (%rsi) # sched: [1:1.00]
1143; SLM-NEXT: retq # sched: [4:1.00]
1144;
1145; SANDY-LABEL: test_movaps:
1146; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001147; SANDY-NEXT: vmovaps (%rdi), %xmm0 # sched: [6:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001148; SANDY-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001149; SANDY-NEXT: vmovaps %xmm0, (%rsi) # sched: [5:1.00]
1150; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001151;
1152; HASWELL-LABEL: test_movaps:
1153; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +00001154; HASWELL-NEXT: vmovaps (%rdi), %xmm0 # sched: [4:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001155; HASWELL-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001156; HASWELL-NEXT: vmovaps %xmm0, (%rsi) # sched: [1:1.00]
1157; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001158;
1159; BTVER2-LABEL: test_movaps:
1160; BTVER2: # BB#0:
1161; BTVER2-NEXT: vmovaps (%rdi), %xmm0 # sched: [5:1.00]
1162; BTVER2-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
1163; BTVER2-NEXT: vmovaps %xmm0, (%rsi) # sched: [1:1.00]
1164; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001165;
1166; ZNVER1-LABEL: test_movaps:
1167; ZNVER1: # BB#0:
1168; ZNVER1-NEXT: vmovaps (%rdi), %xmm0 # sched: [8:0.50]
1169; ZNVER1-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
1170; ZNVER1-NEXT: vmovaps %xmm0, (%rsi) # sched: [1:0.50]
1171; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001172 %1 = load <4 x float>, <4 x float> *%a0, align 16
1173 %2 = fadd <4 x float> %1, %1
1174 store <4 x float> %2, <4 x float> *%a1, align 16
1175 ret void
1176}
1177
1178; TODO (v)movhlps
1179
1180define <4 x float> @test_movhlps(<4 x float> %a0, <4 x float> %a1) {
1181; GENERIC-LABEL: test_movhlps:
1182; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001183; GENERIC-NEXT: movhlps {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00]
1184; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001185;
1186; ATOM-LABEL: test_movhlps:
1187; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001188; ATOM-NEXT: movhlps {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00]
1189; ATOM-NEXT: nop # sched: [1:0.50]
1190; ATOM-NEXT: nop # sched: [1:0.50]
1191; ATOM-NEXT: nop # sched: [1:0.50]
1192; ATOM-NEXT: nop # sched: [1:0.50]
1193; ATOM-NEXT: nop # sched: [1:0.50]
1194; ATOM-NEXT: nop # sched: [1:0.50]
1195; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001196;
1197; SLM-LABEL: test_movhlps:
1198; SLM: # BB#0:
1199; SLM-NEXT: movhlps {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00]
1200; SLM-NEXT: retq # sched: [4:1.00]
1201;
1202; SANDY-LABEL: test_movhlps:
1203; SANDY: # BB#0:
1204; SANDY-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001205; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001206;
1207; HASWELL-LABEL: test_movhlps:
1208; HASWELL: # BB#0:
1209; HASWELL-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001210; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001211;
1212; BTVER2-LABEL: test_movhlps:
1213; BTVER2: # BB#0:
1214; BTVER2-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:0.50]
1215; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001216;
1217; ZNVER1-LABEL: test_movhlps:
1218; ZNVER1: # BB#0:
1219; ZNVER1-NEXT: vunpckhpd {{.*#+}} xmm0 = xmm1[1],xmm0[1] sched: [1:0.50]
1220; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001221 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 6, i32 7, i32 2, i32 3>
1222 ret <4 x float> %1
1223}
1224
1225; TODO (v)movhps
1226
1227define void @test_movhps(<4 x float> %a0, <4 x float> %a1, x86_mmx *%a2) {
1228; GENERIC-LABEL: test_movhps:
1229; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001230; GENERIC-NEXT: movhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [7:1.00]
1231; GENERIC-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
1232; GENERIC-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] sched: [1:1.00]
1233; GENERIC-NEXT: movlps %xmm1, (%rdi) # sched: [5:1.00]
1234; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001235;
1236; ATOM-LABEL: test_movhps:
1237; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001238; ATOM-NEXT: movhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [1:1.00]
1239; ATOM-NEXT: addps %xmm0, %xmm1 # sched: [5:5.00]
1240; ATOM-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1] sched: [1:1.00]
1241; ATOM-NEXT: movlps %xmm1, (%rdi) # sched: [1:1.00]
1242; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001243;
1244; SLM-LABEL: test_movhps:
1245; SLM: # BB#0:
1246; SLM-NEXT: movhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [4:1.00]
1247; SLM-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
1248; SLM-NEXT: pextrq $1, %xmm1, (%rdi) # sched: [4:2.00]
1249; SLM-NEXT: retq # sched: [4:1.00]
1250;
1251; SANDY-LABEL: test_movhps:
1252; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001253; SANDY-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001254; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1255; SANDY-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [5:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001256; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001257;
1258; HASWELL-LABEL: test_movhps:
1259; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +00001260; HASWELL-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [5:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001261; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001262; HASWELL-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [5:1.00]
1263; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001264;
1265; BTVER2-LABEL: test_movhps:
1266; BTVER2: # BB#0:
1267; BTVER2-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [6:1.00]
1268; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1269; BTVER2-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [6:1.00]
1270; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001271;
1272; ZNVER1-LABEL: test_movhps:
1273; ZNVER1: # BB#0:
1274; ZNVER1-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [8:0.50]
1275; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1276; ZNVER1-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [8:1.00]
1277; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001278 %1 = bitcast x86_mmx* %a2 to <2 x float>*
1279 %2 = load <2 x float>, <2 x float> *%1, align 8
1280 %3 = shufflevector <2 x float> %2, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1281 %4 = shufflevector <4 x float> %a1, <4 x float> %3, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1282 %5 = fadd <4 x float> %a0, %4
1283 %6 = shufflevector <4 x float> %5, <4 x float> undef, <2 x i32> <i32 2, i32 3>
1284 store <2 x float> %6, <2 x float>* %1
1285 ret void
1286}
1287
1288; TODO (v)movlhps
1289
1290define <4 x float> @test_movlhps(<4 x float> %a0, <4 x float> %a1) {
1291; GENERIC-LABEL: test_movlhps:
1292; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001293; GENERIC-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
1294; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
1295; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001296;
1297; ATOM-LABEL: test_movlhps:
1298; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001299; ATOM-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
1300; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
1301; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001302;
1303; SLM-LABEL: test_movlhps:
1304; SLM: # BB#0:
1305; SLM-NEXT: unpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
1306; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
1307; SLM-NEXT: retq # sched: [4:1.00]
1308;
1309; SANDY-LABEL: test_movlhps:
1310; SANDY: # BB#0:
1311; SANDY-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
1312; SANDY-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001313; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001314;
1315; HASWELL-LABEL: test_movlhps:
1316; HASWELL: # BB#0:
1317; HASWELL-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:1.00]
1318; HASWELL-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001319; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001320;
1321; BTVER2-LABEL: test_movlhps:
1322; BTVER2: # BB#0:
1323; BTVER2-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:0.50]
1324; BTVER2-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
1325; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001326;
1327; ZNVER1-LABEL: test_movlhps:
1328; ZNVER1: # BB#0:
1329; ZNVER1-NEXT: vunpcklpd {{.*#+}} xmm0 = xmm0[0],xmm1[0] sched: [1:0.50]
1330; ZNVER1-NEXT: vaddps %xmm0, %xmm1, %xmm0 # sched: [3:1.00]
1331; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001332 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1333 %2 = fadd <4 x float> %a1, %1
1334 ret <4 x float> %2
1335}
1336
1337define void @test_movlps(<4 x float> %a0, <4 x float> %a1, x86_mmx *%a2) {
1338; GENERIC-LABEL: test_movlps:
1339; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001340; GENERIC-NEXT: movlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [7:1.00]
1341; GENERIC-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
1342; GENERIC-NEXT: movlps %xmm1, (%rdi) # sched: [5:1.00]
1343; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001344;
1345; ATOM-LABEL: test_movlps:
1346; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001347; ATOM-NEXT: movlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [1:1.00]
1348; ATOM-NEXT: addps %xmm0, %xmm1 # sched: [5:5.00]
1349; ATOM-NEXT: movlps %xmm1, (%rdi) # sched: [1:1.00]
1350; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001351;
1352; SLM-LABEL: test_movlps:
1353; SLM: # BB#0:
1354; SLM-NEXT: movlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [4:1.00]
1355; SLM-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
1356; SLM-NEXT: movlps %xmm1, (%rdi) # sched: [1:1.00]
1357; SLM-NEXT: retq # sched: [4:1.00]
1358;
1359; SANDY-LABEL: test_movlps:
1360; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001361; SANDY-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [7:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001362; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001363; SANDY-NEXT: vmovlps %xmm0, (%rdi) # sched: [5:1.00]
1364; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001365;
1366; HASWELL-LABEL: test_movlps:
1367; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +00001368; HASWELL-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [5:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001369; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001370; HASWELL-NEXT: vmovlps %xmm0, (%rdi) # sched: [1:1.00]
1371; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001372;
1373; BTVER2-LABEL: test_movlps:
1374; BTVER2: # BB#0:
1375; BTVER2-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [6:1.00]
1376; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1377; BTVER2-NEXT: vmovlps %xmm0, (%rdi) # sched: [1:1.00]
1378; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001379;
1380; ZNVER1-LABEL: test_movlps:
1381; ZNVER1: # BB#0:
1382; ZNVER1-NEXT: vmovlpd {{.*#+}} xmm1 = mem[0],xmm1[1] sched: [8:0.50]
1383; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1384; ZNVER1-NEXT: vmovlps %xmm0, (%rdi) # sched: [1:0.50]
1385; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001386 %1 = bitcast x86_mmx* %a2 to <2 x float>*
1387 %2 = load <2 x float>, <2 x float> *%1, align 8
1388 %3 = shufflevector <2 x float> %2, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1389 %4 = shufflevector <4 x float> %a1, <4 x float> %3, <4 x i32> <i32 4, i32 5, i32 2, i32 3>
1390 %5 = fadd <4 x float> %a0, %4
1391 %6 = shufflevector <4 x float> %5, <4 x float> undef, <2 x i32> <i32 0, i32 1>
1392 store <2 x float> %6, <2 x float>* %1
1393 ret void
1394}
1395
1396define i32 @test_movmskps(<4 x float> %a0) {
1397; GENERIC-LABEL: test_movmskps:
1398; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001399; GENERIC-NEXT: movmskps %xmm0, %eax # sched: [2:1.00]
1400; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001401;
1402; ATOM-LABEL: test_movmskps:
1403; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001404; ATOM-NEXT: movmskps %xmm0, %eax # sched: [3:3.00]
1405; ATOM-NEXT: nop # sched: [1:0.50]
1406; ATOM-NEXT: nop # sched: [1:0.50]
1407; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001408;
1409; SLM-LABEL: test_movmskps:
1410; SLM: # BB#0:
1411; SLM-NEXT: movmskps %xmm0, %eax # sched: [1:0.50]
1412; SLM-NEXT: retq # sched: [4:1.00]
1413;
1414; SANDY-LABEL: test_movmskps:
1415; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001416; SANDY-NEXT: vmovmskps %xmm0, %eax # sched: [2:1.00]
1417; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001418;
1419; HASWELL-LABEL: test_movmskps:
1420; HASWELL: # BB#0:
1421; HASWELL-NEXT: vmovmskps %xmm0, %eax # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001422; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001423;
1424; BTVER2-LABEL: test_movmskps:
1425; BTVER2: # BB#0:
1426; BTVER2-NEXT: vmovmskps %xmm0, %eax # sched: [1:0.50]
1427; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001428;
1429; ZNVER1-LABEL: test_movmskps:
1430; ZNVER1: # BB#0:
1431; ZNVER1-NEXT: vmovmskps %xmm0, %eax # sched: [1:0.25]
1432; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001433 %1 = call i32 @llvm.x86.sse.movmsk.ps(<4 x float> %a0)
1434 ret i32 %1
1435}
1436declare i32 @llvm.x86.sse.movmsk.ps(<4 x float>) nounwind readnone
1437
1438define void @test_movntps(<4 x float> %a0, <4 x float> *%a1) {
1439; GENERIC-LABEL: test_movntps:
1440; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001441; GENERIC-NEXT: movntps %xmm0, (%rdi) # sched: [5:1.00]
1442; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001443;
1444; ATOM-LABEL: test_movntps:
1445; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001446; ATOM-NEXT: movntps %xmm0, (%rdi) # sched: [1:1.00]
1447; ATOM-NEXT: nop # sched: [1:0.50]
1448; ATOM-NEXT: nop # sched: [1:0.50]
1449; ATOM-NEXT: nop # sched: [1:0.50]
1450; ATOM-NEXT: nop # sched: [1:0.50]
1451; ATOM-NEXT: nop # sched: [1:0.50]
1452; ATOM-NEXT: nop # sched: [1:0.50]
1453; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001454;
1455; SLM-LABEL: test_movntps:
1456; SLM: # BB#0:
1457; SLM-NEXT: movntps %xmm0, (%rdi) # sched: [1:1.00]
1458; SLM-NEXT: retq # sched: [4:1.00]
1459;
1460; SANDY-LABEL: test_movntps:
1461; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001462; SANDY-NEXT: vmovntps %xmm0, (%rdi) # sched: [5:1.00]
1463; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001464;
1465; HASWELL-LABEL: test_movntps:
1466; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +00001467; HASWELL-NEXT: vmovntps %xmm0, (%rdi) # sched: [1:1.00]
1468; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001469;
1470; BTVER2-LABEL: test_movntps:
1471; BTVER2: # BB#0:
1472; BTVER2-NEXT: vmovntps %xmm0, (%rdi) # sched: [1:1.00]
1473; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001474;
1475; ZNVER1-LABEL: test_movntps:
1476; ZNVER1: # BB#0:
1477; ZNVER1-NEXT: vmovntps %xmm0, (%rdi) # sched: [1:0.50]
1478; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001479 store <4 x float> %a0, <4 x float> *%a1, align 16, !nontemporal !0
1480 ret void
1481}
1482
1483define void @test_movss_mem(float* %a0, float* %a1) {
1484; GENERIC-LABEL: test_movss_mem:
1485; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001486; GENERIC-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [6:0.50]
1487; GENERIC-NEXT: addss %xmm0, %xmm0 # sched: [3:1.00]
1488; GENERIC-NEXT: movss %xmm0, (%rsi) # sched: [5:1.00]
1489; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001490;
1491; ATOM-LABEL: test_movss_mem:
1492; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001493; ATOM-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [1:1.00]
1494; ATOM-NEXT: addss %xmm0, %xmm0 # sched: [5:5.00]
1495; ATOM-NEXT: movss %xmm0, (%rsi) # sched: [1:1.00]
1496; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001497;
1498; SLM-LABEL: test_movss_mem:
1499; SLM: # BB#0:
1500; SLM-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [3:1.00]
1501; SLM-NEXT: addss %xmm0, %xmm0 # sched: [3:1.00]
1502; SLM-NEXT: movss %xmm0, (%rsi) # sched: [1:1.00]
1503; SLM-NEXT: retq # sched: [4:1.00]
1504;
1505; SANDY-LABEL: test_movss_mem:
1506; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001507; SANDY-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [6:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001508; SANDY-NEXT: vaddss %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001509; SANDY-NEXT: vmovss %xmm0, (%rsi) # sched: [5:1.00]
1510; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001511;
1512; HASWELL-LABEL: test_movss_mem:
1513; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +00001514; HASWELL-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [4:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001515; HASWELL-NEXT: vaddss %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001516; HASWELL-NEXT: vmovss %xmm0, (%rsi) # sched: [1:1.00]
1517; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001518;
1519; BTVER2-LABEL: test_movss_mem:
1520; BTVER2: # BB#0:
1521; BTVER2-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [5:1.00]
1522; BTVER2-NEXT: vaddss %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
1523; BTVER2-NEXT: vmovss %xmm0, (%rsi) # sched: [1:1.00]
1524; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001525;
1526; ZNVER1-LABEL: test_movss_mem:
1527; ZNVER1: # BB#0:
1528; ZNVER1-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero sched: [8:0.50]
1529; ZNVER1-NEXT: vaddss %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
1530; ZNVER1-NEXT: vmovss %xmm0, (%rsi) # sched: [1:0.50]
1531; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001532 %1 = load float, float* %a0, align 1
1533 %2 = fadd float %1, %1
1534 store float %2, float *%a1, align 1
1535 ret void
1536}
1537
1538define <4 x float> @test_movss_reg(<4 x float> %a0, <4 x float> %a1) {
1539; GENERIC-LABEL: test_movss_reg:
1540; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001541; GENERIC-NEXT: movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:1.00]
1542; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001543;
1544; ATOM-LABEL: test_movss_reg:
1545; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001546; ATOM-NEXT: movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.50]
1547; ATOM-NEXT: nop # sched: [1:0.50]
1548; ATOM-NEXT: nop # sched: [1:0.50]
1549; ATOM-NEXT: nop # sched: [1:0.50]
1550; ATOM-NEXT: nop # sched: [1:0.50]
1551; ATOM-NEXT: nop # sched: [1:0.50]
1552; ATOM-NEXT: nop # sched: [1:0.50]
1553; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001554;
1555; SLM-LABEL: test_movss_reg:
1556; SLM: # BB#0:
1557; SLM-NEXT: blendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:1.00]
1558; SLM-NEXT: retq # sched: [4:1.00]
1559;
1560; SANDY-LABEL: test_movss_reg:
1561; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001562; SANDY-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:1.00]
1563; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001564;
1565; HASWELL-LABEL: test_movss_reg:
1566; HASWELL: # BB#0:
1567; HASWELL-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.33]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001568; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001569;
1570; BTVER2-LABEL: test_movss_reg:
1571; BTVER2: # BB#0:
1572; BTVER2-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.50]
1573; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001574;
1575; ZNVER1-LABEL: test_movss_reg:
1576; ZNVER1: # BB#0:
1577; ZNVER1-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3] sched: [1:0.50]
1578; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001579 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 4, i32 1, i32 2, i32 3>
1580 ret <4 x float> %1
1581}
1582
1583define void @test_movups(<4 x float> *%a0, <4 x float> *%a1) {
1584; GENERIC-LABEL: test_movups:
1585; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001586; GENERIC-NEXT: movups (%rdi), %xmm0 # sched: [6:0.50]
1587; GENERIC-NEXT: addps %xmm0, %xmm0 # sched: [3:1.00]
1588; GENERIC-NEXT: movups %xmm0, (%rsi) # sched: [5:1.00]
1589; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001590;
1591; ATOM-LABEL: test_movups:
1592; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001593; ATOM-NEXT: movups (%rdi), %xmm0 # sched: [3:1.50]
1594; ATOM-NEXT: addps %xmm0, %xmm0 # sched: [5:5.00]
1595; ATOM-NEXT: movups %xmm0, (%rsi) # sched: [2:1.00]
1596; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001597;
1598; SLM-LABEL: test_movups:
1599; SLM: # BB#0:
1600; SLM-NEXT: movups (%rdi), %xmm0 # sched: [3:1.00]
1601; SLM-NEXT: addps %xmm0, %xmm0 # sched: [3:1.00]
1602; SLM-NEXT: movups %xmm0, (%rsi) # sched: [1:1.00]
1603; SLM-NEXT: retq # sched: [4:1.00]
1604;
1605; SANDY-LABEL: test_movups:
1606; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001607; SANDY-NEXT: vmovups (%rdi), %xmm0 # sched: [6:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001608; SANDY-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001609; SANDY-NEXT: vmovups %xmm0, (%rsi) # sched: [5:1.00]
1610; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001611;
1612; HASWELL-LABEL: test_movups:
1613; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +00001614; HASWELL-NEXT: vmovups (%rdi), %xmm0 # sched: [4:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001615; HASWELL-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001616; HASWELL-NEXT: vmovups %xmm0, (%rsi) # sched: [1:1.00]
1617; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001618;
1619; BTVER2-LABEL: test_movups:
1620; BTVER2: # BB#0:
1621; BTVER2-NEXT: vmovups (%rdi), %xmm0 # sched: [5:1.00]
1622; BTVER2-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
1623; BTVER2-NEXT: vmovups %xmm0, (%rsi) # sched: [1:1.00]
1624; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001625;
1626; ZNVER1-LABEL: test_movups:
1627; ZNVER1: # BB#0:
1628; ZNVER1-NEXT: vmovups (%rdi), %xmm0 # sched: [8:0.50]
1629; ZNVER1-NEXT: vaddps %xmm0, %xmm0, %xmm0 # sched: [3:1.00]
1630; ZNVER1-NEXT: vmovups %xmm0, (%rsi) # sched: [1:0.50]
1631; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001632 %1 = load <4 x float>, <4 x float> *%a0, align 1
1633 %2 = fadd <4 x float> %1, %1
1634 store <4 x float> %2, <4 x float> *%a1, align 1
1635 ret void
1636}
1637
1638define <4 x float> @test_mulps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
1639; GENERIC-LABEL: test_mulps:
1640; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001641; GENERIC-NEXT: mulps %xmm1, %xmm0 # sched: [5:1.00]
1642; GENERIC-NEXT: mulps (%rdi), %xmm0 # sched: [11:1.00]
1643; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001644;
1645; ATOM-LABEL: test_mulps:
1646; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001647; ATOM-NEXT: mulps %xmm1, %xmm0 # sched: [5:5.00]
1648; ATOM-NEXT: mulps (%rdi), %xmm0 # sched: [10:5.00]
1649; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001650;
1651; SLM-LABEL: test_mulps:
1652; SLM: # BB#0:
1653; SLM-NEXT: mulps %xmm1, %xmm0 # sched: [5:2.00]
1654; SLM-NEXT: mulps (%rdi), %xmm0 # sched: [8:2.00]
1655; SLM-NEXT: retq # sched: [4:1.00]
1656;
1657; SANDY-LABEL: test_mulps:
1658; SANDY: # BB#0:
1659; SANDY-NEXT: vmulps %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001660; SANDY-NEXT: vmulps (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
1661; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001662;
1663; HASWELL-LABEL: test_mulps:
1664; HASWELL: # BB#0:
1665; HASWELL-NEXT: vmulps %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001666; HASWELL-NEXT: vmulps (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
1667; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001668;
1669; BTVER2-LABEL: test_mulps:
1670; BTVER2: # BB#0:
1671; BTVER2-NEXT: vmulps %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
1672; BTVER2-NEXT: vmulps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
1673; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001674;
1675; ZNVER1-LABEL: test_mulps:
1676; ZNVER1: # BB#0:
1677; ZNVER1-NEXT: vmulps %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
1678; ZNVER1-NEXT: vmulps (%rdi), %xmm0, %xmm0 # sched: [12:1.00]
1679; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001680 %1 = fmul <4 x float> %a0, %a1
1681 %2 = load <4 x float>, <4 x float> *%a2, align 16
1682 %3 = fmul <4 x float> %1, %2
1683 ret <4 x float> %3
1684}
1685
1686define float @test_mulss(float %a0, float %a1, float *%a2) {
1687; GENERIC-LABEL: test_mulss:
1688; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001689; GENERIC-NEXT: mulss %xmm1, %xmm0 # sched: [5:1.00]
1690; GENERIC-NEXT: mulss (%rdi), %xmm0 # sched: [11:1.00]
1691; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001692;
1693; ATOM-LABEL: test_mulss:
1694; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001695; ATOM-NEXT: mulss %xmm1, %xmm0 # sched: [4:4.00]
1696; ATOM-NEXT: mulss (%rdi), %xmm0 # sched: [5:5.00]
1697; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001698;
1699; SLM-LABEL: test_mulss:
1700; SLM: # BB#0:
1701; SLM-NEXT: mulss %xmm1, %xmm0 # sched: [5:2.00]
1702; SLM-NEXT: mulss (%rdi), %xmm0 # sched: [8:2.00]
1703; SLM-NEXT: retq # sched: [4:1.00]
1704;
1705; SANDY-LABEL: test_mulss:
1706; SANDY: # BB#0:
1707; SANDY-NEXT: vmulss %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001708; SANDY-NEXT: vmulss (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
1709; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001710;
1711; HASWELL-LABEL: test_mulss:
1712; HASWELL: # BB#0:
1713; HASWELL-NEXT: vmulss %xmm1, %xmm0, %xmm0 # sched: [5:0.50]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001714; HASWELL-NEXT: vmulss (%rdi), %xmm0, %xmm0 # sched: [9:0.50]
1715; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001716;
1717; BTVER2-LABEL: test_mulss:
1718; BTVER2: # BB#0:
1719; BTVER2-NEXT: vmulss %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
1720; BTVER2-NEXT: vmulss (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
1721; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001722;
1723; ZNVER1-LABEL: test_mulss:
1724; ZNVER1: # BB#0:
1725; ZNVER1-NEXT: vmulss %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
1726; ZNVER1-NEXT: vmulss (%rdi), %xmm0, %xmm0 # sched: [12:1.00]
1727; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001728 %1 = fmul float %a0, %a1
1729 %2 = load float, float *%a2, align 4
1730 %3 = fmul float %1, %2
1731 ret float %3
1732}
1733
1734define <4 x float> @test_orps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
1735; GENERIC-LABEL: test_orps:
1736; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001737; GENERIC-NEXT: orps %xmm1, %xmm0 # sched: [1:1.00]
1738; GENERIC-NEXT: orps (%rdi), %xmm0 # sched: [7:1.00]
1739; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001740;
1741; ATOM-LABEL: test_orps:
1742; ATOM: # BB#0:
Simon Pilgrim486072d2017-08-01 17:51:20 +00001743; ATOM-NEXT: orps %xmm1, %xmm0 # sched: [1:0.50]
1744; ATOM-NEXT: orps (%rdi), %xmm0 # sched: [1:1.00]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001745; ATOM-NEXT: nop # sched: [1:0.50]
1746; ATOM-NEXT: nop # sched: [1:0.50]
1747; ATOM-NEXT: nop # sched: [1:0.50]
1748; ATOM-NEXT: nop # sched: [1:0.50]
1749; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001750;
1751; SLM-LABEL: test_orps:
1752; SLM: # BB#0:
1753; SLM-NEXT: orps %xmm1, %xmm0 # sched: [1:0.50]
1754; SLM-NEXT: orps (%rdi), %xmm0 # sched: [4:1.00]
1755; SLM-NEXT: retq # sched: [4:1.00]
1756;
1757; SANDY-LABEL: test_orps:
1758; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001759; SANDY-NEXT: vorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
1760; SANDY-NEXT: vorps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
1761; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001762;
1763; HASWELL-LABEL: test_orps:
1764; HASWELL: # BB#0:
1765; HASWELL-NEXT: vorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001766; HASWELL-NEXT: vorps (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
1767; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001768;
1769; BTVER2-LABEL: test_orps:
1770; BTVER2: # BB#0:
1771; BTVER2-NEXT: vorps %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
1772; BTVER2-NEXT: vorps (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
1773; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001774;
1775; ZNVER1-LABEL: test_orps:
1776; ZNVER1: # BB#0:
1777; ZNVER1-NEXT: vorps %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
1778; ZNVER1-NEXT: vorps (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
1779; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001780 %1 = bitcast <4 x float> %a0 to <4 x i32>
1781 %2 = bitcast <4 x float> %a1 to <4 x i32>
1782 %3 = or <4 x i32> %1, %2
1783 %4 = load <4 x float>, <4 x float> *%a2, align 16
1784 %5 = bitcast <4 x float> %4 to <4 x i32>
1785 %6 = or <4 x i32> %3, %5
1786 %7 = bitcast <4 x i32> %6 to <4 x float>
1787 ret <4 x float> %7
1788}
1789
1790define void @test_prefetchnta(i8* %a0) {
1791; GENERIC-LABEL: test_prefetchnta:
1792; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001793; GENERIC-NEXT: prefetchnta (%rdi) # sched: [5:0.50]
1794; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001795;
1796; ATOM-LABEL: test_prefetchnta:
1797; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001798; ATOM-NEXT: prefetchnta (%rdi) # sched: [1:1.00]
1799; ATOM-NEXT: nop # sched: [1:0.50]
1800; ATOM-NEXT: nop # sched: [1:0.50]
1801; ATOM-NEXT: nop # sched: [1:0.50]
1802; ATOM-NEXT: nop # sched: [1:0.50]
1803; ATOM-NEXT: nop # sched: [1:0.50]
1804; ATOM-NEXT: nop # sched: [1:0.50]
1805; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001806;
1807; SLM-LABEL: test_prefetchnta:
1808; SLM: # BB#0:
1809; SLM-NEXT: prefetchnta (%rdi) # sched: [3:1.00]
1810; SLM-NEXT: retq # sched: [4:1.00]
1811;
1812; SANDY-LABEL: test_prefetchnta:
1813; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001814; SANDY-NEXT: prefetchnta (%rdi) # sched: [5:0.50]
1815; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001816;
1817; HASWELL-LABEL: test_prefetchnta:
1818; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +00001819; HASWELL-NEXT: prefetchnta (%rdi) # sched: [4:0.50]
1820; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001821;
1822; BTVER2-LABEL: test_prefetchnta:
1823; BTVER2: # BB#0:
1824; BTVER2-NEXT: prefetchnta (%rdi) # sched: [5:1.00]
1825; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001826;
1827; ZNVER1-LABEL: test_prefetchnta:
1828; ZNVER1: # BB#0:
1829; ZNVER1-NEXT: prefetchnta (%rdi) # sched: [8:0.50]
1830; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001831 call void @llvm.prefetch(i8* %a0, i32 0, i32 0, i32 1)
1832 ret void
1833}
1834declare void @llvm.prefetch(i8* nocapture, i32, i32, i32) nounwind readnone
1835
1836define <4 x float> @test_rcpps(<4 x float> %a0, <4 x float> *%a1) {
1837; GENERIC-LABEL: test_rcpps:
1838; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001839; GENERIC-NEXT: rcpps %xmm0, %xmm1 # sched: [5:1.00]
1840; GENERIC-NEXT: rcpps (%rdi), %xmm0 # sched: [11:1.00]
1841; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
1842; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001843;
1844; ATOM-LABEL: test_rcpps:
1845; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001846; ATOM-NEXT: rcpps (%rdi), %xmm1 # sched: [10:5.00]
1847; ATOM-NEXT: rcpps %xmm0, %xmm0 # sched: [9:4.50]
1848; ATOM-NEXT: addps %xmm0, %xmm1 # sched: [5:5.00]
1849; ATOM-NEXT: movaps %xmm1, %xmm0 # sched: [1:0.50]
1850; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001851;
1852; SLM-LABEL: test_rcpps:
1853; SLM: # BB#0:
1854; SLM-NEXT: rcpps (%rdi), %xmm1 # sched: [8:1.00]
1855; SLM-NEXT: rcpps %xmm0, %xmm0 # sched: [5:1.00]
1856; SLM-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
1857; SLM-NEXT: movaps %xmm1, %xmm0 # sched: [1:1.00]
1858; SLM-NEXT: retq # sched: [4:1.00]
1859;
1860; SANDY-LABEL: test_rcpps:
1861; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00001862; SANDY-NEXT: vrcpps %xmm0, %xmm0 # sched: [7:3.00]
1863; SANDY-NEXT: vrcpps (%rdi), %xmm1 # sched: [11:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001864; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001865; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001866;
1867; HASWELL-LABEL: test_rcpps:
1868; HASWELL: # BB#0:
1869; HASWELL-NEXT: vrcpps %xmm0, %xmm0 # sched: [5:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001870; HASWELL-NEXT: vrcpps (%rdi), %xmm1 # sched: [9:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001871; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001872; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001873;
1874; BTVER2-LABEL: test_rcpps:
1875; BTVER2: # BB#0:
1876; BTVER2-NEXT: vrcpps (%rdi), %xmm1 # sched: [7:1.00]
1877; BTVER2-NEXT: vrcpps %xmm0, %xmm0 # sched: [2:1.00]
1878; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1879; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001880;
1881; ZNVER1-LABEL: test_rcpps:
1882; ZNVER1: # BB#0:
1883; ZNVER1-NEXT: vrcpps (%rdi), %xmm1 # sched: [12:0.50]
1884; ZNVER1-NEXT: vrcpps %xmm0, %xmm0 # sched: [5:0.50]
1885; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1886; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001887 %1 = call <4 x float> @llvm.x86.sse.rcp.ps(<4 x float> %a0)
1888 %2 = load <4 x float>, <4 x float> *%a1, align 16
1889 %3 = call <4 x float> @llvm.x86.sse.rcp.ps(<4 x float> %2)
1890 %4 = fadd <4 x float> %1, %3
1891 ret <4 x float> %4
1892}
1893declare <4 x float> @llvm.x86.sse.rcp.ps(<4 x float>) nounwind readnone
1894
1895; TODO - rcpss_m
1896
1897define <4 x float> @test_rcpss(float %a0, float *%a1) {
1898; GENERIC-LABEL: test_rcpss:
1899; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001900; GENERIC-NEXT: rcpss %xmm0, %xmm0 # sched: [5:1.00]
1901; GENERIC-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [6:0.50]
1902; GENERIC-NEXT: rcpss %xmm1, %xmm1 # sched: [5:1.00]
1903; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
1904; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001905;
1906; ATOM-LABEL: test_rcpss:
1907; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001908; ATOM-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001909; ATOM-NEXT: rcpss %xmm0, %xmm0
1910; ATOM-NEXT: rcpss %xmm1, %xmm1
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001911; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
1912; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001913;
1914; SLM-LABEL: test_rcpss:
1915; SLM: # BB#0:
1916; SLM-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [3:1.00]
1917; SLM-NEXT: rcpss %xmm0, %xmm0 # sched: [8:1.00]
1918; SLM-NEXT: rcpss %xmm1, %xmm1 # sched: [8:1.00]
1919; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
1920; SLM-NEXT: retq # sched: [4:1.00]
1921;
1922; SANDY-LABEL: test_rcpss:
1923; SANDY: # BB#0:
1924; SANDY-NEXT: vrcpss %xmm0, %xmm0, %xmm0 # sched: [9:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001925; SANDY-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [6:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001926; SANDY-NEXT: vrcpss %xmm1, %xmm1, %xmm1 # sched: [9:1.00]
1927; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001928; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001929;
1930; HASWELL-LABEL: test_rcpss:
1931; HASWELL: # BB#0:
1932; HASWELL-NEXT: vrcpss %xmm0, %xmm0, %xmm0 # sched: [9:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001933; HASWELL-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [4:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001934; HASWELL-NEXT: vrcpss %xmm1, %xmm1, %xmm1 # sched: [9:1.00]
1935; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001936; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001937;
1938; BTVER2-LABEL: test_rcpss:
1939; BTVER2: # BB#0:
1940; BTVER2-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:1.00]
1941; BTVER2-NEXT: vrcpss %xmm0, %xmm0, %xmm0 # sched: [7:1.00]
1942; BTVER2-NEXT: vrcpss %xmm1, %xmm1, %xmm1 # sched: [7:1.00]
1943; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1944; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00001945;
1946; ZNVER1-LABEL: test_rcpss:
1947; ZNVER1: # BB#0:
1948; ZNVER1-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [8:0.50]
1949; ZNVER1-NEXT: vrcpss %xmm0, %xmm0, %xmm0 # sched: [12:0.50]
1950; ZNVER1-NEXT: vrcpss %xmm1, %xmm1, %xmm1 # sched: [12:0.50]
1951; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
1952; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001953 %1 = insertelement <4 x float> undef, float %a0, i32 0
1954 %2 = call <4 x float> @llvm.x86.sse.rcp.ss(<4 x float> %1)
1955 %3 = load float, float *%a1, align 4
1956 %4 = insertelement <4 x float> undef, float %3, i32 0
1957 %5 = call <4 x float> @llvm.x86.sse.rcp.ss(<4 x float> %4)
1958 %6 = fadd <4 x float> %2, %5
1959 ret <4 x float> %6
1960}
1961declare <4 x float> @llvm.x86.sse.rcp.ss(<4 x float>) nounwind readnone
1962
1963define <4 x float> @test_rsqrtps(<4 x float> %a0, <4 x float> *%a1) {
1964; GENERIC-LABEL: test_rsqrtps:
1965; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00001966; GENERIC-NEXT: rsqrtps %xmm0, %xmm1 # sched: [5:1.00]
1967; GENERIC-NEXT: rsqrtps (%rdi), %xmm0 # sched: [11:1.00]
1968; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
1969; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001970;
1971; ATOM-LABEL: test_rsqrtps:
1972; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00001973; ATOM-NEXT: rsqrtps (%rdi), %xmm1 # sched: [10:5.00]
1974; ATOM-NEXT: rsqrtps %xmm0, %xmm0 # sched: [9:4.50]
1975; ATOM-NEXT: addps %xmm0, %xmm1 # sched: [5:5.00]
1976; ATOM-NEXT: movaps %xmm1, %xmm0 # sched: [1:0.50]
1977; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00001978;
1979; SLM-LABEL: test_rsqrtps:
1980; SLM: # BB#0:
1981; SLM-NEXT: rsqrtps (%rdi), %xmm1 # sched: [8:1.00]
1982; SLM-NEXT: rsqrtps %xmm0, %xmm0 # sched: [5:1.00]
1983; SLM-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
1984; SLM-NEXT: movaps %xmm1, %xmm0 # sched: [1:1.00]
1985; SLM-NEXT: retq # sched: [4:1.00]
1986;
1987; SANDY-LABEL: test_rsqrtps:
1988; SANDY: # BB#0:
1989; SANDY-NEXT: vrsqrtps %xmm0, %xmm0 # sched: [5:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001990; SANDY-NEXT: vrsqrtps (%rdi), %xmm1 # sched: [11:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001991; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00001992; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001993;
1994; HASWELL-LABEL: test_rsqrtps:
1995; HASWELL: # BB#0:
1996; HASWELL-NEXT: vrsqrtps %xmm0, %xmm0 # sched: [5:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001997; HASWELL-NEXT: vrsqrtps (%rdi), %xmm1 # sched: [9:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00001998; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00001999; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002000;
2001; BTVER2-LABEL: test_rsqrtps:
2002; BTVER2: # BB#0:
2003; BTVER2-NEXT: vrsqrtps (%rdi), %xmm1 # sched: [7:1.00]
2004; BTVER2-NEXT: vrsqrtps %xmm0, %xmm0 # sched: [2:1.00]
2005; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2006; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002007;
2008; ZNVER1-LABEL: test_rsqrtps:
2009; ZNVER1: # BB#0:
2010; ZNVER1-NEXT: vrsqrtps (%rdi), %xmm1 # sched: [12:0.50]
2011; ZNVER1-NEXT: vrsqrtps %xmm0, %xmm0 # sched: [5:0.50]
2012; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2013; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002014 %1 = call <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> %a0)
2015 %2 = load <4 x float>, <4 x float> *%a1, align 16
2016 %3 = call <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> %2)
2017 %4 = fadd <4 x float> %1, %3
2018 ret <4 x float> %4
2019}
2020declare <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float>) nounwind readnone
2021
2022; TODO - rsqrtss_m
2023
2024define <4 x float> @test_rsqrtss(float %a0, float *%a1) {
2025; GENERIC-LABEL: test_rsqrtss:
2026; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002027; GENERIC-NEXT: rsqrtss %xmm0, %xmm0 # sched: [5:1.00]
2028; GENERIC-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [6:0.50]
2029; GENERIC-NEXT: rsqrtss %xmm1, %xmm1 # sched: [5:1.00]
2030; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
2031; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002032;
2033; ATOM-LABEL: test_rsqrtss:
2034; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002035; ATOM-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002036; ATOM-NEXT: rsqrtss %xmm0, %xmm0
2037; ATOM-NEXT: rsqrtss %xmm1, %xmm1
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002038; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
2039; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002040;
2041; SLM-LABEL: test_rsqrtss:
2042; SLM: # BB#0:
2043; SLM-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [3:1.00]
2044; SLM-NEXT: rsqrtss %xmm0, %xmm0 # sched: [8:1.00]
2045; SLM-NEXT: rsqrtss %xmm1, %xmm1 # sched: [8:1.00]
2046; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
2047; SLM-NEXT: retq # sched: [4:1.00]
2048;
2049; SANDY-LABEL: test_rsqrtss:
2050; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00002051; SANDY-NEXT: vrsqrtss %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
2052; SANDY-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [6:0.50]
2053; SANDY-NEXT: vrsqrtss %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002054; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002055; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002056;
2057; HASWELL-LABEL: test_rsqrtss:
2058; HASWELL: # BB#0:
2059; HASWELL-NEXT: vrsqrtss %xmm0, %xmm0, %xmm0 # sched: [5:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002060; HASWELL-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [4:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002061; HASWELL-NEXT: vrsqrtss %xmm1, %xmm1, %xmm1 # sched: [5:1.00]
2062; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002063; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002064;
2065; BTVER2-LABEL: test_rsqrtss:
2066; BTVER2: # BB#0:
2067; BTVER2-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [5:1.00]
2068; BTVER2-NEXT: vrsqrtss %xmm0, %xmm0, %xmm0 # sched: [7:1.00]
2069; BTVER2-NEXT: vrsqrtss %xmm1, %xmm1, %xmm1 # sched: [7:1.00]
2070; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2071; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002072;
2073; ZNVER1-LABEL: test_rsqrtss:
2074; ZNVER1: # BB#0:
2075; ZNVER1-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero sched: [8:0.50]
2076; ZNVER1-NEXT: vrsqrtss %xmm0, %xmm0, %xmm0 # sched: [12:0.50]
2077; ZNVER1-NEXT: vrsqrtss %xmm1, %xmm1, %xmm1 # sched: [12:0.50]
2078; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2079; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002080 %1 = insertelement <4 x float> undef, float %a0, i32 0
2081 %2 = call <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float> %1)
2082 %3 = load float, float *%a1, align 4
2083 %4 = insertelement <4 x float> undef, float %3, i32 0
2084 %5 = call <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float> %4)
2085 %6 = fadd <4 x float> %2, %5
2086 ret <4 x float> %6
2087}
2088declare <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float>) nounwind readnone
2089
2090define void @test_sfence() {
2091; GENERIC-LABEL: test_sfence:
2092; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002093; GENERIC-NEXT: sfence # sched: [1:1.00]
2094; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002095;
2096; ATOM-LABEL: test_sfence:
2097; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002098; ATOM-NEXT: sfence # sched: [1:1.00]
2099; ATOM-NEXT: nop # sched: [1:0.50]
2100; ATOM-NEXT: nop # sched: [1:0.50]
2101; ATOM-NEXT: nop # 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: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002106;
2107; SLM-LABEL: test_sfence:
2108; SLM: # BB#0:
2109; SLM-NEXT: sfence # sched: [1:1.00]
2110; SLM-NEXT: retq # sched: [4:1.00]
2111;
2112; SANDY-LABEL: test_sfence:
2113; SANDY: # BB#0:
2114; SANDY-NEXT: sfence # sched: [1:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002115; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002116;
2117; HASWELL-LABEL: test_sfence:
2118; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +00002119; HASWELL-NEXT: sfence # sched: [1:1.00]
2120; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002121;
2122; BTVER2-LABEL: test_sfence:
2123; BTVER2: # BB#0:
2124; BTVER2-NEXT: sfence # sched: [1:1.00]
2125; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002126;
2127; ZNVER1-LABEL: test_sfence:
2128; ZNVER1: # BB#0:
2129; ZNVER1-NEXT: sfence # sched: [1:0.50]
2130; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002131 call void @llvm.x86.sse.sfence()
2132 ret void
2133}
2134declare void @llvm.x86.sse.sfence() nounwind readnone
2135
2136define <4 x float> @test_shufps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) nounwind {
2137; GENERIC-LABEL: test_shufps:
2138; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002139; GENERIC-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
2140; GENERIC-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [7:1.00]
2141; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002142;
2143; ATOM-LABEL: test_shufps:
2144; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002145; ATOM-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
2146; ATOM-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [1:1.00]
2147; ATOM-NEXT: nop # sched: [1:0.50]
2148; ATOM-NEXT: nop # sched: [1:0.50]
2149; ATOM-NEXT: nop # sched: [1:0.50]
2150; ATOM-NEXT: nop # sched: [1:0.50]
2151; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002152;
2153; SLM-LABEL: test_shufps:
2154; SLM: # BB#0:
2155; SLM-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
2156; SLM-NEXT: shufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [4:1.00]
2157; SLM-NEXT: retq # sched: [4:1.00]
2158;
2159; SANDY-LABEL: test_shufps:
2160; SANDY: # BB#0:
2161; SANDY-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002162; SANDY-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [7:1.00]
2163; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002164;
2165; HASWELL-LABEL: test_shufps:
2166; HASWELL: # BB#0:
2167; HASWELL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002168; HASWELL-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [5:1.00]
2169; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002170;
2171; BTVER2-LABEL: test_shufps:
2172; BTVER2: # BB#0:
2173; BTVER2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:0.50]
2174; BTVER2-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [6:1.00]
2175; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002176;
2177; ZNVER1-LABEL: test_shufps:
2178; ZNVER1: # BB#0:
2179; ZNVER1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0] sched: [1:0.50]
2180; ZNVER1-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,3],mem[0,0] sched: [8:0.50]
2181; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002182 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 0, i32 4, i32 4>
2183 %2 = load <4 x float>, <4 x float> *%a2, align 16
2184 %3 = shufflevector <4 x float> %1, <4 x float> %2, <4 x i32> <i32 0, i32 3, i32 4, i32 4>
2185 ret <4 x float> %3
2186}
2187
2188define <4 x float> @test_sqrtps(<4 x float> %a0, <4 x float> *%a1) {
2189; GENERIC-LABEL: test_sqrtps:
2190; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002191; GENERIC-NEXT: sqrtps %xmm0, %xmm1 # sched: [14:1.00]
2192; GENERIC-NEXT: sqrtps (%rdi), %xmm0 # sched: [20:1.00]
2193; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
2194; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002195;
2196; ATOM-LABEL: test_sqrtps:
2197; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002198; ATOM-NEXT: sqrtps %xmm0, %xmm1 # sched: [70:35.00]
2199; ATOM-NEXT: sqrtps (%rdi), %xmm0 # sched: [70:35.00]
2200; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
2201; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002202;
2203; SLM-LABEL: test_sqrtps:
2204; SLM: # BB#0:
2205; SLM-NEXT: sqrtps (%rdi), %xmm1 # sched: [18:1.00]
2206; SLM-NEXT: sqrtps %xmm0, %xmm0 # sched: [15:1.00]
2207; SLM-NEXT: addps %xmm0, %xmm1 # sched: [3:1.00]
2208; SLM-NEXT: movaps %xmm1, %xmm0 # sched: [1:1.00]
2209; SLM-NEXT: retq # sched: [4:1.00]
2210;
2211; SANDY-LABEL: test_sqrtps:
2212; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00002213; SANDY-NEXT: vsqrtps %xmm0, %xmm0 # sched: [14:1.00]
2214; SANDY-NEXT: vsqrtps (%rdi), %xmm1 # sched: [20:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002215; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002216; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002217;
2218; HASWELL-LABEL: test_sqrtps:
2219; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +00002220; HASWELL-NEXT: vsqrtps %xmm0, %xmm0 # sched: [15:1.00]
2221; HASWELL-NEXT: vsqrtps (%rdi), %xmm1 # sched: [19:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002222; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002223; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002224;
2225; BTVER2-LABEL: test_sqrtps:
2226; BTVER2: # BB#0:
2227; BTVER2-NEXT: vsqrtps (%rdi), %xmm1 # sched: [26:21.00]
2228; BTVER2-NEXT: vsqrtps %xmm0, %xmm0 # sched: [21:21.00]
2229; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2230; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002231;
2232; ZNVER1-LABEL: test_sqrtps:
2233; ZNVER1: # BB#0:
2234; ZNVER1-NEXT: vsqrtps (%rdi), %xmm1 # sched: [27:1.00]
2235; ZNVER1-NEXT: vsqrtps %xmm0, %xmm0 # sched: [20:1.00]
2236; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2237; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002238 %1 = call <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float> %a0)
2239 %2 = load <4 x float>, <4 x float> *%a1, align 16
2240 %3 = call <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float> %2)
2241 %4 = fadd <4 x float> %1, %3
2242 ret <4 x float> %4
2243}
2244declare <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float>) nounwind readnone
2245
2246; TODO - sqrtss_m
2247
2248define <4 x float> @test_sqrtss(<4 x float> %a0, <4 x float> *%a1) {
2249; GENERIC-LABEL: test_sqrtss:
2250; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002251; GENERIC-NEXT: sqrtss %xmm0, %xmm0 # sched: [14:1.00]
2252; GENERIC-NEXT: movaps (%rdi), %xmm1 # sched: [6:0.50]
2253; GENERIC-NEXT: sqrtss %xmm1, %xmm1 # sched: [14:1.00]
2254; GENERIC-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
2255; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002256;
2257; ATOM-LABEL: test_sqrtss:
2258; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002259; ATOM-NEXT: movaps (%rdi), %xmm1 # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002260; ATOM-NEXT: sqrtss %xmm0, %xmm0
2261; ATOM-NEXT: sqrtss %xmm1, %xmm1
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002262; ATOM-NEXT: addps %xmm1, %xmm0 # sched: [5:5.00]
2263; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002264;
2265; SLM-LABEL: test_sqrtss:
2266; SLM: # BB#0:
2267; SLM-NEXT: movaps (%rdi), %xmm1 # sched: [3:1.00]
2268; SLM-NEXT: sqrtss %xmm0, %xmm0 # sched: [18:1.00]
2269; SLM-NEXT: sqrtss %xmm1, %xmm1 # sched: [18:1.00]
2270; SLM-NEXT: addps %xmm1, %xmm0 # sched: [3:1.00]
2271; SLM-NEXT: retq # sched: [4:1.00]
2272;
2273; SANDY-LABEL: test_sqrtss:
2274; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00002275; SANDY-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [114:1.00]
2276; SANDY-NEXT: vmovaps (%rdi), %xmm1 # sched: [6:0.50]
2277; SANDY-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [114:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002278; SANDY-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002279; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002280;
2281; HASWELL-LABEL: test_sqrtss:
2282; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +00002283; HASWELL-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [19:1.00]
2284; HASWELL-NEXT: vmovaps (%rdi), %xmm1 # sched: [4:0.50]
2285; HASWELL-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [19:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002286; HASWELL-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002287; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002288;
2289; BTVER2-LABEL: test_sqrtss:
2290; BTVER2: # BB#0:
2291; BTVER2-NEXT: vmovaps (%rdi), %xmm1 # sched: [5:1.00]
2292; BTVER2-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [26:21.00]
2293; BTVER2-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [26:21.00]
2294; BTVER2-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2295; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002296;
2297; ZNVER1-LABEL: test_sqrtss:
2298; ZNVER1: # BB#0:
2299; ZNVER1-NEXT: vmovaps (%rdi), %xmm1 # sched: [8:0.50]
2300; ZNVER1-NEXT: vsqrtss %xmm0, %xmm0, %xmm0 # sched: [27:1.00]
2301; ZNVER1-NEXT: vsqrtss %xmm1, %xmm1, %xmm1 # sched: [27:1.00]
2302; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2303; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002304 %1 = call <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float> %a0)
2305 %2 = load <4 x float>, <4 x float> *%a1, align 16
2306 %3 = call <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float> %2)
2307 %4 = fadd <4 x float> %1, %3
2308 ret <4 x float> %4
2309}
2310declare <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float>) nounwind readnone
2311
2312define i32 @test_stmxcsr() {
2313; GENERIC-LABEL: test_stmxcsr:
2314; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002315; GENERIC-NEXT: stmxcsr -{{[0-9]+}}(%rsp) # sched: [5:1.00]
2316; GENERIC-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
2317; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002318;
2319; ATOM-LABEL: test_stmxcsr:
2320; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002321; ATOM-NEXT: stmxcsr -{{[0-9]+}}(%rsp) # sched: [15:7.50]
2322; ATOM-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [1:1.00]
2323; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002324;
2325; SLM-LABEL: test_stmxcsr:
2326; SLM: # BB#0:
2327; SLM-NEXT: stmxcsr -{{[0-9]+}}(%rsp) # sched: [1:1.00]
2328; SLM-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [3:1.00]
2329; SLM-NEXT: retq # sched: [4:1.00]
2330;
2331; SANDY-LABEL: test_stmxcsr:
2332; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00002333; SANDY-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [5:1.00]
2334; SANDY-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:0.50]
2335; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002336;
2337; HASWELL-LABEL: test_stmxcsr:
2338; HASWELL: # BB#0:
Michael Zuckermanf6684002017-06-28 11:23:31 +00002339; HASWELL-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [7:1.00]
2340; HASWELL-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [4:0.50]
2341; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002342;
2343; BTVER2-LABEL: test_stmxcsr:
2344; BTVER2: # BB#0:
2345; BTVER2-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [1:1.00]
2346; BTVER2-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [5:1.00]
2347; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002348;
2349; ZNVER1-LABEL: test_stmxcsr:
2350; ZNVER1: # BB#0:
2351; ZNVER1-NEXT: vstmxcsr -{{[0-9]+}}(%rsp) # sched: [1:0.50]
2352; ZNVER1-NEXT: movl -{{[0-9]+}}(%rsp), %eax # sched: [8:0.50]
2353; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002354 %1 = alloca i32, align 4
2355 %2 = bitcast i32* %1 to i8*
2356 call void @llvm.x86.sse.stmxcsr(i8* %2)
2357 %3 = load i32, i32* %1, align 4
2358 ret i32 %3
2359}
2360declare void @llvm.x86.sse.stmxcsr(i8*) nounwind readnone
2361
2362define <4 x float> @test_subps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
2363; GENERIC-LABEL: test_subps:
2364; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002365; GENERIC-NEXT: subps %xmm1, %xmm0 # sched: [3:1.00]
2366; GENERIC-NEXT: subps (%rdi), %xmm0 # sched: [9:1.00]
2367; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002368;
2369; ATOM-LABEL: test_subps:
2370; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002371; ATOM-NEXT: subps %xmm1, %xmm0 # sched: [5:5.00]
2372; ATOM-NEXT: subps (%rdi), %xmm0 # sched: [5:5.00]
2373; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002374;
2375; SLM-LABEL: test_subps:
2376; SLM: # BB#0:
2377; SLM-NEXT: subps %xmm1, %xmm0 # sched: [3:1.00]
2378; SLM-NEXT: subps (%rdi), %xmm0 # sched: [6:1.00]
2379; SLM-NEXT: retq # sched: [4:1.00]
2380;
2381; SANDY-LABEL: test_subps:
2382; SANDY: # BB#0:
2383; SANDY-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002384; SANDY-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
2385; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002386;
2387; HASWELL-LABEL: test_subps:
2388; HASWELL: # BB#0:
2389; HASWELL-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002390; HASWELL-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
2391; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002392;
2393; BTVER2-LABEL: test_subps:
2394; BTVER2: # BB#0:
2395; BTVER2-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2396; BTVER2-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
2397; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002398;
2399; ZNVER1-LABEL: test_subps:
2400; ZNVER1: # BB#0:
2401; ZNVER1-NEXT: vsubps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2402; ZNVER1-NEXT: vsubps (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
2403; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002404 %1 = fsub <4 x float> %a0, %a1
2405 %2 = load <4 x float>, <4 x float> *%a2, align 16
2406 %3 = fsub <4 x float> %1, %2
2407 ret <4 x float> %3
2408}
2409
2410define float @test_subss(float %a0, float %a1, float *%a2) {
2411; GENERIC-LABEL: test_subss:
2412; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002413; GENERIC-NEXT: subss %xmm1, %xmm0 # sched: [3:1.00]
2414; GENERIC-NEXT: subss (%rdi), %xmm0 # sched: [9:1.00]
2415; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002416;
2417; ATOM-LABEL: test_subss:
2418; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002419; ATOM-NEXT: subss %xmm1, %xmm0 # sched: [5:5.00]
2420; ATOM-NEXT: subss (%rdi), %xmm0 # sched: [5:5.00]
2421; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002422;
2423; SLM-LABEL: test_subss:
2424; SLM: # BB#0:
2425; SLM-NEXT: subss %xmm1, %xmm0 # sched: [3:1.00]
2426; SLM-NEXT: subss (%rdi), %xmm0 # sched: [6:1.00]
2427; SLM-NEXT: retq # sched: [4:1.00]
2428;
2429; SANDY-LABEL: test_subss:
2430; SANDY: # BB#0:
2431; SANDY-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002432; SANDY-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
2433; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002434;
2435; HASWELL-LABEL: test_subss:
2436; HASWELL: # BB#0:
2437; HASWELL-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002438; HASWELL-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
2439; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002440;
2441; BTVER2-LABEL: test_subss:
2442; BTVER2: # BB#0:
2443; BTVER2-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2444; BTVER2-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [8:1.00]
2445; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002446;
2447; ZNVER1-LABEL: test_subss:
2448; ZNVER1: # BB#0:
2449; ZNVER1-NEXT: vsubss %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
2450; ZNVER1-NEXT: vsubss (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
2451; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002452 %1 = fsub float %a0, %a1
2453 %2 = load float, float *%a2, align 4
2454 %3 = fsub float %1, %2
2455 ret float %3
2456}
2457
2458define i32 @test_ucomiss(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
2459; GENERIC-LABEL: test_ucomiss:
2460; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002461; GENERIC-NEXT: ucomiss %xmm1, %xmm0 # sched: [3:1.00]
2462; GENERIC-NEXT: setnp %al # sched: [1:1.00]
2463; GENERIC-NEXT: sete %cl # sched: [1:1.00]
2464; GENERIC-NEXT: andb %al, %cl # sched: [1:0.33]
2465; GENERIC-NEXT: ucomiss (%rdi), %xmm0 # sched: [7:1.00]
2466; GENERIC-NEXT: setnp %al # sched: [1:1.00]
2467; GENERIC-NEXT: sete %dl # sched: [1:1.00]
2468; GENERIC-NEXT: andb %al, %dl # sched: [1:0.33]
2469; GENERIC-NEXT: orb %cl, %dl # sched: [1:0.33]
2470; GENERIC-NEXT: movzbl %dl, %eax # sched: [1:0.33]
2471; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002472;
2473; ATOM-LABEL: test_ucomiss:
2474; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002475; ATOM-NEXT: ucomiss %xmm1, %xmm0 # sched: [9:4.50]
2476; ATOM-NEXT: setnp %al # sched: [1:0.50]
2477; ATOM-NEXT: sete %cl # sched: [1:0.50]
2478; ATOM-NEXT: andb %al, %cl # sched: [1:0.50]
2479; ATOM-NEXT: ucomiss (%rdi), %xmm0 # sched: [10:5.00]
2480; ATOM-NEXT: setnp %al # sched: [1:0.50]
2481; ATOM-NEXT: sete %dl # sched: [1:0.50]
2482; ATOM-NEXT: andb %al, %dl # sched: [1:0.50]
2483; ATOM-NEXT: orb %cl, %dl # sched: [1:0.50]
2484; ATOM-NEXT: movzbl %dl, %eax # sched: [1:1.00]
2485; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002486;
2487; SLM-LABEL: test_ucomiss:
2488; SLM: # BB#0:
2489; SLM-NEXT: ucomiss %xmm1, %xmm0 # sched: [3:1.00]
2490; SLM-NEXT: setnp %al # sched: [1:0.50]
2491; SLM-NEXT: sete %cl # sched: [1:0.50]
2492; SLM-NEXT: andb %al, %cl # sched: [1:0.50]
2493; SLM-NEXT: ucomiss (%rdi), %xmm0 # sched: [6:1.00]
2494; SLM-NEXT: setnp %al # sched: [1:0.50]
2495; SLM-NEXT: sete %dl # sched: [1:0.50]
2496; SLM-NEXT: andb %al, %dl # sched: [1:0.50]
2497; SLM-NEXT: orb %cl, %dl # sched: [1:0.50]
2498; SLM-NEXT: movzbl %dl, %eax # sched: [1:0.50]
2499; SLM-NEXT: retq # sched: [4:1.00]
2500;
2501; SANDY-LABEL: test_ucomiss:
2502; SANDY: # BB#0:
2503; SANDY-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002504; SANDY-NEXT: setnp %al # sched: [1:1.00]
2505; SANDY-NEXT: sete %cl # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002506; SANDY-NEXT: andb %al, %cl # sched: [1:0.33]
2507; SANDY-NEXT: vucomiss (%rdi), %xmm0 # sched: [7:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002508; SANDY-NEXT: setnp %al # sched: [1:1.00]
2509; SANDY-NEXT: sete %dl # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002510; SANDY-NEXT: andb %al, %dl # sched: [1:0.33]
2511; SANDY-NEXT: orb %cl, %dl # sched: [1:0.33]
2512; SANDY-NEXT: movzbl %dl, %eax # sched: [1:0.33]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002513; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002514;
2515; HASWELL-LABEL: test_ucomiss:
2516; HASWELL: # BB#0:
2517; HASWELL-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002518; HASWELL-NEXT: setnp %al # sched: [1:0.50]
2519; HASWELL-NEXT: sete %cl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002520; HASWELL-NEXT: andb %al, %cl # sched: [1:0.25]
2521; HASWELL-NEXT: vucomiss (%rdi), %xmm0 # sched: [7:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002522; HASWELL-NEXT: setnp %al # sched: [1:0.50]
2523; HASWELL-NEXT: sete %dl # sched: [1:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002524; HASWELL-NEXT: andb %al, %dl # sched: [1:0.25]
2525; HASWELL-NEXT: orb %cl, %dl # sched: [1:0.25]
2526; HASWELL-NEXT: movzbl %dl, %eax # sched: [1:0.25]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002527; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002528;
2529; BTVER2-LABEL: test_ucomiss:
2530; BTVER2: # BB#0:
2531; BTVER2-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
2532; BTVER2-NEXT: setnp %al # sched: [1:0.50]
2533; BTVER2-NEXT: sete %cl # sched: [1:0.50]
2534; BTVER2-NEXT: andb %al, %cl # sched: [1:0.50]
2535; BTVER2-NEXT: vucomiss (%rdi), %xmm0 # sched: [8:1.00]
2536; BTVER2-NEXT: setnp %al # sched: [1:0.50]
2537; BTVER2-NEXT: sete %dl # sched: [1:0.50]
2538; BTVER2-NEXT: andb %al, %dl # sched: [1:0.50]
2539; BTVER2-NEXT: orb %cl, %dl # sched: [1:0.50]
2540; BTVER2-NEXT: movzbl %dl, %eax # sched: [1:0.50]
2541; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002542;
2543; ZNVER1-LABEL: test_ucomiss:
2544; ZNVER1: # BB#0:
2545; ZNVER1-NEXT: vucomiss %xmm1, %xmm0 # sched: [3:1.00]
2546; ZNVER1-NEXT: setnp %al # sched: [1:0.25]
2547; ZNVER1-NEXT: sete %cl # sched: [1:0.25]
2548; ZNVER1-NEXT: andb %al, %cl # sched: [1:0.25]
2549; ZNVER1-NEXT: vucomiss (%rdi), %xmm0 # sched: [10:1.00]
2550; ZNVER1-NEXT: setnp %al # sched: [1:0.25]
2551; ZNVER1-NEXT: sete %dl # sched: [1:0.25]
2552; ZNVER1-NEXT: andb %al, %dl # sched: [1:0.25]
2553; ZNVER1-NEXT: orb %cl, %dl # sched: [1:0.25]
2554; ZNVER1-NEXT: movzbl %dl, %eax # sched: [1:0.25]
2555; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002556 %1 = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %a1)
2557 %2 = load <4 x float>, <4 x float> *%a2, align 4
2558 %3 = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %2)
2559 %4 = or i32 %1, %3
2560 ret i32 %4
2561}
2562declare i32 @llvm.x86.sse.ucomieq.ss(<4 x float>, <4 x float>) nounwind readnone
2563
2564define <4 x float> @test_unpckhps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
2565; GENERIC-LABEL: test_unpckhps:
2566; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002567; GENERIC-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
2568; GENERIC-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [7:1.00]
2569; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002570;
2571; ATOM-LABEL: test_unpckhps:
2572; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002573; ATOM-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
2574; ATOM-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [1:1.00]
2575; ATOM-NEXT: nop # sched: [1:0.50]
2576; ATOM-NEXT: nop # sched: [1:0.50]
2577; ATOM-NEXT: nop # sched: [1:0.50]
2578; ATOM-NEXT: nop # sched: [1:0.50]
2579; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002580;
2581; SLM-LABEL: test_unpckhps:
2582; SLM: # BB#0:
2583; SLM-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
2584; SLM-NEXT: unpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [4:1.00]
2585; SLM-NEXT: retq # sched: [4:1.00]
2586;
2587; SANDY-LABEL: test_unpckhps:
2588; SANDY: # BB#0:
2589; SANDY-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002590; SANDY-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [7:1.00]
2591; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002592;
2593; HASWELL-LABEL: test_unpckhps:
2594; HASWELL: # BB#0:
2595; HASWELL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002596; HASWELL-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [5:1.00]
2597; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002598;
2599; BTVER2-LABEL: test_unpckhps:
2600; BTVER2: # BB#0:
2601; BTVER2-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50]
2602; BTVER2-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [6:1.00]
2603; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002604;
2605; ZNVER1-LABEL: test_unpckhps:
2606; ZNVER1: # BB#0:
2607; ZNVER1-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3] sched: [1:0.50]
2608; ZNVER1-NEXT: vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3] sched: [8:0.50]
2609; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002610 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2611 %2 = load <4 x float>, <4 x float> *%a2, align 16
2612 %3 = shufflevector <4 x float> %1, <4 x float> %2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2613 ret <4 x float> %3
2614}
2615
2616define <4 x float> @test_unpcklps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
2617; GENERIC-LABEL: test_unpcklps:
2618; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002619; GENERIC-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
2620; GENERIC-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [7:1.00]
2621; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002622;
2623; ATOM-LABEL: test_unpcklps:
2624; ATOM: # BB#0:
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002625; ATOM-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
2626; ATOM-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [1:1.00]
2627; ATOM-NEXT: nop # sched: [1:0.50]
2628; ATOM-NEXT: nop # sched: [1:0.50]
2629; ATOM-NEXT: nop # sched: [1:0.50]
2630; ATOM-NEXT: nop # sched: [1:0.50]
2631; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002632;
2633; SLM-LABEL: test_unpcklps:
2634; SLM: # BB#0:
2635; SLM-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
2636; SLM-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [4:1.00]
2637; SLM-NEXT: retq # sched: [4:1.00]
2638;
2639; SANDY-LABEL: test_unpcklps:
2640; SANDY: # BB#0:
2641; SANDY-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Gadi Haberf4d154c2017-07-10 09:53:16 +00002642; SANDY-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [7:1.00]
2643; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002644;
2645; HASWELL-LABEL: test_unpcklps:
2646; HASWELL: # BB#0:
2647; HASWELL-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002648; HASWELL-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [5:1.00]
2649; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002650;
2651; BTVER2-LABEL: test_unpcklps:
2652; BTVER2: # BB#0:
2653; BTVER2-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:0.50]
2654; BTVER2-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [6:1.00]
2655; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002656;
2657; ZNVER1-LABEL: test_unpcklps:
2658; ZNVER1: # BB#0:
2659; ZNVER1-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] sched: [1:0.50]
2660; ZNVER1-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1] sched: [8:0.50]
2661; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002662 %1 = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2663 %2 = load <4 x float>, <4 x float> *%a2, align 16
2664 %3 = shufflevector <4 x float> %1, <4 x float> %2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2665 ret <4 x float> %3
2666}
2667
2668define <4 x float> @test_xorps(<4 x float> %a0, <4 x float> %a1, <4 x float> *%a2) {
2669; GENERIC-LABEL: test_xorps:
2670; GENERIC: # BB#0:
Simon Pilgrim84846982017-08-01 15:14:35 +00002671; GENERIC-NEXT: xorps %xmm1, %xmm0 # sched: [1:1.00]
2672; GENERIC-NEXT: xorps (%rdi), %xmm0 # sched: [7:1.00]
2673; GENERIC-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002674;
2675; ATOM-LABEL: test_xorps:
2676; ATOM: # BB#0:
Simon Pilgrim486072d2017-08-01 17:51:20 +00002677; ATOM-NEXT: xorps %xmm1, %xmm0 # sched: [1:0.50]
2678; ATOM-NEXT: xorps (%rdi), %xmm0 # sched: [1:1.00]
Andrew V. Tischenkod5659512017-08-01 09:15:43 +00002679; ATOM-NEXT: nop # sched: [1:0.50]
2680; ATOM-NEXT: nop # sched: [1:0.50]
2681; ATOM-NEXT: nop # sched: [1:0.50]
2682; ATOM-NEXT: nop # sched: [1:0.50]
2683; ATOM-NEXT: retq # sched: [79:39.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002684;
2685; SLM-LABEL: test_xorps:
2686; SLM: # BB#0:
2687; SLM-NEXT: xorps %xmm1, %xmm0 # sched: [1:0.50]
2688; SLM-NEXT: xorps (%rdi), %xmm0 # sched: [4:1.00]
2689; SLM-NEXT: retq # sched: [4:1.00]
2690;
2691; SANDY-LABEL: test_xorps:
2692; SANDY: # BB#0:
Gadi Haberf4d154c2017-07-10 09:53:16 +00002693; SANDY-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
2694; SANDY-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
2695; SANDY-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002696;
2697; HASWELL-LABEL: test_xorps:
2698; HASWELL: # BB#0:
2699; HASWELL-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:1.00]
Michael Zuckermanf6684002017-06-28 11:23:31 +00002700; HASWELL-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [5:1.00]
2701; HASWELL-NEXT: retq # sched: [1:1.00]
Simon Pilgrim93986492017-04-18 19:04:40 +00002702;
2703; BTVER2-LABEL: test_xorps:
2704; BTVER2: # BB#0:
2705; BTVER2-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
2706; BTVER2-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
2707; BTVER2-NEXT: retq # sched: [4:1.00]
Craig Topper106b5b62017-07-19 02:45:14 +00002708;
2709; ZNVER1-LABEL: test_xorps:
2710; ZNVER1: # BB#0:
2711; ZNVER1-NEXT: vxorps %xmm1, %xmm0, %xmm0 # sched: [1:0.25]
2712; ZNVER1-NEXT: vxorps (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
2713; ZNVER1-NEXT: retq # sched: [5:0.50]
Simon Pilgrim93986492017-04-18 19:04:40 +00002714 %1 = bitcast <4 x float> %a0 to <4 x i32>
2715 %2 = bitcast <4 x float> %a1 to <4 x i32>
2716 %3 = xor <4 x i32> %1, %2
2717 %4 = load <4 x float>, <4 x float> *%a2, align 16
2718 %5 = bitcast <4 x float> %4 to <4 x i32>
2719 %6 = xor <4 x i32> %3, %5
2720 %7 = bitcast <4 x i32> %6 to <4 x float>
2721 ret <4 x float> %7
2722}
2723
2724!0 = !{i32 1}