IR: Add ConstantFP::getNaN()
authorTom Stellard <thomas.stellard@amd.com>
Mon, 20 Apr 2015 19:38:24 +0000 (19:38 +0000)
committerTom Stellard <thomas.stellard@amd.com>
Mon, 20 Apr 2015 19:38:24 +0000 (19:38 +0000)
This is a wrapper around APFloat::getNaN().

llvm-svn: 235332

llvm/include/llvm/IR/Constants.h
llvm/lib/IR/Constants.cpp

index 70437e6..a16bf1f 100644 (file)
@@ -251,6 +251,7 @@ public:
   static Constant *get(Type* Ty, double V);
   static Constant *get(Type* Ty, StringRef Str);
   static ConstantFP *get(LLVMContext &Context, const APFloat &V);
+  static Constant *getNaN(Type *Ty, bool Negative = false, unsigned type = 0);
   static Constant *getNegativeZero(Type *Ty);
   static Constant *getInfinity(Type *Ty, bool Negative = false);
 
index 3f8d1f1..20a5206 100644 (file)
@@ -663,6 +663,17 @@ Constant *ConstantFP::get(Type *Ty, StringRef Str) {
   return C; 
 }
 
+Constant *ConstantFP::getNaN(Type *Ty, bool Negative, unsigned Type) {
+  const fltSemantics &Semantics = *TypeToFloatSemantics(Ty->getScalarType());
+  APFloat NaN = APFloat::getNaN(Semantics, Negative, Type);
+  Constant *C = get(Ty->getContext(), NaN);
+
+  if (VectorType *VTy = dyn_cast<VectorType>(Ty))
+    return ConstantVector::getSplat(VTy->getNumElements(), C);
+
+  return C;
+}
+
 Constant *ConstantFP::getNegativeZero(Type *Ty) {
   const fltSemantics &Semantics = *TypeToFloatSemantics(Ty->getScalarType());
   APFloat NegZero = APFloat::getZero(Semantics, /*Negative=*/true);