• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i386-apple-darwin -mattr=-avx,+sse | FileCheck %s --check-prefix=SSE
3; RUN: llc < %s -mtriple=i386-apple-darwin -mcpu=knl | FileCheck %s --check-prefix=KNL
4
5define <4 x float> @test_x86_sse_add_ss(<4 x float> %a0, <4 x float> %a1) {
6; SSE-LABEL: test_x86_sse_add_ss:
7; SSE:       ## BB#0:
8; SSE-NEXT:    addss %xmm1, %xmm0
9; SSE-NEXT:    retl
10;
11; KNL-LABEL: test_x86_sse_add_ss:
12; KNL:       ## BB#0:
13; KNL-NEXT:    vaddss %xmm1, %xmm0, %xmm0
14; KNL-NEXT:    retl
15  %res = call <4 x float> @llvm.x86.sse.add.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
16  ret <4 x float> %res
17}
18declare <4 x float> @llvm.x86.sse.add.ss(<4 x float>, <4 x float>) nounwind readnone
19
20
21define <4 x float> @test_x86_sse_cmp_ps(<4 x float> %a0, <4 x float> %a1) {
22; SSE-LABEL: test_x86_sse_cmp_ps:
23; SSE:       ## BB#0:
24; SSE-NEXT:    cmpordps %xmm1, %xmm0
25; SSE-NEXT:    retl
26;
27; KNL-LABEL: test_x86_sse_cmp_ps:
28; KNL:       ## BB#0:
29; KNL-NEXT:    vcmpordps %xmm1, %xmm0, %xmm0
30; KNL-NEXT:    retl
31  %res = call <4 x float> @llvm.x86.sse.cmp.ps(<4 x float> %a0, <4 x float> %a1, i8 7) ; <<4 x float>> [#uses=1]
32  ret <4 x float> %res
33}
34declare <4 x float> @llvm.x86.sse.cmp.ps(<4 x float>, <4 x float>, i8) nounwind readnone
35
36
37define <4 x float> @test_x86_sse_cmp_ss(<4 x float> %a0, <4 x float> %a1) {
38; SSE-LABEL: test_x86_sse_cmp_ss:
39; SSE:       ## BB#0:
40; SSE-NEXT:    cmpordss %xmm1, %xmm0
41; SSE-NEXT:    retl
42;
43; KNL-LABEL: test_x86_sse_cmp_ss:
44; KNL:       ## BB#0:
45; KNL-NEXT:    vcmpordss %xmm1, %xmm0, %xmm0
46; KNL-NEXT:    retl
47  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 7) ; <<4 x float>> [#uses=1]
48  ret <4 x float> %res
49}
50declare <4 x float> @llvm.x86.sse.cmp.ss(<4 x float>, <4 x float>, i8) nounwind readnone
51
52
53define i32 @test_x86_sse_comieq_ss(<4 x float> %a0, <4 x float> %a1) {
54; SSE-LABEL: test_x86_sse_comieq_ss:
55; SSE:       ## BB#0:
56; SSE-NEXT:    comiss %xmm1, %xmm0
57; SSE-NEXT:    setnp %al
58; SSE-NEXT:    sete %cl
59; SSE-NEXT:    andb %al, %cl
60; SSE-NEXT:    movzbl %cl, %eax
61; SSE-NEXT:    retl
62;
63; KNL-LABEL: test_x86_sse_comieq_ss:
64; KNL:       ## BB#0:
65; KNL-NEXT:    vcomiss %xmm1, %xmm0
66; KNL-NEXT:    setnp %al
67; KNL-NEXT:    sete %cl
68; KNL-NEXT:    andb %al, %cl
69; KNL-NEXT:    movzbl %cl, %eax
70; KNL-NEXT:    retl
71  %res = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
72  ret i32 %res
73}
74declare i32 @llvm.x86.sse.comieq.ss(<4 x float>, <4 x float>) nounwind readnone
75
76
77define i32 @test_x86_sse_comige_ss(<4 x float> %a0, <4 x float> %a1) {
78; SSE-LABEL: test_x86_sse_comige_ss:
79; SSE:       ## BB#0:
80; SSE-NEXT:    xorl %eax, %eax
81; SSE-NEXT:    comiss %xmm1, %xmm0
82; SSE-NEXT:    setae %al
83; SSE-NEXT:    retl
84;
85; KNL-LABEL: test_x86_sse_comige_ss:
86; KNL:       ## BB#0:
87; KNL-NEXT:    xorl %eax, %eax
88; KNL-NEXT:    vcomiss %xmm1, %xmm0
89; KNL-NEXT:    setae %al
90; KNL-NEXT:    retl
91  %res = call i32 @llvm.x86.sse.comige.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
92  ret i32 %res
93}
94declare i32 @llvm.x86.sse.comige.ss(<4 x float>, <4 x float>) nounwind readnone
95
96
97define i32 @test_x86_sse_comigt_ss(<4 x float> %a0, <4 x float> %a1) {
98; SSE-LABEL: test_x86_sse_comigt_ss:
99; SSE:       ## BB#0:
100; SSE-NEXT:    xorl %eax, %eax
101; SSE-NEXT:    comiss %xmm1, %xmm0
102; SSE-NEXT:    seta %al
103; SSE-NEXT:    retl
104;
105; KNL-LABEL: test_x86_sse_comigt_ss:
106; KNL:       ## BB#0:
107; KNL-NEXT:    xorl %eax, %eax
108; KNL-NEXT:    vcomiss %xmm1, %xmm0
109; KNL-NEXT:    seta %al
110; KNL-NEXT:    retl
111  %res = call i32 @llvm.x86.sse.comigt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
112  ret i32 %res
113}
114declare i32 @llvm.x86.sse.comigt.ss(<4 x float>, <4 x float>) nounwind readnone
115
116
117define i32 @test_x86_sse_comile_ss(<4 x float> %a0, <4 x float> %a1) {
118; SSE-LABEL: test_x86_sse_comile_ss:
119; SSE:       ## BB#0:
120; SSE-NEXT:    xorl %eax, %eax
121; SSE-NEXT:    comiss %xmm0, %xmm1
122; SSE-NEXT:    setae %al
123; SSE-NEXT:    retl
124;
125; KNL-LABEL: test_x86_sse_comile_ss:
126; KNL:       ## BB#0:
127; KNL-NEXT:    xorl %eax, %eax
128; KNL-NEXT:    vcomiss %xmm0, %xmm1
129; KNL-NEXT:    setae %al
130; KNL-NEXT:    retl
131  %res = call i32 @llvm.x86.sse.comile.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
132  ret i32 %res
133}
134declare i32 @llvm.x86.sse.comile.ss(<4 x float>, <4 x float>) nounwind readnone
135
136
137define i32 @test_x86_sse_comilt_ss(<4 x float> %a0, <4 x float> %a1) {
138; SSE-LABEL: test_x86_sse_comilt_ss:
139; SSE:       ## BB#0:
140; SSE-NEXT:    xorl %eax, %eax
141; SSE-NEXT:    comiss %xmm0, %xmm1
142; SSE-NEXT:    seta %al
143; SSE-NEXT:    retl
144;
145; KNL-LABEL: test_x86_sse_comilt_ss:
146; KNL:       ## BB#0:
147; KNL-NEXT:    xorl %eax, %eax
148; KNL-NEXT:    vcomiss %xmm0, %xmm1
149; KNL-NEXT:    seta %al
150; KNL-NEXT:    retl
151  %res = call i32 @llvm.x86.sse.comilt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
152  ret i32 %res
153}
154declare i32 @llvm.x86.sse.comilt.ss(<4 x float>, <4 x float>) nounwind readnone
155
156
157define i32 @test_x86_sse_comineq_ss(<4 x float> %a0, <4 x float> %a1) {
158; SSE-LABEL: test_x86_sse_comineq_ss:
159; SSE:       ## BB#0:
160; SSE-NEXT:    comiss %xmm1, %xmm0
161; SSE-NEXT:    setp %al
162; SSE-NEXT:    setne %cl
163; SSE-NEXT:    orb %al, %cl
164; SSE-NEXT:    movzbl %cl, %eax
165; SSE-NEXT:    retl
166;
167; KNL-LABEL: test_x86_sse_comineq_ss:
168; KNL:       ## BB#0:
169; KNL-NEXT:    vcomiss %xmm1, %xmm0
170; KNL-NEXT:    setp %al
171; KNL-NEXT:    setne %cl
172; KNL-NEXT:    orb %al, %cl
173; KNL-NEXT:    movzbl %cl, %eax
174; KNL-NEXT:    retl
175  %res = call i32 @llvm.x86.sse.comineq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
176  ret i32 %res
177}
178declare i32 @llvm.x86.sse.comineq.ss(<4 x float>, <4 x float>) nounwind readnone
179
180
181define <4 x float> @test_x86_sse_cvtsi2ss(<4 x float> %a0) {
182; SSE-LABEL: test_x86_sse_cvtsi2ss:
183; SSE:       ## BB#0:
184; SSE-NEXT:    movl $7, %eax
185; SSE-NEXT:    cvtsi2ssl %eax, %xmm0
186; SSE-NEXT:    retl
187;
188; KNL-LABEL: test_x86_sse_cvtsi2ss:
189; KNL:       ## BB#0:
190; KNL-NEXT:    movl $7, %eax
191; KNL-NEXT:    vcvtsi2ssl %eax, %xmm0, %xmm0
192; KNL-NEXT:    retl
193  %res = call <4 x float> @llvm.x86.sse.cvtsi2ss(<4 x float> %a0, i32 7) ; <<4 x float>> [#uses=1]
194  ret <4 x float> %res
195}
196declare <4 x float> @llvm.x86.sse.cvtsi2ss(<4 x float>, i32) nounwind readnone
197
198
199define i32 @test_x86_sse_cvtss2si(<4 x float> %a0) {
200; SSE-LABEL: test_x86_sse_cvtss2si:
201; SSE:       ## BB#0:
202; SSE-NEXT:    cvtss2si %xmm0, %eax
203; SSE-NEXT:    retl
204;
205; KNL-LABEL: test_x86_sse_cvtss2si:
206; KNL:       ## BB#0:
207; KNL-NEXT:    vcvtss2si %xmm0, %eax
208; KNL-NEXT:    retl
209  %res = call i32 @llvm.x86.sse.cvtss2si(<4 x float> %a0) ; <i32> [#uses=1]
210  ret i32 %res
211}
212declare i32 @llvm.x86.sse.cvtss2si(<4 x float>) nounwind readnone
213
214
215define i32 @test_x86_sse_cvttss2si(<4 x float> %a0) {
216; SSE-LABEL: test_x86_sse_cvttss2si:
217; SSE:       ## BB#0:
218; SSE-NEXT:    cvttss2si %xmm0, %eax
219; SSE-NEXT:    retl
220;
221; KNL-LABEL: test_x86_sse_cvttss2si:
222; KNL:       ## BB#0:
223; KNL-NEXT:    vcvttss2si %xmm0, %eax
224; KNL-NEXT:    retl
225  %res = call i32 @llvm.x86.sse.cvttss2si(<4 x float> %a0) ; <i32> [#uses=1]
226  ret i32 %res
227}
228declare i32 @llvm.x86.sse.cvttss2si(<4 x float>) nounwind readnone
229
230
231define <4 x float> @test_x86_sse_div_ss(<4 x float> %a0, <4 x float> %a1) {
232; SSE-LABEL: test_x86_sse_div_ss:
233; SSE:       ## BB#0:
234; SSE-NEXT:    divss %xmm1, %xmm0
235; SSE-NEXT:    retl
236;
237; KNL-LABEL: test_x86_sse_div_ss:
238; KNL:       ## BB#0:
239; KNL-NEXT:    vdivss %xmm1, %xmm0, %xmm0
240; KNL-NEXT:    retl
241  %res = call <4 x float> @llvm.x86.sse.div.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
242  ret <4 x float> %res
243}
244declare <4 x float> @llvm.x86.sse.div.ss(<4 x float>, <4 x float>) nounwind readnone
245
246
247define void @test_x86_sse_ldmxcsr(i8* %a0) {
248; SSE-LABEL: test_x86_sse_ldmxcsr:
249; SSE:       ## BB#0:
250; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
251; SSE-NEXT:    ldmxcsr (%eax)
252; SSE-NEXT:    retl
253;
254; KNL-LABEL: test_x86_sse_ldmxcsr:
255; KNL:       ## BB#0:
256; KNL-NEXT:    movl {{[0-9]+}}(%esp), %eax
257; KNL-NEXT:    vldmxcsr (%eax)
258; KNL-NEXT:    retl
259  call void @llvm.x86.sse.ldmxcsr(i8* %a0)
260  ret void
261}
262declare void @llvm.x86.sse.ldmxcsr(i8*) nounwind
263
264
265
266define <4 x float> @test_x86_sse_max_ps(<4 x float> %a0, <4 x float> %a1) {
267; SSE-LABEL: test_x86_sse_max_ps:
268; SSE:       ## BB#0:
269; SSE-NEXT:    maxps %xmm1, %xmm0
270; SSE-NEXT:    retl
271;
272; KNL-LABEL: test_x86_sse_max_ps:
273; KNL:       ## BB#0:
274; KNL-NEXT:    vmaxps %xmm1, %xmm0, %xmm0
275; KNL-NEXT:    retl
276  %res = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
277  ret <4 x float> %res
278}
279declare <4 x float> @llvm.x86.sse.max.ps(<4 x float>, <4 x float>) nounwind readnone
280
281
282define <4 x float> @test_x86_sse_max_ss(<4 x float> %a0, <4 x float> %a1) {
283; SSE-LABEL: test_x86_sse_max_ss:
284; SSE:       ## BB#0:
285; SSE-NEXT:    maxss %xmm1, %xmm0
286; SSE-NEXT:    retl
287;
288; KNL-LABEL: test_x86_sse_max_ss:
289; KNL:       ## BB#0:
290; KNL-NEXT:    vmaxss %xmm1, %xmm0, %xmm0
291; KNL-NEXT:    retl
292  %res = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
293  ret <4 x float> %res
294}
295declare <4 x float> @llvm.x86.sse.max.ss(<4 x float>, <4 x float>) nounwind readnone
296
297
298define <4 x float> @test_x86_sse_min_ps(<4 x float> %a0, <4 x float> %a1) {
299; SSE-LABEL: test_x86_sse_min_ps:
300; SSE:       ## BB#0:
301; SSE-NEXT:    minps %xmm1, %xmm0
302; SSE-NEXT:    retl
303;
304; KNL-LABEL: test_x86_sse_min_ps:
305; KNL:       ## BB#0:
306; KNL-NEXT:    vminps %xmm1, %xmm0, %xmm0
307; KNL-NEXT:    retl
308  %res = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
309  ret <4 x float> %res
310}
311declare <4 x float> @llvm.x86.sse.min.ps(<4 x float>, <4 x float>) nounwind readnone
312
313
314define <4 x float> @test_x86_sse_min_ss(<4 x float> %a0, <4 x float> %a1) {
315; SSE-LABEL: test_x86_sse_min_ss:
316; SSE:       ## BB#0:
317; SSE-NEXT:    minss %xmm1, %xmm0
318; SSE-NEXT:    retl
319;
320; KNL-LABEL: test_x86_sse_min_ss:
321; KNL:       ## BB#0:
322; KNL-NEXT:    vminss %xmm1, %xmm0, %xmm0
323; KNL-NEXT:    retl
324  %res = call <4 x float> @llvm.x86.sse.min.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
325  ret <4 x float> %res
326}
327declare <4 x float> @llvm.x86.sse.min.ss(<4 x float>, <4 x float>) nounwind readnone
328
329
330define i32 @test_x86_sse_movmsk_ps(<4 x float> %a0) {
331; SSE-LABEL: test_x86_sse_movmsk_ps:
332; SSE:       ## BB#0:
333; SSE-NEXT:    movmskps %xmm0, %eax
334; SSE-NEXT:    retl
335;
336; KNL-LABEL: test_x86_sse_movmsk_ps:
337; KNL:       ## BB#0:
338; KNL-NEXT:    vmovmskps %xmm0, %eax
339; KNL-NEXT:    retl
340  %res = call i32 @llvm.x86.sse.movmsk.ps(<4 x float> %a0) ; <i32> [#uses=1]
341  ret i32 %res
342}
343declare i32 @llvm.x86.sse.movmsk.ps(<4 x float>) nounwind readnone
344
345
346
347define <4 x float> @test_x86_sse_mul_ss(<4 x float> %a0, <4 x float> %a1) {
348; SSE-LABEL: test_x86_sse_mul_ss:
349; SSE:       ## BB#0:
350; SSE-NEXT:    mulss %xmm1, %xmm0
351; SSE-NEXT:    retl
352;
353; KNL-LABEL: test_x86_sse_mul_ss:
354; KNL:       ## BB#0:
355; KNL-NEXT:    vmulss %xmm1, %xmm0, %xmm0
356; KNL-NEXT:    retl
357  %res = call <4 x float> @llvm.x86.sse.mul.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
358  ret <4 x float> %res
359}
360declare <4 x float> @llvm.x86.sse.mul.ss(<4 x float>, <4 x float>) nounwind readnone
361
362
363define <4 x float> @test_x86_sse_rcp_ps(<4 x float> %a0) {
364; SSE-LABEL: test_x86_sse_rcp_ps:
365; SSE:       ## BB#0:
366; SSE-NEXT:    rcpps %xmm0, %xmm0
367; SSE-NEXT:    retl
368;
369; KNL-LABEL: test_x86_sse_rcp_ps:
370; KNL:       ## BB#0:
371; KNL-NEXT:    vrcpps %xmm0, %xmm0
372; KNL-NEXT:    retl
373  %res = call <4 x float> @llvm.x86.sse.rcp.ps(<4 x float> %a0) ; <<4 x float>> [#uses=1]
374  ret <4 x float> %res
375}
376declare <4 x float> @llvm.x86.sse.rcp.ps(<4 x float>) nounwind readnone
377
378
379define <4 x float> @test_x86_sse_rcp_ss(<4 x float> %a0) {
380; SSE-LABEL: test_x86_sse_rcp_ss:
381; SSE:       ## BB#0:
382; SSE-NEXT:    rcpss %xmm0, %xmm0
383; SSE-NEXT:    retl
384;
385; KNL-LABEL: test_x86_sse_rcp_ss:
386; KNL:       ## BB#0:
387; KNL-NEXT:    vrcpss %xmm0, %xmm0, %xmm0
388; KNL-NEXT:    retl
389  %res = call <4 x float> @llvm.x86.sse.rcp.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
390  ret <4 x float> %res
391}
392declare <4 x float> @llvm.x86.sse.rcp.ss(<4 x float>) nounwind readnone
393
394
395define <4 x float> @test_x86_sse_rsqrt_ps(<4 x float> %a0) {
396; SSE-LABEL: test_x86_sse_rsqrt_ps:
397; SSE:       ## BB#0:
398; SSE-NEXT:    rsqrtps %xmm0, %xmm0
399; SSE-NEXT:    retl
400;
401; KNL-LABEL: test_x86_sse_rsqrt_ps:
402; KNL:       ## BB#0:
403; KNL-NEXT:    vrsqrtps %xmm0, %xmm0
404; KNL-NEXT:    retl
405  %res = call <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> %a0) ; <<4 x float>> [#uses=1]
406  ret <4 x float> %res
407}
408declare <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float>) nounwind readnone
409
410
411define <4 x float> @test_x86_sse_rsqrt_ss(<4 x float> %a0) {
412; SSE-LABEL: test_x86_sse_rsqrt_ss:
413; SSE:       ## BB#0:
414; SSE-NEXT:    rsqrtss %xmm0, %xmm0
415; SSE-NEXT:    retl
416;
417; KNL-LABEL: test_x86_sse_rsqrt_ss:
418; KNL:       ## BB#0:
419; KNL-NEXT:    vrsqrtss %xmm0, %xmm0, %xmm0
420; KNL-NEXT:    retl
421  %res = call <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
422  ret <4 x float> %res
423}
424declare <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float>) nounwind readnone
425
426
427define <4 x float> @test_x86_sse_sqrt_ps(<4 x float> %a0) {
428; SSE-LABEL: test_x86_sse_sqrt_ps:
429; SSE:       ## BB#0:
430; SSE-NEXT:    sqrtps %xmm0, %xmm0
431; SSE-NEXT:    retl
432;
433; KNL-LABEL: test_x86_sse_sqrt_ps:
434; KNL:       ## BB#0:
435; KNL-NEXT:    vsqrtps %xmm0, %xmm0
436; KNL-NEXT:    retl
437  %res = call <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float> %a0) ; <<4 x float>> [#uses=1]
438  ret <4 x float> %res
439}
440declare <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float>) nounwind readnone
441
442
443define <4 x float> @test_x86_sse_sqrt_ss(<4 x float> %a0) {
444; SSE-LABEL: test_x86_sse_sqrt_ss:
445; SSE:       ## BB#0:
446; SSE-NEXT:    sqrtss %xmm0, %xmm0
447; SSE-NEXT:    retl
448;
449; KNL-LABEL: test_x86_sse_sqrt_ss:
450; KNL:       ## BB#0:
451; KNL-NEXT:    vsqrtss %xmm0, %xmm0, %xmm0
452; KNL-NEXT:    retl
453  %res = call <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float> %a0) ; <<4 x float>> [#uses=1]
454  ret <4 x float> %res
455}
456declare <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float>) nounwind readnone
457
458
459define void @test_x86_sse_stmxcsr(i8* %a0) {
460; SSE-LABEL: test_x86_sse_stmxcsr:
461; SSE:       ## BB#0:
462; SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
463; SSE-NEXT:    stmxcsr (%eax)
464; SSE-NEXT:    retl
465;
466; KNL-LABEL: test_x86_sse_stmxcsr:
467; KNL:       ## BB#0:
468; KNL-NEXT:    movl {{[0-9]+}}(%esp), %eax
469; KNL-NEXT:    vstmxcsr (%eax)
470; KNL-NEXT:    retl
471  call void @llvm.x86.sse.stmxcsr(i8* %a0)
472  ret void
473}
474declare void @llvm.x86.sse.stmxcsr(i8*) nounwind
475
476
477define <4 x float> @test_x86_sse_sub_ss(<4 x float> %a0, <4 x float> %a1) {
478; SSE-LABEL: test_x86_sse_sub_ss:
479; SSE:       ## BB#0:
480; SSE-NEXT:    subss %xmm1, %xmm0
481; SSE-NEXT:    retl
482;
483; KNL-LABEL: test_x86_sse_sub_ss:
484; KNL:       ## BB#0:
485; KNL-NEXT:    vsubss %xmm1, %xmm0, %xmm0
486; KNL-NEXT:    retl
487  %res = call <4 x float> @llvm.x86.sse.sub.ss(<4 x float> %a0, <4 x float> %a1) ; <<4 x float>> [#uses=1]
488  ret <4 x float> %res
489}
490declare <4 x float> @llvm.x86.sse.sub.ss(<4 x float>, <4 x float>) nounwind readnone
491
492
493define i32 @test_x86_sse_ucomieq_ss(<4 x float> %a0, <4 x float> %a1) {
494; SSE-LABEL: test_x86_sse_ucomieq_ss:
495; SSE:       ## BB#0:
496; SSE-NEXT:    ucomiss %xmm1, %xmm0
497; SSE-NEXT:    setnp %al
498; SSE-NEXT:    sete %cl
499; SSE-NEXT:    andb %al, %cl
500; SSE-NEXT:    movzbl %cl, %eax
501; SSE-NEXT:    retl
502;
503; KNL-LABEL: test_x86_sse_ucomieq_ss:
504; KNL:       ## BB#0:
505; KNL-NEXT:    vucomiss %xmm1, %xmm0
506; KNL-NEXT:    setnp %al
507; KNL-NEXT:    sete %cl
508; KNL-NEXT:    andb %al, %cl
509; KNL-NEXT:    movzbl %cl, %eax
510; KNL-NEXT:    retl
511  %res = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
512  ret i32 %res
513}
514declare i32 @llvm.x86.sse.ucomieq.ss(<4 x float>, <4 x float>) nounwind readnone
515
516
517define i32 @test_x86_sse_ucomige_ss(<4 x float> %a0, <4 x float> %a1) {
518; SSE-LABEL: test_x86_sse_ucomige_ss:
519; SSE:       ## BB#0:
520; SSE-NEXT:    xorl %eax, %eax
521; SSE-NEXT:    ucomiss %xmm1, %xmm0
522; SSE-NEXT:    setae %al
523; SSE-NEXT:    retl
524;
525; KNL-LABEL: test_x86_sse_ucomige_ss:
526; KNL:       ## BB#0:
527; KNL-NEXT:    xorl %eax, %eax
528; KNL-NEXT:    vucomiss %xmm1, %xmm0
529; KNL-NEXT:    setae %al
530; KNL-NEXT:    retl
531  %res = call i32 @llvm.x86.sse.ucomige.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
532  ret i32 %res
533}
534declare i32 @llvm.x86.sse.ucomige.ss(<4 x float>, <4 x float>) nounwind readnone
535
536
537define i32 @test_x86_sse_ucomigt_ss(<4 x float> %a0, <4 x float> %a1) {
538; SSE-LABEL: test_x86_sse_ucomigt_ss:
539; SSE:       ## BB#0:
540; SSE-NEXT:    xorl %eax, %eax
541; SSE-NEXT:    ucomiss %xmm1, %xmm0
542; SSE-NEXT:    seta %al
543; SSE-NEXT:    retl
544;
545; KNL-LABEL: test_x86_sse_ucomigt_ss:
546; KNL:       ## BB#0:
547; KNL-NEXT:    xorl %eax, %eax
548; KNL-NEXT:    vucomiss %xmm1, %xmm0
549; KNL-NEXT:    seta %al
550; KNL-NEXT:    retl
551  %res = call i32 @llvm.x86.sse.ucomigt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
552  ret i32 %res
553}
554declare i32 @llvm.x86.sse.ucomigt.ss(<4 x float>, <4 x float>) nounwind readnone
555
556
557define i32 @test_x86_sse_ucomile_ss(<4 x float> %a0, <4 x float> %a1) {
558; SSE-LABEL: test_x86_sse_ucomile_ss:
559; SSE:       ## BB#0:
560; SSE-NEXT:    xorl %eax, %eax
561; SSE-NEXT:    ucomiss %xmm0, %xmm1
562; SSE-NEXT:    setae %al
563; SSE-NEXT:    retl
564;
565; KNL-LABEL: test_x86_sse_ucomile_ss:
566; KNL:       ## BB#0:
567; KNL-NEXT:    xorl %eax, %eax
568; KNL-NEXT:    vucomiss %xmm0, %xmm1
569; KNL-NEXT:    setae %al
570; KNL-NEXT:    retl
571  %res = call i32 @llvm.x86.sse.ucomile.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
572  ret i32 %res
573}
574declare i32 @llvm.x86.sse.ucomile.ss(<4 x float>, <4 x float>) nounwind readnone
575
576
577define i32 @test_x86_sse_ucomilt_ss(<4 x float> %a0, <4 x float> %a1) {
578; SSE-LABEL: test_x86_sse_ucomilt_ss:
579; SSE:       ## BB#0:
580; SSE-NEXT:    xorl %eax, %eax
581; SSE-NEXT:    ucomiss %xmm0, %xmm1
582; SSE-NEXT:    seta %al
583; SSE-NEXT:    retl
584;
585; KNL-LABEL: test_x86_sse_ucomilt_ss:
586; KNL:       ## BB#0:
587; KNL-NEXT:    xorl %eax, %eax
588; KNL-NEXT:    vucomiss %xmm0, %xmm1
589; KNL-NEXT:    seta %al
590; KNL-NEXT:    retl
591  %res = call i32 @llvm.x86.sse.ucomilt.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
592  ret i32 %res
593}
594declare i32 @llvm.x86.sse.ucomilt.ss(<4 x float>, <4 x float>) nounwind readnone
595
596
597define i32 @test_x86_sse_ucomineq_ss(<4 x float> %a0, <4 x float> %a1) {
598; SSE-LABEL: test_x86_sse_ucomineq_ss:
599; SSE:       ## BB#0:
600; SSE-NEXT:    ucomiss %xmm1, %xmm0
601; SSE-NEXT:    setp %al
602; SSE-NEXT:    setne %cl
603; SSE-NEXT:    orb %al, %cl
604; SSE-NEXT:    movzbl %cl, %eax
605; SSE-NEXT:    retl
606;
607; KNL-LABEL: test_x86_sse_ucomineq_ss:
608; KNL:       ## BB#0:
609; KNL-NEXT:    vucomiss %xmm1, %xmm0
610; KNL-NEXT:    setp %al
611; KNL-NEXT:    setne %cl
612; KNL-NEXT:    orb %al, %cl
613; KNL-NEXT:    movzbl %cl, %eax
614; KNL-NEXT:    retl
615  %res = call i32 @llvm.x86.sse.ucomineq.ss(<4 x float> %a0, <4 x float> %a1) ; <i32> [#uses=1]
616  ret i32 %res
617}
618declare i32 @llvm.x86.sse.ucomineq.ss(<4 x float>, <4 x float>) nounwind readnone
619