Added address space qualifier to intrinsic PointerType arguments.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157218 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Pete Cooper 2012-05-21 23:21:28 +00:00
parent 4b6e6750fe
commit b428511989
3 changed files with 16 additions and 3 deletions

View File

@ -63,11 +63,15 @@ class LLVMType<ValueType vt> {
ValueType VT = vt;
}
class LLVMPointerType<LLVMType elty>
class LLVMQualPointerType<LLVMType elty, int addrspace>
: LLVMType<iPTR>{
LLVMType ElTy = elty;
int AddrSpace = addrspace;
}
class LLVMPointerType<LLVMType elty>
: LLVMQualPointerType<elty, 0>;
class LLVMAnyPointerType<LLVMType elty>
: LLVMType<iPTRAny>{
LLVMType ElTy = elty;

View File

@ -388,8 +388,11 @@ static Type *DecodeFixedType(unsigned &NextElt, ArrayRef<unsigned char> Infos,
return VectorType::get(DecodeFixedType(NextElt, Infos, Tys, Context), 16);
case IIT_V32:
return VectorType::get(DecodeFixedType(NextElt, Infos, Tys, Context), 32);
case IIT_PTR:
return PointerType::getUnqual(DecodeFixedType(NextElt, Infos, Tys,Context));
case IIT_PTR: {
unsigned AddrSpace = Infos[NextElt++];
Type *PtrTy = DecodeFixedType(NextElt, Infos, Tys,Context);
return PointerType::get(PtrTy, AddrSpace);
}
case IIT_ARG:
case IIT_EXTEND_VEC_ARG:
case IIT_TRUNC_VEC_ARG: {

View File

@ -413,6 +413,12 @@ static void EncodeFixedType(Record *R, unsigned &NextArgNo,
if (VT == MVT::iPTR) {
Sig.push_back(IIT_PTR);
unsigned AddrSpace = 0;
if (R->isSubClassOf("LLVMQualPointerType")) {
AddrSpace = R->getValueAsInt("AddrSpace");
assert(AddrSpace < 256 && "Address space exceeds 255");
}
Sig.push_back(AddrSpace);
return EncodeFixedType(R->getValueAsDef("ElTy"), NextArgNo, Sig);
}