aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlkis Evlogimenos <alkis@evlogimenos.com>2004-06-11 01:08:18 +0000
committerAlkis Evlogimenos <alkis@evlogimenos.com>2004-06-11 01:08:18 +0000
commitf616f22e816ce7f7ba3414cf3d91c9410aa03223 (patch)
tree3f801f329f772ce3032bd3eae578f58fcaa4ce3c
parentfd39b30a7a141c0c737a56240a428d53acf965a0 (diff)
Add the isunordered intrinsic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14127 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Intrinsics.h4
-rw-r--r--lib/CodeGen/IntrinsicLowering.cpp6
-rw-r--r--lib/VMCore/Function.cpp3
-rw-r--r--lib/VMCore/IntrinsicLowering.cpp6
-rw-r--r--lib/VMCore/Verifier.cpp2
5 files changed, 20 insertions, 1 deletions
diff --git a/include/llvm/Intrinsics.h b/include/llvm/Intrinsics.h
index de709cbbe8..56ecb4f1e6 100644
--- a/include/llvm/Intrinsics.h
+++ b/include/llvm/Intrinsics.h
@@ -60,7 +60,6 @@ namespace Intrinsic {
memset, // Fill memory with a byte value
// Standard libm functions.
-
// Input/Output intrinsics.
readport,
@@ -68,6 +67,9 @@ 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 1dd819cdb4..38ba73d01f 100644
--- a/lib/CodeGen/IntrinsicLowering.cpp
+++ b/lib/CodeGen/IntrinsicLowering.cpp
@@ -191,6 +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);
+ break;
+ }
}
assert(CI->use_empty() &&
diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp
index 01339e1bb0..82f3645acb 100644
--- a/lib/VMCore/Function.cpp
+++ b/lib/VMCore/Function.cpp
@@ -222,6 +222,9 @@ unsigned Function::getIntrinsicID() const {
if (getName() == "llvm.gcread") return Intrinsic::gcread;
if (getName() == "llvm.gcroot") return Intrinsic::gcroot;
break;
+ case 'i':
+ if (getName() == "llvm.isunordered") return Intrinsic::isunordered;
+ break;
case 'l':
if (getName() == "llvm.longjmp") return Intrinsic::longjmp;
break;
diff --git a/lib/VMCore/IntrinsicLowering.cpp b/lib/VMCore/IntrinsicLowering.cpp
index 1dd819cdb4..38ba73d01f 100644
--- a/lib/VMCore/IntrinsicLowering.cpp
+++ b/lib/VMCore/IntrinsicLowering.cpp
@@ -191,6 +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);
+ break;
+ }
}
assert(CI->use_empty() &&
diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp
index ef76dff0ba..156b2cc45d 100644
--- a/lib/VMCore/Verifier.cpp
+++ b/lib/VMCore/Verifier.cpp
@@ -688,6 +688,8 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
break;
}
+ case Intrinsic::isunordered: NumArgs = 2; break;
+
case Intrinsic::setjmp: NumArgs = 1; break;
case Intrinsic::longjmp: NumArgs = 2; break;
case Intrinsic::sigsetjmp: NumArgs = 2; break;