summaryrefslogtreecommitdiff
path: root/test/CodeGen/X86/isint.ll
diff options
context:
space:
mode:
authorStuart Hastings <stuart@apple.com>2011-06-01 17:17:45 +0000
committerStuart Hastings <stuart@apple.com>2011-06-01 17:17:45 +0000
commit10ff0bbdfbeb6f7485979744d16daea4795d45b2 (patch)
tree1d37d9920b2173c6502b35b95373217fef2ea2aa /test/CodeGen/X86/isint.ll
parentf1002828fdaffa4e005a81f269c77fe72951f39f (diff)
downloadllvm-10ff0bbdfbeb6f7485979744d16daea4795d45b2.tar.gz
llvm-10ff0bbdfbeb6f7485979744d16daea4795d45b2.tar.bz2
llvm-10ff0bbdfbeb6f7485979744d16daea4795d45b2.tar.xz
Add support for x86 CMPEQSS and friends. These instructions do a
floating-point comparison, generate a mask of 0s or 1s, and generally DTRT with NaNs. Only profitable when the user wants a materialized 0 or 1 at runtime. rdar://problem/5993888 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132404 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/isint.ll')
-rw-r--r--test/CodeGen/X86/isint.ll21
1 files changed, 12 insertions, 9 deletions
diff --git a/test/CodeGen/X86/isint.ll b/test/CodeGen/X86/isint.ll
index 507a328c3f..4a98e63f38 100644
--- a/test/CodeGen/X86/isint.ll
+++ b/test/CodeGen/X86/isint.ll
@@ -1,17 +1,15 @@
-; RUN: llc < %s -march=x86 -mattr=+sse2 > %t
-; RUN: not grep cmp %t
-; RUN: not grep xor %t
-; RUN: grep jne %t | count 1
-; RUN: grep jp %t | count 1
-; RUN: grep setnp %t | count 1
-; RUN: grep sete %t | count 1
-; RUN: grep and %t | count 1
-; RUN: grep cvt %t | count 4
+; RUN: llc < %s -march=x86 -mattr=+sse2 | FileCheck %s
define i32 @isint_return(double %d) nounwind {
+; CHECK-NOT: xor
+; CHECK: cvt
%i = fptosi double %d to i32
+; CHECK-NEXT: cvt
%e = sitofp i32 %i to double
+; CHECK: cmpeqsd
%c = fcmp oeq double %d, %e
+; CHECK-NEXT: movd
+; CHECK-NEXT: andl
%z = zext i1 %c to i32
ret i32 %z
}
@@ -19,9 +17,14 @@ define i32 @isint_return(double %d) nounwind {
declare void @foo()
define void @isint_branch(double %d) nounwind {
+; CHECK: cvt
%i = fptosi double %d to i32
+; CHECK-NEXT: cvt
%e = sitofp i32 %i to double
+; CHECK: ucomisd
%c = fcmp oeq double %d, %e
+; CHECK-NEXT: jne
+; CHECK-NEXT: jp
br i1 %c, label %true, label %false
true:
call void @foo()