// libm related functions.
isunordered, // Return true if either argument is a NaN
+ sqrt,
// Input/Output intrinsics.
readport,
static const char *DoesntAccessMemoryTable[] = {
// LLVM intrinsics:
"llvm.frameaddress", "llvm.returnaddress", "llvm.readport",
- "llvm.isunordered",
+ "llvm.isunordered", "llvm.sqrt",
"abs", "labs", "llabs", "imaxabs", "fabs", "fabsf", "fabsl",
"trunc", "truncf", "truncl", "ldexp",
if (getName() == "llvm.setjmp") return Intrinsic::setjmp;
if (getName() == "llvm.sigsetjmp") return Intrinsic::sigsetjmp;
if (getName() == "llvm.siglongjmp") return Intrinsic::siglongjmp;
+ if (getName() == "llvm.sqrt") return Intrinsic::sqrt;
break;
case 'v':
if (getName() == "llvm.va_copy") return Intrinsic::vacopy;
NumArgs = 2;
break;
+ case Intrinsic::sqrt:
+ Assert1(FT->getNumParams() == 1,
+ "Illegal # arguments for intrinsic function!", IF);
+ Assert1(FT->getParamType(0)->isFloatingPoint(),
+ "Argument is not a floating point type!", IF);
+ Assert1(FT->getReturnType() == FT->getParamType(0),
+ "Return type is not the same as argument type!", IF);
+ NumArgs = 1;
+ break;
+
case Intrinsic::setjmp: NumArgs = 1; break;
case Intrinsic::longjmp: NumArgs = 2; break;
case Intrinsic::sigsetjmp: NumArgs = 2; break;