pattern match min/max nodes
authorChris Lattner <sabre@nondot.org>
Wed, 4 Oct 2006 06:56:02 +0000 (06:56 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 4 Oct 2006 06:56:02 +0000 (06:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30718 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGen/X86/scalar_sse_minmax.ll [new file with mode: 0644]

diff --git a/test/CodeGen/X86/scalar_sse_minmax.ll b/test/CodeGen/X86/scalar_sse_minmax.ll
new file mode 100644 (file)
index 0000000..b2217f9
--- /dev/null
@@ -0,0 +1,37 @@
+; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse1,+sse2 | grep mins | wc -l | grep 2 &&
+; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse1,+sse2 | grep maxs | wc -l | grep 2
+
+declare bool %llvm.isunordered.f64( double %x, double %y )
+declare bool %llvm.isunordered.f32( float %x, float %y )
+
+implementation
+
+float %min1(float %x, float %y) {
+        %tmp = setlt float %x, %y               ; <bool> [#uses=1]
+        %retval = select bool %tmp, float %x, float %y          ; <float> [#uses=1]
+        ret float %retval
+}
+double %min2(double %x, double %y) {
+        %tmp = setlt double %x, %y
+        %retval = select bool %tmp, double %x, double %y
+        ret double %retval
+}
+
+float %max1(float %x, float %y) {
+        %tmp = setge float %x, %y               ; <bool> [#uses=1]
+        %tmp2 = tail call bool %llvm.isunordered.f32( float %x, float %y )
+        %tmp3 = or bool %tmp2, %tmp             ; <bool> [#uses=1]
+        %retval = select bool %tmp3, float %x, float %y         
+        ret float %retval
+}
+
+double %max2(double %x, double %y) {
+        %tmp = setge double %x, %y               ; <bool> [#uses=1]
+        %tmp2 = tail call bool %llvm.isunordered.f64( double %x, double %y )
+        %tmp3 = or bool %tmp2, %tmp             ; <bool> [#uses=1]
+        %retval = select bool %tmp3, double %x, double %y
+        ret double %retval
+}
+
+
+