blob: c462121d9c0ff9543a1b91ebb2725683a5f73282 [file] [log] [blame]
Reid Spencer6e87ec42007-04-16 17:36:08 +00001; RUN: llvm-upgrade < %s | llvm-as | llc -march=x86 -mattr=+sse1,+sse2 | \
Dan Gohmanf9dd1702007-08-15 13:36:28 +00002; RUN: grep mins | count 3
Reid Spencer6e87ec42007-04-16 17:36:08 +00003; RUN: llvm-upgrade < %s | llvm-as | llc -march=x86 -mattr=+sse1,+sse2 | \
Dan Gohmanf9dd1702007-08-15 13:36:28 +00004; RUN: grep maxs | count 2
Chris Lattner1e21d3a2006-10-04 06:56:02 +00005
6declare bool %llvm.isunordered.f64( double %x, double %y )
7declare bool %llvm.isunordered.f32( float %x, float %y )
8
9implementation
10
11float %min1(float %x, float %y) {
12 %tmp = setlt float %x, %y ; <bool> [#uses=1]
13 %retval = select bool %tmp, float %x, float %y ; <float> [#uses=1]
14 ret float %retval
15}
16double %min2(double %x, double %y) {
17 %tmp = setlt double %x, %y
18 %retval = select bool %tmp, double %x, double %y
19 ret double %retval
20}
21
22float %max1(float %x, float %y) {
23 %tmp = setge float %x, %y ; <bool> [#uses=1]
24 %tmp2 = tail call bool %llvm.isunordered.f32( float %x, float %y )
25 %tmp3 = or bool %tmp2, %tmp ; <bool> [#uses=1]
26 %retval = select bool %tmp3, float %x, float %y
27 ret float %retval
28}
29
30double %max2(double %x, double %y) {
31 %tmp = setge double %x, %y ; <bool> [#uses=1]
32 %tmp2 = tail call bool %llvm.isunordered.f64( double %x, double %y )
33 %tmp3 = or bool %tmp2, %tmp ; <bool> [#uses=1]
34 %retval = select bool %tmp3, double %x, double %y
35 ret double %retval
36}
37
Evan Chenge415f192006-10-12 01:42:03 +000038<4 x float> %min3(float %tmp37) {
39 %tmp375 = insertelement <4 x float> undef, float %tmp37, uint 0
40 %tmp48 = tail call <4 x float> %llvm.x86.sse.min.ss( <4 x float> %tmp375, <4 x float> < float 6.553500e+04, float undef, float undef, float undef > )
41 ret <4 x float> %tmp48
42}
Chris Lattner1e21d3a2006-10-04 06:56:02 +000043
Evan Chenge415f192006-10-12 01:42:03 +000044declare <4 x float> %llvm.x86.sse.min.ss(<4 x float>, <4 x float>)