diff options
author | Owen Anderson <resistor@mac.com> | 2009-07-13 23:16:26 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2009-07-13 23:16:26 +0000 |
commit | 13c240a4c1a8a7b4263996851a28a135bfa3425c (patch) | |
tree | e8472a1f8d85b8bf22af4866418dcc328522e6db | |
parent | 56523ceba17deab83059145d6089c372c90c18d1 (diff) | |
download | bcm5719-llvm-13c240a4c1a8a7b4263996851a28a135bfa3425c.tar.gz bcm5719-llvm-13c240a4c1a8a7b4263996851a28a135bfa3425c.zip |
Move a bit more functionality to LLVMContext, which apparently wasn't being used anyways.
llvm-svn: 75546
-rw-r--r-- | llvm/include/llvm/Constants.h | 6 | ||||
-rw-r--r-- | llvm/include/llvm/LLVMContext.h | 5 | ||||
-rw-r--r-- | llvm/lib/VMCore/Constants.cpp | 18 | ||||
-rw-r--r-- | llvm/lib/VMCore/LLVMContext.cpp | 30 |
4 files changed, 34 insertions, 25 deletions
diff --git a/llvm/include/llvm/Constants.h b/llvm/include/llvm/Constants.h index 143f3ad7578..4590528f61a 100644 --- a/llvm/include/llvm/Constants.h +++ b/llvm/include/llvm/Constants.h @@ -256,12 +256,6 @@ public: /// get() - Static factory methods - Return objects of the specified value static ConstantFP *get(const APFloat &V); - /// get() - This returns a ConstantFP, or a vector containing a splat of a - /// ConstantFP, for the specified value in the specified type. This should - /// only be used for simple constant values like 2.0/1.0 etc, that are - /// known-valid both as host double and as the target format. - static Constant *get(const Type *Ty, double V); - /// isValueValidForType - return true if Ty is big enough to represent V. static bool isValueValidForType(const Type *Ty, const APFloat& V); inline const APFloat& getValueAPF() const { return Val; } diff --git a/llvm/include/llvm/LLVMContext.h b/llvm/include/llvm/LLVMContext.h index 55eead4621c..e71183855a6 100644 --- a/llvm/include/llvm/LLVMContext.h +++ b/llvm/include/llvm/LLVMContext.h @@ -183,6 +183,11 @@ public: // ConstantFP accessors ConstantFP* getConstantFP(const APFloat& V); + + /// get() - This returns a ConstantFP, or a vector containing a splat of a + /// ConstantFP, for the specified value in the specified type. This should + /// only be used for simple constant values like 2.0/1.0 etc, that are + /// known-valid both as host double and as the target format. Constant* getConstantFP(const Type* Ty, double V); ConstantFP* getConstantFPNegativeZero(const Type* Ty); diff --git a/llvm/lib/VMCore/Constants.cpp b/llvm/lib/VMCore/Constants.cpp index 184ae9d21ed..8b71956e206 100644 --- a/llvm/lib/VMCore/Constants.cpp +++ b/llvm/lib/VMCore/Constants.cpp @@ -382,24 +382,6 @@ ConstantFP *ConstantFP::get(const APFloat &V) { return Slot; } -/// get() - This returns a constant fp for the specified value in the -/// specified type. This should only be used for simple constant values like -/// 2.0/1.0 etc, that are known-valid both as double and as the target format. -Constant *ConstantFP::get(const Type *Ty, double V) { - APFloat FV(V); - bool ignored; - FV.convert(*TypeToFloatSemantics(Ty->getScalarType()), - APFloat::rmNearestTiesToEven, &ignored); - Constant *C = get(FV); - - // For vectors, broadcast the value. - if (const VectorType *VTy = dyn_cast<VectorType>(Ty)) - return - ConstantVector::get(std::vector<Constant *>(VTy->getNumElements(), C)); - - return C; -} - //===----------------------------------------------------------------------===// // ConstantXXX Classes //===----------------------------------------------------------------------===// diff --git a/llvm/lib/VMCore/LLVMContext.cpp b/llvm/lib/VMCore/LLVMContext.cpp index a7df2affe31..8d57d2c6fa0 100644 --- a/llvm/lib/VMCore/LLVMContext.cpp +++ b/llvm/lib/VMCore/LLVMContext.cpp @@ -442,8 +442,36 @@ ConstantFP* LLVMContext::getConstantFP(const APFloat& V) { return ConstantFP::get(V); } +static const fltSemantics *TypeToFloatSemantics(const Type *Ty) { + if (Ty == Type::FloatTy) + return &APFloat::IEEEsingle; + if (Ty == Type::DoubleTy) + return &APFloat::IEEEdouble; + if (Ty == Type::X86_FP80Ty) + return &APFloat::x87DoubleExtended; + else if (Ty == Type::FP128Ty) + return &APFloat::IEEEquad; + + assert(Ty == Type::PPC_FP128Ty && "Unknown FP format"); + return &APFloat::PPCDoubleDouble; +} + +/// get() - This returns a constant fp for the specified value in the +/// specified type. This should only be used for simple constant values like +/// 2.0/1.0 etc, that are known-valid both as double and as the target format. Constant* LLVMContext::getConstantFP(const Type* Ty, double V) { - return ConstantFP::get(Ty, V); + APFloat FV(V); + bool ignored; + FV.convert(*TypeToFloatSemantics(Ty->getScalarType()), + APFloat::rmNearestTiesToEven, &ignored); + Constant *C = getConstantFP(FV); + + // For vectors, broadcast the value. + if (const VectorType *VTy = dyn_cast<VectorType>(Ty)) + return + getConstantVector(std::vector<Constant *>(VTy->getNumElements(), C)); + + return C; } ConstantFP* LLVMContext::getConstantFPNegativeZero(const Type* Ty) { |