diff options
author | Owen Anderson <resistor@mac.com> | 2009-07-21 02:47:59 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2009-07-21 02:47:59 +0000 |
commit | f53c371983908f02678b0e12c5d18466dcc70ffd (patch) | |
tree | d19212cba4a7a319cf06bfca831b86864b617d33 /lib/VMCore | |
parent | 7239b516940fc134f895f6480e1b15346f40f75b (diff) | |
download | external_llvm-f53c371983908f02678b0e12c5d18466dcc70ffd.zip external_llvm-f53c371983908f02678b0e12c5d18466dcc70ffd.tar.gz external_llvm-f53c371983908f02678b0e12c5d18466dcc70ffd.tar.bz2 |
Move a bit more state over to the LLVMContext.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76533 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore')
-rw-r--r-- | lib/VMCore/Constants.cpp | 22 | ||||
-rw-r--r-- | lib/VMCore/LLVMContext.cpp | 8 | ||||
-rw-r--r-- | lib/VMCore/LLVMContextImpl.h | 21 |
3 files changed, 26 insertions, 25 deletions
diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 71e9837..347cd16 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -169,28 +169,6 @@ ConstantInt::ConstantInt(const IntegerType *Ty, const APInt& V) assert(V.getBitWidth() == Ty->getBitWidth() && "Invalid constant for type"); } -ConstantInt *ConstantInt::TheTrueVal = 0; -ConstantInt *ConstantInt::TheFalseVal = 0; - -namespace llvm { - void CleanupTrueFalse(void *) { - ConstantInt::ResetTrueFalse(); - } -} - -static ManagedCleanup<llvm::CleanupTrueFalse> TrueFalseCleanup; - -ConstantInt *ConstantInt::CreateTrueFalseVals(bool WhichOne) { - assert(TheTrueVal == 0 && TheFalseVal == 0); - TheTrueVal = getGlobalContext().getConstantInt(Type::Int1Ty, 1); - TheFalseVal = getGlobalContext().getConstantInt(Type::Int1Ty, 0); - - // Ensure that llvm_shutdown nulls out TheTrueVal/TheFalseVal. - TrueFalseCleanup.Register(); - - return WhichOne ? TheTrueVal : TheFalseVal; -} - //===----------------------------------------------------------------------===// // ConstantFP //===----------------------------------------------------------------------===// diff --git a/lib/VMCore/LLVMContext.cpp b/lib/VMCore/LLVMContext.cpp index 4d847a7..bb3762b 100644 --- a/lib/VMCore/LLVMContext.cpp +++ b/lib/VMCore/LLVMContext.cpp @@ -81,11 +81,15 @@ UndefValue* LLVMContext::getUndef(const Type* Ty) { // ConstantInt accessors. ConstantInt* LLVMContext::getConstantIntTrue() { - return ConstantInt::getTrue(); + assert(this && "Context not initialized!"); + assert(pImpl && "Context not initialized!"); + return pImpl->getConstantIntTrue(); } ConstantInt* LLVMContext::getConstantIntFalse() { - return ConstantInt::getFalse(); + assert(this && "Context not initialized!"); + assert(pImpl && "Context not initialized!"); + return pImpl->getConstantIntFalse(); } Constant* LLVMContext::getConstantInt(const Type* Ty, uint64_t V, diff --git a/lib/VMCore/LLVMContextImpl.h b/lib/VMCore/LLVMContextImpl.h index 129a759..5571995 100644 --- a/lib/VMCore/LLVMContextImpl.h +++ b/lib/VMCore/LLVMContextImpl.h @@ -15,6 +15,8 @@ #ifndef LLVM_LLVMCONTEXT_IMPL_H #define LLVM_LLVMCONTEXT_IMPL_H +#include "llvm/LLVMContext.h" +#include "llvm/DerivedTypes.h" #include "llvm/System/RWMutex.h" #include "llvm/ADT/APFloat.h" #include "llvm/ADT/APInt.h" @@ -100,10 +102,13 @@ class LLVMContextImpl { FoldingSet<MDNode> MDNodeSet; LLVMContext &Context; + ConstantInt *TheTrueVal; + ConstantInt *TheFalseVal; + LLVMContextImpl(); LLVMContextImpl(const LLVMContextImpl&); public: - LLVMContextImpl(LLVMContext &C) : Context(C) { } + LLVMContextImpl(LLVMContext &C) : Context(C), TheTrueVal(0), TheFalseVal(0) {} /// Return a ConstantInt with the specified value and an implied Type. The /// type is the integer type that corresponds to the bit width of the value. @@ -115,6 +120,20 @@ public: MDNode *getMDNode(Value*const* Vals, unsigned NumVals); + ConstantInt *getConstantIntTrue() { + if (TheTrueVal) + return TheTrueVal; + else + return (TheTrueVal = Context.getConstantInt(IntegerType::get(1), 1)); + } + + ConstantInt *getConstantIntFalse() { + if (TheFalseVal) + return TheFalseVal; + else + return (TheFalseVal = Context.getConstantInt(IntegerType::get(1), 0)); + } + void erase(MDString *M); void erase(MDNode *M); }; |