aboutsummaryrefslogtreecommitdiffstats
path: root/lib/VMCore
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2009-07-21 02:47:59 +0000
committerOwen Anderson <resistor@mac.com>2009-07-21 02:47:59 +0000
commitf53c371983908f02678b0e12c5d18466dcc70ffd (patch)
treed19212cba4a7a319cf06bfca831b86864b617d33 /lib/VMCore
parent7239b516940fc134f895f6480e1b15346f40f75b (diff)
downloadexternal_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.cpp22
-rw-r--r--lib/VMCore/LLVMContext.cpp8
-rw-r--r--lib/VMCore/LLVMContextImpl.h21
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);
};