Add the isunordered intrinsic.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14159 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Alkis Evlogimenos 2004-06-12 19:19:14 +00:00
parent 06a3db0b0f
commit 9685372062
7 changed files with 31 additions and 1 deletions

View File

@ -125,6 +125,7 @@
<li><a href="#i_memmove">'<tt>llvm.memmove</tt>' Intrinsic</a></li>
<li><a href="#i_memset">'<tt>llvm.memset</tt>' Intrinsic</a></li>
<li><a href="#i_isnan">'<tt>llvm.isnan</tt>' Intrinsic</a></li>
<li><a href="#i_isunordered">'<tt>llvm.isunordered</tt>' Intrinsic</a></li>
</ol>
</li>
<li><a href="#int_debugger">Debugger intrinsics</a></li>

View File

@ -61,6 +61,7 @@ namespace Intrinsic {
// libm related functions.
isnan, // Return true if fp argument is a NAN.
isunordered, // Return true if fp arguments are unordered
// Input/Output intrinsics.
readport,

View File

@ -208,6 +208,12 @@ void DefaultIntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
Type::BoolTy, isnanFCache);
break;
}
case Intrinsic::isunordered: {
static Function *isunorderedFCache = 0;
ReplaceCallWith("isunordered", CI, CI->op_begin()+1, CI->op_end(),
Type::BoolTy, isunorderedFCache);
break;
}
}
assert(CI->use_empty() &&

View File

@ -224,6 +224,7 @@ unsigned Function::getIntrinsicID() const {
break;
case 'i':
if (getName() == "llvm.isnan") return Intrinsic::isnan;
if (getName() == "llvm.isunordered") return Intrinsic::isunordered;
break;
case 'l':
if (getName() == "llvm.longjmp") return Intrinsic::longjmp;

View File

@ -208,6 +208,12 @@ void DefaultIntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
Type::BoolTy, isnanFCache);
break;
}
case Intrinsic::isunordered: {
static Function *isunorderedFCache = 0;
ReplaceCallWith("isunordered", CI, CI->op_begin()+1, CI->op_end(),
Type::BoolTy, isunorderedFCache);
break;
}
}
assert(CI->use_empty() &&

View File

@ -688,7 +688,7 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
break;
}
case Intrinsic::isnan:
case Intrinsic::isnan:
Assert1(FT->getNumParams() == 1 && FT->getParamType(0)->isFloatingPoint(),
"Illegal prototype for llvm.isnan", IF);
Assert1(FT->getReturnType() == Type::BoolTy,
@ -696,6 +696,16 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
NumArgs = 1;
break;
case Intrinsic::isunordered:
Assert1(FT->getNumParams() == 2 &&
FT->getParamType(0)->isFloatingPoint() &&
FT->getParamType(1)->isFloatingPoint(),
"Illegal prototype for llvm.isunordered", IF);
Assert1(FT->getReturnType() == Type::BoolTy,
"Illegal prototype for llvm.isunordered", IF);
NumArgs = 2;
break;
case Intrinsic::setjmp: NumArgs = 1; break;
case Intrinsic::longjmp: NumArgs = 2; break;
case Intrinsic::sigsetjmp: NumArgs = 2; break;

View File

@ -2,6 +2,9 @@
declare bool %llvm.isnan(float)
declare bool %llvm.isnan(double)
declare bool %llvm.isunordered(float, float)
declare bool %llvm.isunordered(double, double)
implementation
; Test llvm intrinsics
@ -9,5 +12,7 @@ implementation
void %libm() {
call bool %llvm.isnan(float 0.0)
call bool %llvm.isnan(double 10.0)
call bool %llvm.isunordered(float 0.0, float 1.0)
call bool %llvm.isunordered(double 0.0, double 1.0)
ret void
}