Reid Spencer | 6e87ec4 | 2007-04-16 17:36:08 +0000 | [diff] [blame] | 1 | ; RUN: llvm-upgrade < %s | llvm-as | llc -march=x86 -mattr=+sse1,+sse2 | \ |
Dan Gohman | f9dd170 | 2007-08-15 13:36:28 +0000 | [diff] [blame^] | 2 | ; RUN: grep mins | count 3 |
Reid Spencer | 6e87ec4 | 2007-04-16 17:36:08 +0000 | [diff] [blame] | 3 | ; RUN: llvm-upgrade < %s | llvm-as | llc -march=x86 -mattr=+sse1,+sse2 | \ |
Dan Gohman | f9dd170 | 2007-08-15 13:36:28 +0000 | [diff] [blame^] | 4 | ; RUN: grep maxs | count 2 |
Chris Lattner | 1e21d3a | 2006-10-04 06:56:02 +0000 | [diff] [blame] | 5 | |
| 6 | declare bool %llvm.isunordered.f64( double %x, double %y ) |
| 7 | declare bool %llvm.isunordered.f32( float %x, float %y ) |
| 8 | |
| 9 | implementation |
| 10 | |
| 11 | float %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 | } |
| 16 | double %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 | |
| 22 | float %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 | |
| 30 | double %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 Cheng | e415f19 | 2006-10-12 01:42:03 +0000 | [diff] [blame] | 38 | <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 Lattner | 1e21d3a | 2006-10-04 06:56:02 +0000 | [diff] [blame] | 43 | |
Evan Cheng | e415f19 | 2006-10-12 01:42:03 +0000 | [diff] [blame] | 44 | declare <4 x float> %llvm.x86.sse.min.ss(<4 x float>, <4 x float>) |