aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2009-08-04 22:41:48 +0000
committerOwen Anderson <resistor@mac.com>2009-08-04 22:41:48 +0000
commit48b2f3e4850cd27d54224cd42da8a160d6b95984 (patch)
tree4a9d1fe3a0e3feacea1d637131b754943e0939f1
parent57035994f7329d63582365df278826dbbac5b046 (diff)
Factor some of the constants+context related code out into a separate header, to make LLVMContextImpl.h
not hideous. Also, fix some MSVC compile errors. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78115 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Analysis/ConstantFolding.h2
-rw-r--r--include/llvm/Analysis/DebugInfo.h2
-rw-r--r--include/llvm/Analysis/ScalarEvolution.h2
-rw-r--r--include/llvm/Analysis/SparsePropagation.h2
-rw-r--r--include/llvm/Analysis/ValueTracking.h2
-rw-r--r--include/llvm/Assembly/Parser.h2
-rw-r--r--include/llvm/BasicBlock.h2
-rw-r--r--include/llvm/Bitcode/Archive.h2
-rw-r--r--include/llvm/Bitcode/ReaderWriter.h2
-rw-r--r--include/llvm/CodeGen/ValueTypes.h2
-rw-r--r--include/llvm/Constant.h2
-rw-r--r--include/llvm/Constants.h2
-rw-r--r--include/llvm/Debugger/Debugger.h2
-rw-r--r--include/llvm/Function.h2
-rw-r--r--include/llvm/GlobalVariable.h2
-rw-r--r--include/llvm/InstrTypes.h2
-rw-r--r--include/llvm/Instruction.h2
-rw-r--r--include/llvm/Instructions.h2
-rw-r--r--include/llvm/Intrinsics.h2
-rw-r--r--include/llvm/LLVMContext.h2
-rw-r--r--include/llvm/Linker.h2
-rw-r--r--include/llvm/Metadata.h4
-rw-r--r--include/llvm/Module.h2
-rw-r--r--include/llvm/Support/TargetFolder.h2
-rw-r--r--include/llvm/Transforms/Utils/Cloning.h2
-rw-r--r--include/llvm/Transforms/Utils/Local.h2
-rw-r--r--include/llvm/Transforms/Utils/PromoteMemToReg.h2
-rw-r--r--include/llvm/Transforms/Utils/ValueMapper.h2
-rw-r--r--include/llvm/Value.h2
-rw-r--r--lib/Archive/ArchiveInternals.h2
-rw-r--r--lib/AsmParser/LLLexer.h2
-rw-r--r--lib/Bitcode/Reader/BitcodeReader.h2
-rw-r--r--lib/VMCore/ConstantFold.h2
-rw-r--r--lib/VMCore/LLVMContext.cpp17
-rw-r--r--lib/VMCore/LLVMContextImpl.cpp36
-rw-r--r--lib/VMCore/LLVMContextImpl.h765
-rw-r--r--tools/bugpoint/BugDriver.h2
-rw-r--r--tools/llvm-db/CLIDebugger.h2
38 files changed, 56 insertions, 834 deletions
diff --git a/include/llvm/Analysis/ConstantFolding.h b/include/llvm/Analysis/ConstantFolding.h
index 3e393ff691..3293d263a0 100644
--- a/include/llvm/Analysis/ConstantFolding.h
+++ b/include/llvm/Analysis/ConstantFolding.h
@@ -22,7 +22,7 @@ namespace llvm {
class TargetData;
class Function;
class Type;
- class LLVMContext;
+ struct LLVMContext;
/// ConstantFoldInstruction - Attempt to constant fold the specified
/// instruction. If successful, the constant result is returned, if not, null
diff --git a/include/llvm/Analysis/DebugInfo.h b/include/llvm/Analysis/DebugInfo.h
index 5e24a57cfe..53934d8e9a 100644
--- a/include/llvm/Analysis/DebugInfo.h
+++ b/include/llvm/Analysis/DebugInfo.h
@@ -40,7 +40,7 @@ namespace llvm {
class DebugLoc;
struct DebugLocTracker;
class Instruction;
- class LLVMContext;
+ struct LLVMContext;
class DIDescriptor {
protected:
diff --git a/include/llvm/Analysis/ScalarEvolution.h b/include/llvm/Analysis/ScalarEvolution.h
index 739f06bfc8..1a648df5db 100644
--- a/include/llvm/Analysis/ScalarEvolution.h
+++ b/include/llvm/Analysis/ScalarEvolution.h
@@ -40,7 +40,7 @@ namespace llvm {
class Type;
class ScalarEvolution;
class TargetData;
- class LLVMContext;
+ struct LLVMContext;
class Loop;
class LoopInfo;
class Operator;
diff --git a/include/llvm/Analysis/SparsePropagation.h b/include/llvm/Analysis/SparsePropagation.h
index 638008d78c..877823303f 100644
--- a/include/llvm/Analysis/SparsePropagation.h
+++ b/include/llvm/Analysis/SparsePropagation.h
@@ -31,7 +31,7 @@ namespace llvm {
class BasicBlock;
class Function;
class SparseSolver;
- class LLVMContext;
+ struct LLVMContext;
template<typename T> class SmallVectorImpl;
diff --git a/include/llvm/Analysis/ValueTracking.h b/include/llvm/Analysis/ValueTracking.h
index 1ebd9c26c4..fa46921b59 100644
--- a/include/llvm/Analysis/ValueTracking.h
+++ b/include/llvm/Analysis/ValueTracking.h
@@ -23,7 +23,7 @@ namespace llvm {
class Instruction;
class APInt;
class TargetData;
- class LLVMContext;
+ struct LLVMContext;
/// ComputeMaskedBits - Determine which of the bits specified in Mask are
/// known to be either zero or one and return them in the KnownZero/KnownOne
diff --git a/include/llvm/Assembly/Parser.h b/include/llvm/Assembly/Parser.h
index 966abaaa20..6ab43825c8 100644
--- a/include/llvm/Assembly/Parser.h
+++ b/include/llvm/Assembly/Parser.h
@@ -21,7 +21,7 @@ namespace llvm {
class Module;
class SMDiagnostic;
class raw_ostream;
-class LLVMContext;
+struct LLVMContext;
/// This function is the main interface to the LLVM Assembly Parser. It parses
/// an ASCII file that (presumably) contains LLVM Assembly code. It returns a
diff --git a/include/llvm/BasicBlock.h b/include/llvm/BasicBlock.h
index eabc1a0d2b..cc5c8355db 100644
--- a/include/llvm/BasicBlock.h
+++ b/include/llvm/BasicBlock.h
@@ -22,7 +22,7 @@
namespace llvm {
class TerminatorInst;
-class LLVMContext;
+struct LLVMContext;
template<> struct ilist_traits<Instruction>
: public SymbolTableListTraits<Instruction, BasicBlock> {
diff --git a/include/llvm/Bitcode/Archive.h b/include/llvm/Bitcode/Archive.h
index 13583c0d5e..8a1d3125ee 100644
--- a/include/llvm/Bitcode/Archive.h
+++ b/include/llvm/Bitcode/Archive.h
@@ -32,7 +32,7 @@ class ModuleProvider; // From VMCore
class Module; // From VMCore
class Archive; // Declared below
class ArchiveMemberHeader; // Internal implementation class
-class LLVMContext; // Global data
+struct LLVMContext; // Global data
/// This class is the main class manipulated by users of the Archive class. It
/// holds information about one member of the Archive. It is also the element
diff --git a/include/llvm/Bitcode/ReaderWriter.h b/include/llvm/Bitcode/ReaderWriter.h
index 3d33d75a06..9890f29307 100644
--- a/include/llvm/Bitcode/ReaderWriter.h
+++ b/include/llvm/Bitcode/ReaderWriter.h
@@ -23,7 +23,7 @@ namespace llvm {
class MemoryBuffer;
class ModulePass;
class BitstreamWriter;
- class LLVMContext;
+ struct LLVMContext;
class raw_ostream;
/// getBitcodeModuleProvider - Read the header of the specified bitcode buffer
diff --git a/include/llvm/CodeGen/ValueTypes.h b/include/llvm/CodeGen/ValueTypes.h
index 5069f9e00a..7ba657205e 100644
--- a/include/llvm/CodeGen/ValueTypes.h
+++ b/include/llvm/CodeGen/ValueTypes.h
@@ -23,7 +23,7 @@
namespace llvm {
class Type;
- class LLVMContext;
+ struct LLVMContext;
struct MVT { // MVT = Machine Value Type
public:
diff --git a/include/llvm/Constant.h b/include/llvm/Constant.h
index a42c7d4371..9c4365febe 100644
--- a/include/llvm/Constant.h
+++ b/include/llvm/Constant.h
@@ -20,7 +20,7 @@ namespace llvm {
class APInt;
template<typename T> class SmallVectorImpl;
- class LLVMContext;
+ struct LLVMContext;
/// This is an important base class in LLVM. It provides the common facilities
/// of all constant values in an LLVM program. A constant is a value that is
diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h
index f6989fae62..0785492335 100644
--- a/include/llvm/Constants.h
+++ b/include/llvm/Constants.h
@@ -231,7 +231,7 @@ class ConstantFP : public Constant {
APFloat Val;
void *operator new(size_t, unsigned);// DO NOT IMPLEMENT
ConstantFP(const ConstantFP &); // DO NOT IMPLEMENT
- friend class LLVMContextImpl;
+ friend struct LLVMContextImpl;
protected:
ConstantFP(const Type *Ty, const APFloat& V);
protected:
diff --git a/include/llvm/Debugger/Debugger.h b/include/llvm/Debugger/Debugger.h
index 42de35660c..69b13c8a18 100644
--- a/include/llvm/Debugger/Debugger.h
+++ b/include/llvm/Debugger/Debugger.h
@@ -20,7 +20,7 @@
namespace llvm {
class Module;
class InferiorProcess;
- class LLVMContext;
+ struct LLVMContext;
/// Debugger class - This class implements the LLVM source-level debugger.
/// This allows clients to handle the user IO processing without having to
diff --git a/include/llvm/Function.h b/include/llvm/Function.h
index 90d9b0ee46..7eec336c3b 100644
--- a/include/llvm/Function.h
+++ b/include/llvm/Function.h
@@ -26,7 +26,7 @@
namespace llvm {
class FunctionType;
-class LLVMContext;
+struct LLVMContext;
// Traits for intrusive list of basic blocks...
template<> struct ilist_traits<BasicBlock>
diff --git a/include/llvm/GlobalVariable.h b/include/llvm/GlobalVariable.h
index f18554d53b..7855befb93 100644
--- a/include/llvm/GlobalVariable.h
+++ b/include/llvm/GlobalVariable.h
@@ -28,7 +28,7 @@ namespace llvm {
class Module;
class Constant;
-class LLVMContext;
+struct LLVMContext;
template<typename ValueSubClass, typename ItemParentClass>
class SymbolTableListTraits;
diff --git a/include/llvm/InstrTypes.h b/include/llvm/InstrTypes.h
index ddb6ad377d..550849bc8a 100644
--- a/include/llvm/InstrTypes.h
+++ b/include/llvm/InstrTypes.h
@@ -22,7 +22,7 @@
namespace llvm {
-class LLVMContext;
+struct LLVMContext;
//===----------------------------------------------------------------------===//
// TerminatorInst Class
diff --git a/include/llvm/Instruction.h b/include/llvm/Instruction.h
index 924b19554a..3ce1745d1a 100644
--- a/include/llvm/Instruction.h
+++ b/include/llvm/Instruction.h
@@ -20,7 +20,7 @@
namespace llvm {
-class LLVMContext;
+struct LLVMContext;
template<typename ValueSubClass, typename ItemParentClass>
class SymbolTableListTraits;
diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h
index ad5a4a9d3e..afae6291e8 100644
--- a/include/llvm/Instructions.h
+++ b/include/llvm/Instructions.h
@@ -29,7 +29,7 @@ namespace llvm {
class ConstantInt;
class ConstantRange;
class APInt;
-class LLVMContext;
+struct LLVMContext;
//===----------------------------------------------------------------------===//
// AllocationInst Class
diff --git a/include/llvm/Intrinsics.h b/include/llvm/Intrinsics.h
index f2d6ef32cb..0b99204bb1 100644
--- a/include/llvm/Intrinsics.h
+++ b/include/llvm/Intrinsics.h
@@ -23,7 +23,7 @@ namespace llvm {
class Type;
class FunctionType;
class Function;
-class LLVMContext;
+struct LLVMContext;
class Module;
class AttrListPtr;
diff --git a/include/llvm/LLVMContext.h b/include/llvm/LLVMContext.h
index f5be3bbd8b..0aea6b8922 100644
--- a/include/llvm/LLVMContext.h
+++ b/include/llvm/LLVMContext.h
@@ -34,7 +34,7 @@ class ConstantStruct;
class ConstantVector;
class FunctionType;
class IntegerType;
-class LLVMContextImpl;
+struct LLVMContextImpl;
class MDNode;
class MDString;
class OpaqueType;
diff --git a/include/llvm/Linker.h b/include/llvm/Linker.h
index 2f3d374082..43db5961d4 100644
--- a/include/llvm/Linker.h
+++ b/include/llvm/Linker.h
@@ -21,7 +21,7 @@
namespace llvm {
class Module;
-class LLVMContext;
+struct LLVMContext;
/// This class provides the core functionality of linking in LLVM. It retains a
/// Module object which is the composite of the modules and libraries linked
diff --git a/include/llvm/Metadata.h b/include/llvm/Metadata.h
index d0f3477e72..d383fc4357 100644
--- a/include/llvm/Metadata.h
+++ b/include/llvm/Metadata.h
@@ -27,7 +27,7 @@
namespace llvm {
class Constant;
-class LLVMContext;
+struct LLVMContext;
//===----------------------------------------------------------------------===//
// MetadataBase - A base class for MDNode, MDString and NamedMDNode.
@@ -206,7 +206,7 @@ template<typename ValueSubClass, typename ItemParentClass>
class NamedMDNode : public MetadataBase, public ilist_node<NamedMDNode> {
friend class SymbolTableListTraits<NamedMDNode, Module>;
- friend class LLVMContextImpl;
+ friend struct LLVMContextImpl;
NamedMDNode(const NamedMDNode &); // DO NOT IMPLEMENT
void *operator new(size_t, unsigned); // DO NOT IMPLEMENT
diff --git a/include/llvm/Module.h b/include/llvm/Module.h
index 8b0c104a2b..f816561254 100644
--- a/include/llvm/Module.h
+++ b/include/llvm/Module.h
@@ -26,7 +26,7 @@ namespace llvm {
class GlobalValueRefMap; // Used by ConstantVals.cpp
class FunctionType;
-class LLVMContext;
+struct LLVMContext;
template<> struct ilist_traits<Function>
: public SymbolTableListTraits<Function, Module> {
diff --git a/include/llvm/Support/TargetFolder.h b/include/llvm/Support/TargetFolder.h
index 93c50269fa..cdcc4a8ad5 100644
--- a/include/llvm/Support/TargetFolder.h
+++ b/include/llvm/Support/TargetFolder.h
@@ -25,7 +25,7 @@
namespace llvm {
class TargetData;
-class LLVMContext;
+struct LLVMContext;
/// TargetFolder - Create constants with target dependent folding.
class TargetFolder {
diff --git a/include/llvm/Transforms/Utils/Cloning.h b/include/llvm/Transforms/Utils/Cloning.h
index 66cac9fea4..b709edfac1 100644
--- a/include/llvm/Transforms/Utils/Cloning.h
+++ b/include/llvm/Transforms/Utils/Cloning.h
@@ -38,7 +38,7 @@ class CallGraph;
class TargetData;
class Loop;
class LoopInfo;
-class LLVMContext;
+struct LLVMContext;
/// CloneModule - Return an exact copy of the specified module
///
diff --git a/include/llvm/Transforms/Utils/Local.h b/include/llvm/Transforms/Utils/Local.h
index 32e7ae81b1..db5793166c 100644
--- a/include/llvm/Transforms/Utils/Local.h
+++ b/include/llvm/Transforms/Utils/Local.h
@@ -27,7 +27,7 @@ class PHINode;
class AllocaInst;
class ConstantExpr;
class TargetData;
-class LLVMContext;
+struct LLVMContext;
struct DbgInfoIntrinsic;
template<typename T> class SmallVectorImpl;
diff --git a/include/llvm/Transforms/Utils/PromoteMemToReg.h b/include/llvm/Transforms/Utils/PromoteMemToReg.h
index 71a077e862..3dba38ee26 100644
--- a/include/llvm/Transforms/Utils/PromoteMemToReg.h
+++ b/include/llvm/Transforms/Utils/PromoteMemToReg.h
@@ -23,7 +23,7 @@ class AllocaInst;
class DominatorTree;
class DominanceFrontier;
class AliasSetTracker;
-class LLVMContext;
+struct LLVMContext;
/// isAllocaPromotable - Return true if this alloca is legal for promotion.
/// This is true if there are only loads and stores to the alloca...
diff --git a/include/llvm/Transforms/Utils/ValueMapper.h b/include/llvm/Transforms/Utils/ValueMapper.h
index d31edab5b5..ed3ea2bdc4 100644
--- a/include/llvm/Transforms/Utils/ValueMapper.h
+++ b/include/llvm/Transforms/Utils/ValueMapper.h
@@ -20,7 +20,7 @@
namespace llvm {
class Value;
class Instruction;
- class LLVMContext;
+ struct LLVMContext;
typedef DenseMap<const Value *, Value *> ValueMapTy;
Value *MapValue(const Value *V, ValueMapTy &VM, LLVMContext &Context);
diff --git a/include/llvm/Value.h b/include/llvm/Value.h
index a7f8774e03..83a523233b 100644
--- a/include/llvm/Value.h
+++ b/include/llvm/Value.h
@@ -42,7 +42,7 @@ typedef StringMapEntry<AssertingVH<> > ValueName;
class raw_ostream;
class AssemblyAnnotationWriter;
class ValueHandleBase;
-class LLVMContext;
+struct LLVMContext;
//===----------------------------------------------------------------------===//
// Value Class
diff --git a/lib/Archive/ArchiveInternals.h b/lib/Archive/ArchiveInternals.h
index d187ed91d7..98f9c896c5 100644
--- a/lib/Archive/ArchiveInternals.h
+++ b/lib/Archive/ArchiveInternals.h
@@ -31,7 +31,7 @@
namespace llvm {
- class LLVMContext;
+ struct LLVMContext;
/// The ArchiveMemberHeader structure is used internally for bitcode
/// archives.
diff --git a/lib/AsmParser/LLLexer.h b/lib/AsmParser/LLLexer.h
index de39272f45..667ab2c2ed 100644
--- a/lib/AsmParser/LLLexer.h
+++ b/lib/AsmParser/LLLexer.h
@@ -24,7 +24,7 @@ namespace llvm {
class MemoryBuffer;
class Type;
class SMDiagnostic;
- class LLVMContext;
+ struct LLVMContext;
class LLLexer {
const char *CurPtr;
diff --git a/lib/Bitcode/Reader/BitcodeReader.h b/lib/Bitcode/Reader/BitcodeReader.h
index bd048885a6..a1f91133ea 100644
--- a/lib/Bitcode/Reader/BitcodeReader.h
+++ b/lib/Bitcode/Reader/BitcodeReader.h
@@ -26,7 +26,7 @@
namespace llvm {
class MemoryBuffer;
- class LLVMContext;
+ struct LLVMContext;
//===----------------------------------------------------------------------===//
// BitcodeReaderValueList Class
diff --git a/lib/VMCore/ConstantFold.h b/lib/VMCore/ConstantFold.h
index afa9978767..c70a04b7fc 100644
--- a/lib/VMCore/ConstantFold.h
+++ b/lib/VMCore/ConstantFold.h
@@ -23,7 +23,7 @@ namespace llvm {
class Value;
class Constant;
class Type;
- class LLVMContext;
+ struct LLVMContext;
// Constant fold various types of instruction...
Constant *ConstantFoldCastInstruction(
diff --git a/lib/VMCore/LLVMContext.cpp b/lib/VMCore/LLVMContext.cpp
index 3cd715866e..22882711a0 100644
--- a/lib/VMCore/LLVMContext.cpp
+++ b/lib/VMCore/LLVMContext.cpp
@@ -8,7 +8,7 @@
//===----------------------------------------------------------------------===//
//
// This file implements LLVMContext, as a wrapper around the opaque
-// class LLVMContextImpl.
+// struct LLVMContextImpl.
//
//===----------------------------------------------------------------------===//
@@ -29,5 +29,18 @@ LLVMContext& llvm::getGlobalContext() {
return *GlobalContext;
}
-LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl(*this)) { }
+LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl()) { }
LLVMContext::~LLVMContext() { delete pImpl; }
+
+GetElementPtrConstantExpr::GetElementPtrConstantExpr
+ (Constant *C,
+ const std::vector<Constant*> &IdxList,
+ const Type *DestTy)
+ : ConstantExpr(DestTy, Instruction::GetElementPtr,
+ OperandTraits<GetElementPtrConstantExpr>::op_end(this)
+ - (IdxList.size()+1),
+ IdxList.size()+1) {
+ OperandList[0] = C;
+ for (unsigned i = 0, E = IdxList.size(); i != E; ++i)
+ OperandList[i+1] = IdxList[i];
+}
diff --git a/lib/VMCore/LLVMContextImpl.cpp b/lib/VMCore/LLVMContextImpl.cpp
deleted file mode 100644
index 83c9b7daf4..0000000000
--- a/lib/VMCore/LLVMContextImpl.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-//===--------------- LLVMContextImpl.cpp - Implementation ------*- C++ -*--===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements LLVMContextImpl, the opaque implementation
-// of LLVMContext.
-//
-//===----------------------------------------------------------------------===//
-
-#include "LLVMContextImpl.h"
-#include "llvm/Constants.h"
-#include "llvm/DerivedTypes.h"
-#include "llvm/LLVMContext.h"
-#include "llvm/Metadata.h"
-using namespace llvm;
-
-LLVMContextImpl::LLVMContextImpl(LLVMContext &C) :
- Context(C), TheTrueVal(0), TheFalseVal(0) { }
-
-GetElementPtrConstantExpr::GetElementPtrConstantExpr
- (Constant *C,
- const std::vector<Constant*> &IdxList,
- const Type *DestTy)
- : ConstantExpr(DestTy, Instruction::GetElementPtr,
- OperandTraits<GetElementPtrConstantExpr>::op_end(this)
- - (IdxList.size()+1),
- IdxList.size()+1) {
- OperandList[0] = C;
- for (unsigned i = 0, E = IdxList.size(); i != E; ++i)
- OperandList[i+1] = IdxList[i];
-} \ No newline at end of file
diff --git a/lib/VMCore/LLVMContextImpl.h b/lib/VMCore/LLVMContextImpl.h
index d7ad74fa1a..5a3056ad8f 100644
--- a/lib/VMCore/LLVMContextImpl.h
+++ b/lib/VMCore/LLVMContextImpl.h
@@ -15,776 +15,25 @@
#ifndef LLVM_LLVMCONTEXT_IMPL_H
#define LLVM_LLVMCONTEXT_IMPL_H
+#include "ConstantsContext.h"
#include "llvm/LLVMContext.h"
#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
-#include "llvm/Instructions.h"
-#include "llvm/Operator.h"
-#include "llvm/Support/Debug.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/System/Mutex.h"
#include "llvm/System/RWMutex.h"
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/FoldingSet.h"
#include "llvm/ADT/StringMap.h"
-#include <map>
#include <vector>
namespace llvm {
-template<class ValType>
-struct ConstantTraits;
-
-
-/// UnaryConstantExpr - This class is private to Constants.cpp, and is used
-/// behind the scenes to implement unary constant exprs.
-class UnaryConstantExpr : public ConstantExpr {
- void *operator new(size_t, unsigned); // DO NOT IMPLEMENT
-public:
- // allocate space for exactly one operand
- void *operator new(size_t s) {
- return User::operator new(s, 1);
- }
- UnaryConstantExpr(unsigned Opcode, Constant *C, const Type *Ty)
- : ConstantExpr(Ty, Opcode, &Op<0>(), 1) {
- Op<0>() = C;
- }
- DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
-};
-
-/// BinaryConstantExpr - This class is private to Constants.cpp, and is used
-/// behind the scenes to implement binary constant exprs.
-class BinaryConstantExpr : public ConstantExpr {
- void *operator new(size_t, unsigned); // DO NOT IMPLEMENT
-public:
- // allocate space for exactly two operands
- void *operator new(size_t s) {
- return User::operator new(s, 2);
- }
- BinaryConstantExpr(unsigned Opcode, Constant *C1, Constant *C2)
- : ConstantExpr(C1->getType(), Opcode, &Op<0>(), 2) {
- Op<0>() = C1;
- Op<1>() = C2;
- }
- /// Transparently provide more efficient getOperand methods.
- DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
-};
-
-/// SelectConstantExpr - This class is private to Constants.cpp, and is used
-/// behind the scenes to implement select constant exprs.
-class SelectConstantExpr : public ConstantExpr {
- void *operator new(size_t, unsigned); // DO NOT IMPLEMENT
-public:
- // allocate space for exactly three operands
- void *operator new(size_t s) {
- return User::operator new(s, 3);
- }
- SelectConstantExpr(Constant *C1, Constant *C2, Constant *C3)
- : ConstantExpr(C2->getType(), Instruction::Select, &Op<0>(), 3) {
- Op<0>() = C1;
- Op<1>() = C2;
- Op<2>() = C3;
- }
- /// Transparently provide more efficient getOperand methods.
- DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
-};
-
-/// ExtractElementConstantExpr - This class is private to
-/// Constants.cpp, and is used behind the scenes to implement
-/// extractelement constant exprs.
-class ExtractElementConstantExpr : public ConstantExpr {
- void *operator new(size_t, unsigned); // DO NOT IMPLEMENT
-public:
- // allocate space for exactly two operands
- void *operator new(size_t s) {
- return User::operator new(s, 2);
- }
- ExtractElementConstantExpr(Constant *C1, Constant *C2)
- : ConstantExpr(cast<VectorType>(C1->getType())->getElementType(),
- Instruction::ExtractElement, &Op<0>(), 2) {
- Op<0>() = C1;
- Op<1>() = C2;
- }
- /// Transparently provide more efficient getOperand methods.
- DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
-};
-
-/// InsertElementConstantExpr - This class is private to
-/// Constants.cpp, and is used behind the scenes to implement
-/// insertelement constant exprs.
-class InsertElementConstantExpr : public ConstantExpr {
- void *operator new(size_t, unsigned); // DO NOT IMPLEMENT
-public:
- // allocate space for exactly three operands
- void *operator new(size_t s) {
- return User::operator new(s, 3);
- }
- InsertElementConstantExpr(Constant *C1, Constant *C2, Constant *C3)
- : ConstantExpr(C1->getType(), Instruction::InsertElement,
- &Op<0>(), 3) {
- Op<0>() = C1;
- Op<1>() = C2;
- Op<2>() = C3;
- }
- /// Transparently provide more efficient getOperand methods.
- DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
-};
-
-/// ShuffleVectorConstantExpr - This class is private to
-/// Constants.cpp, and is used behind the scenes to implement
-/// shufflevector constant exprs.
-class ShuffleVectorConstantExpr : public ConstantExpr {
- void *operator new(size_t, unsigned); // DO NOT IMPLEMENT
-public:
- // allocate space for exactly three operands
- void *operator new(size_t s) {
- return User::operator new(s, 3);
- }
- ShuffleVectorConstantExpr(Constant *C1, Constant *C2, Constant *C3)
- : ConstantExpr(VectorType::get(
- cast<VectorType>(C1->getType())->getElementType(),
- cast<VectorType>(C3->getType())->getNumElements()),
- Instruction::ShuffleVector,
- &Op<0>(), 3) {
- Op<0>() = C1;
- Op<1>() = C2;
- Op<2>() = C3;
- }
- /// Transparently provide more efficient getOperand met