aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/llvm/Bitcode/LLVMBitCodes.h10
-rw-r--r--include/llvm/DerivedTypes.h9
-rw-r--r--include/llvm/GlobalVariable.h6
-rw-r--r--include/llvm/Instructions.h6
4 files changed, 22 insertions, 9 deletions
diff --git a/include/llvm/Bitcode/LLVMBitCodes.h b/include/llvm/Bitcode/LLVMBitCodes.h
index 32311b26d9..8d95c872a9 100644
--- a/include/llvm/Bitcode/LLVMBitCodes.h
+++ b/include/llvm/Bitcode/LLVMBitCodes.h
@@ -46,7 +46,7 @@ namespace bitc {
MODULE_CODE_SECTIONNAME = 5, // SECTIONNAME: [strchr x N]
MODULE_CODE_DEPLIB = 6, // DEPLIB: [strchr x N]
- // GLOBALVAR: [type, isconst, initid,
+ // GLOBALVAR: [pointer type, isconst, initid,
// linkage, alignment, section, visibility, threadlocal]
MODULE_CODE_GLOBALVAR = 7,
@@ -194,9 +194,13 @@ namespace bitc {
FUNC_CODE_INST_FREE = 18, // FREE: [opty, op]
FUNC_CODE_INST_ALLOCA = 19, // ALLOCA: [instty, op, align]
FUNC_CODE_INST_LOAD = 20, // LOAD: [opty, op, align, vol]
- FUNC_CODE_INST_STORE = 21, // STORE: [ptrty,val,ptr, align, vol]
+ FUNC_CODE_INST_STORE = 21, // STORE: [valty,val,ptr, align, vol]
FUNC_CODE_INST_CALL = 22, // CALL: [attr, fnty, fnid, args...]
- FUNC_CODE_INST_VAARG = 23 // VAARG: [valistty, valist, instty]
+ FUNC_CODE_INST_VAARG = 23, // VAARG: [valistty, valist, instty]
+ // This store code encodes the pointer type, rather than the value type
+ // this is so information only available in the pointer type (e.g. address
+ // spaces) is retained.
+ FUNC_CODE_INST_STORE2 = 24 // STORE: [ptrty,ptr,val, align, vol]
};
} // End bitc namespace
} // End llvm namespace
diff --git a/include/llvm/DerivedTypes.h b/include/llvm/DerivedTypes.h
index 12219c5354..d62cb3bcc9 100644
--- a/include/llvm/DerivedTypes.h
+++ b/include/llvm/DerivedTypes.h
@@ -363,12 +363,17 @@ public:
///
class PointerType : public SequentialType {
friend class TypeMap<PointerValType, PointerType>;
+ unsigned AddressSpace;
+
PointerType(const PointerType &); // Do not implement
const PointerType &operator=(const PointerType &); // Do not implement
- explicit PointerType(const Type *ElType);
+ explicit PointerType(const Type *ElType, unsigned AddrSpace);
public:
/// PointerType::get - This is the only way to construct a new pointer type.
- static PointerType *get(const Type *ElementType);
+ static PointerType *get(const Type *ElementType, unsigned AddressSpace = 0);
+
+ /// @brief Return the address space of the Pointer type.
+ inline unsigned getAddressSpace() const { return AddressSpace; }
// Implement the AbstractTypeUser interface.
virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy);
diff --git a/include/llvm/GlobalVariable.h b/include/llvm/GlobalVariable.h
index 00d4acb66d..7e99ae04ba 100644
--- a/include/llvm/GlobalVariable.h
+++ b/include/llvm/GlobalVariable.h
@@ -50,12 +50,14 @@ public:
/// automatically inserted into the end of the specified modules global list.
GlobalVariable(const Type *Ty, bool isConstant, LinkageTypes Linkage,
Constant *Initializer = 0, const std::string &Name = "",
- Module *Parent = 0, bool ThreadLocal = false);
+ Module *Parent = 0, bool ThreadLocal = false,
+ unsigned AddressSpace = 0);
/// GlobalVariable ctor - This creates a global and inserts it before the
/// specified other global.
GlobalVariable(const Type *Ty, bool isConstant, LinkageTypes Linkage,
Constant *Initializer, const std::string &Name,
- GlobalVariable *InsertBefore, bool ThreadLocal = false);
+ GlobalVariable *InsertBefore, bool ThreadLocal = false,
+ unsigned AddressSpace = 0);
/// isDeclaration - Is this global variable lacking an initializer? If so,
/// the global variable is defined in some other translation unit, and is thus
diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h
index bc5e0b4af9..3c8673e627 100644
--- a/include/llvm/Instructions.h
+++ b/include/llvm/Instructions.h
@@ -455,7 +455,8 @@ public:
Instruction *InsertBefore =0)
: Instruction(PointerType::get(
checkType(getIndexedType(Ptr->getType(),
- IdxBegin, IdxEnd, true))),
+ IdxBegin, IdxEnd, true)),
+ cast<PointerType>(Ptr->getType())->getAddressSpace()),
GetElementPtr, 0, 0, InsertBefore) {
init(Ptr, IdxBegin, IdxEnd, Name,
typename std::iterator_traits<InputIterator>::iterator_category());
@@ -465,7 +466,8 @@ public:
const std::string &Name, BasicBlock *InsertAtEnd)
: Instruction(PointerType::get(
checkType(getIndexedType(Ptr->getType(),
- IdxBegin, IdxEnd, true))),
+ IdxBegin, IdxEnd, true)),
+ cast<PointerType>(Ptr->getType())->getAddressSpace()),
GetElementPtr, 0, 0, InsertAtEnd) {
init(Ptr, IdxBegin, IdxEnd, Name,
typename std::iterator_traits<InputIterator>::iterator_category());