aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-06-11 02:29:43 +0000
committerChris Lattner <sabre@nondot.org>2004-06-11 02:29:43 +0000
commit137cc4fc8c549c805e817095e2d82776a2af8095 (patch)
treec4657f95ecdf042081916165000f6bbaf63aea3f
parent320062845b63b0b07634147c4751be0ee40fffd5 (diff)
I misled Alkis: LLVM should have isnan, not isunordered.
isunordered(X, Y) === isnan(X) | isnan(Y) Remove isunordered, add isnan. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14132 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Intrinsics.h6
-rw-r--r--lib/CodeGen/IntrinsicLowering.cpp10
-rw-r--r--lib/VMCore/Function.cpp2
-rw-r--r--lib/VMCore/IntrinsicLowering.cpp10
-rw-r--r--lib/VMCore/Verifier.cpp8
5 files changed, 22 insertions, 14 deletions
diff --git a/include/llvm/Intrinsics.h b/include/llvm/Intrinsics.h
index 56ecb4f1e6..8cca2cd326 100644
--- a/include/llvm/Intrinsics.h
+++ b/include/llvm/Intrinsics.h
@@ -59,7 +59,8 @@ namespace Intrinsic {
memmove, // Copy potentially overlapping memory blocks
memset, // Fill memory with a byte value
- // Standard libm functions.
+ // libm related functions.
+ isnan, // Return true if fp argument is a NAN.
// Input/Output intrinsics.
readport,
@@ -67,9 +68,6 @@ namespace Intrinsic {
readio,
writeio,
- // Support for unordered compare intrinsic
- isunordered,
-
//===------------------------------------------------------------------===//
// This section defines intrinsic functions used to represent Alpha
// instructions.
diff --git a/lib/CodeGen/IntrinsicLowering.cpp b/lib/CodeGen/IntrinsicLowering.cpp
index 38ba73d01f..bc6f02e4d6 100644
--- a/lib/CodeGen/IntrinsicLowering.cpp
+++ b/lib/CodeGen/IntrinsicLowering.cpp
@@ -191,10 +191,12 @@ void DefaultIntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
(*(CI->op_begin()+1))->getType(), MemsetFCache);
break;
}
- case Intrinsic::isunordered: {
- static Function *IsunorderedFCache = 0;
- ReplaceCallWith("isunordered", CI, CI->op_begin()+1, CI->op_end(),
- (*(CI->op_begin()+1))->getType(), IsunorderedFCache);
+ case Intrinsic::isnan: {
+ // FIXME: This should force the argument to be a double. There may be
+ // multiple isnans for different FP arguments.
+ static Function *isnanFCache = 0;
+ ReplaceCallWith("isnan", CI, CI->op_begin()+1, CI->op_end(),
+ (*(CI->op_begin()+1))->getType(), isnanFCache);
break;
}
}
diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp
index 82f3645acb..a0f86d55e5 100644
--- a/lib/VMCore/Function.cpp
+++ b/lib/VMCore/Function.cpp
@@ -223,7 +223,7 @@ unsigned Function::getIntrinsicID() const {
if (getName() == "llvm.gcroot") return Intrinsic::gcroot;
break;
case 'i':
- if (getName() == "llvm.isunordered") return Intrinsic::isunordered;
+ if (getName() == "llvm.isnan") return Intrinsic::isnan;
break;
case 'l':
if (getName() == "llvm.longjmp") return Intrinsic::longjmp;
diff --git a/lib/VMCore/IntrinsicLowering.cpp b/lib/VMCore/IntrinsicLowering.cpp
index 38ba73d01f..bc6f02e4d6 100644
--- a/lib/VMCore/IntrinsicLowering.cpp
+++ b/lib/VMCore/IntrinsicLowering.cpp
@@ -191,10 +191,12 @@ void DefaultIntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
(*(CI->op_begin()+1))->getType(), MemsetFCache);
break;
}
- case Intrinsic::isunordered: {
- static Function *IsunorderedFCache = 0;
- ReplaceCallWith("isunordered", CI, CI->op_begin()+1, CI->op_end(),
- (*(CI->op_begin()+1))->getType(), IsunorderedFCache);
+ case Intrinsic::isnan: {
+ // FIXME: This should force the argument to be a double. There may be
+ // multiple isnans for different FP arguments.
+ static Function *isnanFCache = 0;
+ ReplaceCallWith("isnan", CI, CI->op_begin()+1, CI->op_end(),
+ (*(CI->op_begin()+1))->getType(), isnanFCache);
break;
}
}
diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp
index 156b2cc45d..244d346490 100644
--- a/lib/VMCore/Verifier.cpp
+++ b/lib/VMCore/Verifier.cpp
@@ -688,7 +688,13 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
break;
}
- case Intrinsic::isunordered: NumArgs = 2; break;
+ case Intrinsic::isnan:
+ Assert1(FT->getNumParams() == 1 && FT->getParamType(0)->isFloatingPoint(),
+ "Illegal prototype for llvm.isnan", IF);
+ Assert1(FT->getReturnType() == Type::BoolTy,
+ "Illegal prototype for llvm.isnan", IF);
+ NumArgs = 1;
+ break;
case Intrinsic::setjmp: NumArgs = 1; break;
case Intrinsic::longjmp: NumArgs = 2; break;