LLVM API Documentation
00001 //===-- Type.cpp - Implement the Type class -------------------------------===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 // 00010 // This file implements the Type class for the IR library. 00011 // 00012 //===----------------------------------------------------------------------===// 00013 00014 #include "llvm/IR/Type.h" 00015 #include "LLVMContextImpl.h" 00016 #include "llvm/ADT/SmallString.h" 00017 #include "llvm/IR/Module.h" 00018 #include <algorithm> 00019 #include <cstdarg> 00020 using namespace llvm; 00021 00022 //===----------------------------------------------------------------------===// 00023 // Type Class Implementation 00024 //===----------------------------------------------------------------------===// 00025 00026 Type *Type::getPrimitiveType(LLVMContext &C, TypeID IDNumber) { 00027 switch (IDNumber) { 00028 case VoidTyID : return getVoidTy(C); 00029 case HalfTyID : return getHalfTy(C); 00030 case FloatTyID : return getFloatTy(C); 00031 case DoubleTyID : return getDoubleTy(C); 00032 case X86_FP80TyID : return getX86_FP80Ty(C); 00033 case FP128TyID : return getFP128Ty(C); 00034 case PPC_FP128TyID : return getPPC_FP128Ty(C); 00035 case LabelTyID : return getLabelTy(C); 00036 case MetadataTyID : return getMetadataTy(C); 00037 case X86_MMXTyID : return getX86_MMXTy(C); 00038 default: 00039 return nullptr; 00040 } 00041 } 00042 00043 /// getScalarType - If this is a vector type, return the element type, 00044 /// otherwise return this. 00045 Type *Type::getScalarType() { 00046 if (VectorType *VTy = dyn_cast<VectorType>(this)) 00047 return VTy->getElementType(); 00048 return this; 00049 } 00050 00051 const Type *Type::getScalarType() const { 00052 if (const VectorType *VTy = dyn_cast<VectorType>(this)) 00053 return VTy->getElementType(); 00054 return this; 00055 } 00056 00057 /// isIntegerTy - Return true if this is an IntegerType of the specified width. 00058 bool Type::isIntegerTy(unsigned Bitwidth) const { 00059 return isIntegerTy() && cast<IntegerType>(this)->getBitWidth() == Bitwidth; 00060 } 00061 00062 // canLosslesslyBitCastTo - Return true if this type can be converted to 00063 // 'Ty' without any reinterpretation of bits. For example, i8* to i32*. 00064 // 00065 bool Type::canLosslesslyBitCastTo(Type *Ty) const { 00066 // Identity cast means no change so return true 00067 if (this == Ty) 00068 return true; 00069 00070 // They are not convertible unless they are at least first class types 00071 if (!this->isFirstClassType() || !Ty->isFirstClassType()) 00072 return false; 00073 00074 // Vector -> Vector conversions are always lossless if the two vector types 00075 // have the same size, otherwise not. Also, 64-bit vector types can be 00076 // converted to x86mmx. 00077 if (const VectorType *thisPTy = dyn_cast<VectorType>(this)) { 00078 if (const VectorType *thatPTy = dyn_cast<VectorType>(Ty)) 00079 return thisPTy->getBitWidth() == thatPTy->getBitWidth(); 00080 if (Ty->getTypeID() == Type::X86_MMXTyID && 00081 thisPTy->getBitWidth() == 64) 00082 return true; 00083 } 00084 00085 if (this->getTypeID() == Type::X86_MMXTyID) 00086 if (const VectorType *thatPTy = dyn_cast<VectorType>(Ty)) 00087 if (thatPTy->getBitWidth() == 64) 00088 return true; 00089 00090 // At this point we have only various mismatches of the first class types 00091 // remaining and ptr->ptr. Just select the lossless conversions. Everything 00092 // else is not lossless. Conservatively assume we can't losslessly convert 00093 // between pointers with different address spaces. 00094 if (const PointerType *PTy = dyn_cast<PointerType>(this)) { 00095 if (const PointerType *OtherPTy = dyn_cast<PointerType>(Ty)) 00096 return PTy->getAddressSpace() == OtherPTy->getAddressSpace(); 00097 return false; 00098 } 00099 return false; // Other types have no identity values 00100 } 00101 00102 bool Type::isEmptyTy() const { 00103 const ArrayType *ATy = dyn_cast<ArrayType>(this); 00104 if (ATy) { 00105 unsigned NumElements = ATy->getNumElements(); 00106 return NumElements == 0 || ATy->getElementType()->isEmptyTy(); 00107 } 00108 00109 const StructType *STy = dyn_cast<StructType>(this); 00110 if (STy) { 00111 unsigned NumElements = STy->getNumElements(); 00112 for (unsigned i = 0; i < NumElements; ++i) 00113 if (!STy->getElementType(i)->isEmptyTy()) 00114 return false; 00115 return true; 00116 } 00117 00118 return false; 00119 } 00120 00121 unsigned Type::getPrimitiveSizeInBits() const { 00122 switch (getTypeID()) { 00123 case Type::HalfTyID: return 16; 00124 case Type::FloatTyID: return 32; 00125 case Type::DoubleTyID: return 64; 00126 case Type::X86_FP80TyID: return 80; 00127 case Type::FP128TyID: return 128; 00128 case Type::PPC_FP128TyID: return 128; 00129 case Type::X86_MMXTyID: return 64; 00130 case Type::IntegerTyID: return cast<IntegerType>(this)->getBitWidth(); 00131 case Type::VectorTyID: return cast<VectorType>(this)->getBitWidth(); 00132 default: return 0; 00133 } 00134 } 00135 00136 /// getScalarSizeInBits - If this is a vector type, return the 00137 /// getPrimitiveSizeInBits value for the element type. Otherwise return the 00138 /// getPrimitiveSizeInBits value for this type. 00139 unsigned Type::getScalarSizeInBits() const { 00140 return getScalarType()->getPrimitiveSizeInBits(); 00141 } 00142 00143 /// getFPMantissaWidth - Return the width of the mantissa of this type. This 00144 /// is only valid on floating point types. If the FP type does not 00145 /// have a stable mantissa (e.g. ppc long double), this method returns -1. 00146 int Type::getFPMantissaWidth() const { 00147 if (const VectorType *VTy = dyn_cast<VectorType>(this)) 00148 return VTy->getElementType()->getFPMantissaWidth(); 00149 assert(isFloatingPointTy() && "Not a floating point type!"); 00150 if (getTypeID() == HalfTyID) return 11; 00151 if (getTypeID() == FloatTyID) return 24; 00152 if (getTypeID() == DoubleTyID) return 53; 00153 if (getTypeID() == X86_FP80TyID) return 64; 00154 if (getTypeID() == FP128TyID) return 113; 00155 assert(getTypeID() == PPC_FP128TyID && "unknown fp type"); 00156 return -1; 00157 } 00158 00159 /// isSizedDerivedType - Derived types like structures and arrays are sized 00160 /// iff all of the members of the type are sized as well. Since asking for 00161 /// their size is relatively uncommon, move this operation out of line. 00162 bool Type::isSizedDerivedType(SmallPtrSetImpl<const Type*> *Visited) const { 00163 if (const ArrayType *ATy = dyn_cast<ArrayType>(this)) 00164 return ATy->getElementType()->isSized(Visited); 00165 00166 if (const VectorType *VTy = dyn_cast<VectorType>(this)) 00167 return VTy->getElementType()->isSized(Visited); 00168 00169 return cast<StructType>(this)->isSized(Visited); 00170 } 00171 00172 //===----------------------------------------------------------------------===// 00173 // Subclass Helper Methods 00174 //===----------------------------------------------------------------------===// 00175 00176 unsigned Type::getIntegerBitWidth() const { 00177 return cast<IntegerType>(this)->getBitWidth(); 00178 } 00179 00180 bool Type::isFunctionVarArg() const { 00181 return cast<FunctionType>(this)->isVarArg(); 00182 } 00183 00184 Type *Type::getFunctionParamType(unsigned i) const { 00185 return cast<FunctionType>(this)->getParamType(i); 00186 } 00187 00188 unsigned Type::getFunctionNumParams() const { 00189 return cast<FunctionType>(this)->getNumParams(); 00190 } 00191 00192 StringRef Type::getStructName() const { 00193 return cast<StructType>(this)->getName(); 00194 } 00195 00196 unsigned Type::getStructNumElements() const { 00197 return cast<StructType>(this)->getNumElements(); 00198 } 00199 00200 Type *Type::getStructElementType(unsigned N) const { 00201 return cast<StructType>(this)->getElementType(N); 00202 } 00203 00204 Type *Type::getSequentialElementType() const { 00205 return cast<SequentialType>(this)->getElementType(); 00206 } 00207 00208 uint64_t Type::getArrayNumElements() const { 00209 return cast<ArrayType>(this)->getNumElements(); 00210 } 00211 00212 unsigned Type::getVectorNumElements() const { 00213 return cast<VectorType>(this)->getNumElements(); 00214 } 00215 00216 unsigned Type::getPointerAddressSpace() const { 00217 return cast<PointerType>(getScalarType())->getAddressSpace(); 00218 } 00219 00220 00221 //===----------------------------------------------------------------------===// 00222 // Primitive 'Type' data 00223 //===----------------------------------------------------------------------===// 00224 00225 Type *Type::getVoidTy(LLVMContext &C) { return &C.pImpl->VoidTy; } 00226 Type *Type::getLabelTy(LLVMContext &C) { return &C.pImpl->LabelTy; } 00227 Type *Type::getHalfTy(LLVMContext &C) { return &C.pImpl->HalfTy; } 00228 Type *Type::getFloatTy(LLVMContext &C) { return &C.pImpl->FloatTy; } 00229 Type *Type::getDoubleTy(LLVMContext &C) { return &C.pImpl->DoubleTy; } 00230 Type *Type::getMetadataTy(LLVMContext &C) { return &C.pImpl->MetadataTy; } 00231 Type *Type::getX86_FP80Ty(LLVMContext &C) { return &C.pImpl->X86_FP80Ty; } 00232 Type *Type::getFP128Ty(LLVMContext &C) { return &C.pImpl->FP128Ty; } 00233 Type *Type::getPPC_FP128Ty(LLVMContext &C) { return &C.pImpl->PPC_FP128Ty; } 00234 Type *Type::getX86_MMXTy(LLVMContext &C) { return &C.pImpl->X86_MMXTy; } 00235 00236 IntegerType *Type::getInt1Ty(LLVMContext &C) { return &C.pImpl->Int1Ty; } 00237 IntegerType *Type::getInt8Ty(LLVMContext &C) { return &C.pImpl->Int8Ty; } 00238 IntegerType *Type::getInt16Ty(LLVMContext &C) { return &C.pImpl->Int16Ty; } 00239 IntegerType *Type::getInt32Ty(LLVMContext &C) { return &C.pImpl->Int32Ty; } 00240 IntegerType *Type::getInt64Ty(LLVMContext &C) { return &C.pImpl->Int64Ty; } 00241 00242 IntegerType *Type::getIntNTy(LLVMContext &C, unsigned N) { 00243 return IntegerType::get(C, N); 00244 } 00245 00246 PointerType *Type::getHalfPtrTy(LLVMContext &C, unsigned AS) { 00247 return getHalfTy(C)->getPointerTo(AS); 00248 } 00249 00250 PointerType *Type::getFloatPtrTy(LLVMContext &C, unsigned AS) { 00251 return getFloatTy(C)->getPointerTo(AS); 00252 } 00253 00254 PointerType *Type::getDoublePtrTy(LLVMContext &C, unsigned AS) { 00255 return getDoubleTy(C)->getPointerTo(AS); 00256 } 00257 00258 PointerType *Type::getX86_FP80PtrTy(LLVMContext &C, unsigned AS) { 00259 return getX86_FP80Ty(C)->getPointerTo(AS); 00260 } 00261 00262 PointerType *Type::getFP128PtrTy(LLVMContext &C, unsigned AS) { 00263 return getFP128Ty(C)->getPointerTo(AS); 00264 } 00265 00266 PointerType *Type::getPPC_FP128PtrTy(LLVMContext &C, unsigned AS) { 00267 return getPPC_FP128Ty(C)->getPointerTo(AS); 00268 } 00269 00270 PointerType *Type::getX86_MMXPtrTy(LLVMContext &C, unsigned AS) { 00271 return getX86_MMXTy(C)->getPointerTo(AS); 00272 } 00273 00274 PointerType *Type::getIntNPtrTy(LLVMContext &C, unsigned N, unsigned AS) { 00275 return getIntNTy(C, N)->getPointerTo(AS); 00276 } 00277 00278 PointerType *Type::getInt1PtrTy(LLVMContext &C, unsigned AS) { 00279 return getInt1Ty(C)->getPointerTo(AS); 00280 } 00281 00282 PointerType *Type::getInt8PtrTy(LLVMContext &C, unsigned AS) { 00283 return getInt8Ty(C)->getPointerTo(AS); 00284 } 00285 00286 PointerType *Type::getInt16PtrTy(LLVMContext &C, unsigned AS) { 00287 return getInt16Ty(C)->getPointerTo(AS); 00288 } 00289 00290 PointerType *Type::getInt32PtrTy(LLVMContext &C, unsigned AS) { 00291 return getInt32Ty(C)->getPointerTo(AS); 00292 } 00293 00294 PointerType *Type::getInt64PtrTy(LLVMContext &C, unsigned AS) { 00295 return getInt64Ty(C)->getPointerTo(AS); 00296 } 00297 00298 00299 //===----------------------------------------------------------------------===// 00300 // IntegerType Implementation 00301 //===----------------------------------------------------------------------===// 00302 00303 IntegerType *IntegerType::get(LLVMContext &C, unsigned NumBits) { 00304 assert(NumBits >= MIN_INT_BITS && "bitwidth too small"); 00305 assert(NumBits <= MAX_INT_BITS && "bitwidth too large"); 00306 00307 // Check for the built-in integer types 00308 switch (NumBits) { 00309 case 1: return cast<IntegerType>(Type::getInt1Ty(C)); 00310 case 8: return cast<IntegerType>(Type::getInt8Ty(C)); 00311 case 16: return cast<IntegerType>(Type::getInt16Ty(C)); 00312 case 32: return cast<IntegerType>(Type::getInt32Ty(C)); 00313 case 64: return cast<IntegerType>(Type::getInt64Ty(C)); 00314 default: 00315 break; 00316 } 00317 00318 IntegerType *&Entry = C.pImpl->IntegerTypes[NumBits]; 00319 00320 if (!Entry) 00321 Entry = new (C.pImpl->TypeAllocator) IntegerType(C, NumBits); 00322 00323 return Entry; 00324 } 00325 00326 bool IntegerType::isPowerOf2ByteWidth() const { 00327 unsigned BitWidth = getBitWidth(); 00328 return (BitWidth > 7) && isPowerOf2_32(BitWidth); 00329 } 00330 00331 APInt IntegerType::getMask() const { 00332 return APInt::getAllOnesValue(getBitWidth()); 00333 } 00334 00335 //===----------------------------------------------------------------------===// 00336 // FunctionType Implementation 00337 //===----------------------------------------------------------------------===// 00338 00339 FunctionType::FunctionType(Type *Result, ArrayRef<Type*> Params, 00340 bool IsVarArgs) 00341 : Type(Result->getContext(), FunctionTyID) { 00342 Type **SubTys = reinterpret_cast<Type**>(this+1); 00343 assert(isValidReturnType(Result) && "invalid return type for function"); 00344 setSubclassData(IsVarArgs); 00345 00346 SubTys[0] = const_cast<Type*>(Result); 00347 00348 for (unsigned i = 0, e = Params.size(); i != e; ++i) { 00349 assert(isValidArgumentType(Params[i]) && 00350 "Not a valid type for function argument!"); 00351 SubTys[i+1] = Params[i]; 00352 } 00353 00354 ContainedTys = SubTys; 00355 NumContainedTys = Params.size() + 1; // + 1 for result type 00356 } 00357 00358 // FunctionType::get - The factory function for the FunctionType class. 00359 FunctionType *FunctionType::get(Type *ReturnType, 00360 ArrayRef<Type*> Params, bool isVarArg) { 00361 LLVMContextImpl *pImpl = ReturnType->getContext().pImpl; 00362 FunctionTypeKeyInfo::KeyTy Key(ReturnType, Params, isVarArg); 00363 LLVMContextImpl::FunctionTypeMap::iterator I = 00364 pImpl->FunctionTypes.find_as(Key); 00365 FunctionType *FT; 00366 00367 if (I == pImpl->FunctionTypes.end()) { 00368 FT = (FunctionType*) pImpl->TypeAllocator. 00369 Allocate(sizeof(FunctionType) + sizeof(Type*) * (Params.size() + 1), 00370 AlignOf<FunctionType>::Alignment); 00371 new (FT) FunctionType(ReturnType, Params, isVarArg); 00372 pImpl->FunctionTypes[FT] = true; 00373 } else { 00374 FT = I->first; 00375 } 00376 00377 return FT; 00378 } 00379 00380 FunctionType *FunctionType::get(Type *Result, bool isVarArg) { 00381 return get(Result, None, isVarArg); 00382 } 00383 00384 /// isValidReturnType - Return true if the specified type is valid as a return 00385 /// type. 00386 bool FunctionType::isValidReturnType(Type *RetTy) { 00387 return !RetTy->isFunctionTy() && !RetTy->isLabelTy() && 00388 !RetTy->isMetadataTy(); 00389 } 00390 00391 /// isValidArgumentType - Return true if the specified type is valid as an 00392 /// argument type. 00393 bool FunctionType::isValidArgumentType(Type *ArgTy) { 00394 return ArgTy->isFirstClassType(); 00395 } 00396 00397 //===----------------------------------------------------------------------===// 00398 // StructType Implementation 00399 //===----------------------------------------------------------------------===// 00400 00401 // Primitive Constructors. 00402 00403 StructType *StructType::get(LLVMContext &Context, ArrayRef<Type*> ETypes, 00404 bool isPacked) { 00405 LLVMContextImpl *pImpl = Context.pImpl; 00406 AnonStructTypeKeyInfo::KeyTy Key(ETypes, isPacked); 00407 LLVMContextImpl::StructTypeMap::iterator I = 00408 pImpl->AnonStructTypes.find_as(Key); 00409 StructType *ST; 00410 00411 if (I == pImpl->AnonStructTypes.end()) { 00412 // Value not found. Create a new type! 00413 ST = new (Context.pImpl->TypeAllocator) StructType(Context); 00414 ST->setSubclassData(SCDB_IsLiteral); // Literal struct. 00415 ST->setBody(ETypes, isPacked); 00416 Context.pImpl->AnonStructTypes[ST] = true; 00417 } else { 00418 ST = I->first; 00419 } 00420 00421 return ST; 00422 } 00423 00424 void StructType::setBody(ArrayRef<Type*> Elements, bool isPacked) { 00425 assert(isOpaque() && "Struct body already set!"); 00426 00427 setSubclassData(getSubclassData() | SCDB_HasBody); 00428 if (isPacked) 00429 setSubclassData(getSubclassData() | SCDB_Packed); 00430 00431 unsigned NumElements = Elements.size(); 00432 Type **Elts = getContext().pImpl->TypeAllocator.Allocate<Type*>(NumElements); 00433 memcpy(Elts, Elements.data(), sizeof(Elements[0]) * NumElements); 00434 00435 ContainedTys = Elts; 00436 NumContainedTys = NumElements; 00437 } 00438 00439 void StructType::setName(StringRef Name) { 00440 if (Name == getName()) return; 00441 00442 StringMap<StructType *> &SymbolTable = getContext().pImpl->NamedStructTypes; 00443 typedef StringMap<StructType *>::MapEntryTy EntryTy; 00444 00445 // If this struct already had a name, remove its symbol table entry. Don't 00446 // delete the data yet because it may be part of the new name. 00447 if (SymbolTableEntry) 00448 SymbolTable.remove((EntryTy *)SymbolTableEntry); 00449 00450 // If this is just removing the name, we're done. 00451 if (Name.empty()) { 00452 if (SymbolTableEntry) { 00453 // Delete the old string data. 00454 ((EntryTy *)SymbolTableEntry)->Destroy(SymbolTable.getAllocator()); 00455 SymbolTableEntry = nullptr; 00456 } 00457 return; 00458 } 00459 00460 // Look up the entry for the name. 00461 EntryTy *Entry = &getContext().pImpl->NamedStructTypes.GetOrCreateValue(Name); 00462 00463 // While we have a name collision, try a random rename. 00464 if (Entry->getValue()) { 00465 SmallString<64> TempStr(Name); 00466 TempStr.push_back('.'); 00467 raw_svector_ostream TmpStream(TempStr); 00468 unsigned NameSize = Name.size(); 00469 00470 do { 00471 TempStr.resize(NameSize + 1); 00472 TmpStream.resync(); 00473 TmpStream << getContext().pImpl->NamedStructTypesUniqueID++; 00474 00475 Entry = &getContext().pImpl-> 00476 NamedStructTypes.GetOrCreateValue(TmpStream.str()); 00477 } while (Entry->getValue()); 00478 } 00479 00480 // Okay, we found an entry that isn't used. It's us! 00481 Entry->setValue(this); 00482 00483 // Delete the old string data. 00484 if (SymbolTableEntry) 00485 ((EntryTy *)SymbolTableEntry)->Destroy(SymbolTable.getAllocator()); 00486 SymbolTableEntry = Entry; 00487 } 00488 00489 //===----------------------------------------------------------------------===// 00490 // StructType Helper functions. 00491 00492 StructType *StructType::create(LLVMContext &Context, StringRef Name) { 00493 StructType *ST = new (Context.pImpl->TypeAllocator) StructType(Context); 00494 if (!Name.empty()) 00495 ST->setName(Name); 00496 return ST; 00497 } 00498 00499 StructType *StructType::get(LLVMContext &Context, bool isPacked) { 00500 return get(Context, None, isPacked); 00501 } 00502 00503 StructType *StructType::get(Type *type, ...) { 00504 assert(type && "Cannot create a struct type with no elements with this"); 00505 LLVMContext &Ctx = type->getContext(); 00506 va_list ap; 00507 SmallVector<llvm::Type*, 8> StructFields; 00508 va_start(ap, type); 00509 while (type) { 00510 StructFields.push_back(type); 00511 type = va_arg(ap, llvm::Type*); 00512 } 00513 auto *Ret = llvm::StructType::get(Ctx, StructFields); 00514 va_end(ap); 00515 return Ret; 00516 } 00517 00518 StructType *StructType::create(LLVMContext &Context, ArrayRef<Type*> Elements, 00519 StringRef Name, bool isPacked) { 00520 StructType *ST = create(Context, Name); 00521 ST->setBody(Elements, isPacked); 00522 return ST; 00523 } 00524 00525 StructType *StructType::create(LLVMContext &Context, ArrayRef<Type*> Elements) { 00526 return create(Context, Elements, StringRef()); 00527 } 00528 00529 StructType *StructType::create(LLVMContext &Context) { 00530 return create(Context, StringRef()); 00531 } 00532 00533 StructType *StructType::create(ArrayRef<Type*> Elements, StringRef Name, 00534 bool isPacked) { 00535 assert(!Elements.empty() && 00536 "This method may not be invoked with an empty list"); 00537 return create(Elements[0]->getContext(), Elements, Name, isPacked); 00538 } 00539 00540 StructType *StructType::create(ArrayRef<Type*> Elements) { 00541 assert(!Elements.empty() && 00542 "This method may not be invoked with an empty list"); 00543 return create(Elements[0]->getContext(), Elements, StringRef()); 00544 } 00545 00546 StructType *StructType::create(StringRef Name, Type *type, ...) { 00547 assert(type && "Cannot create a struct type with no elements with this"); 00548 LLVMContext &Ctx = type->getContext(); 00549 va_list ap; 00550 SmallVector<llvm::Type*, 8> StructFields; 00551 va_start(ap, type); 00552 while (type) { 00553 StructFields.push_back(type); 00554 type = va_arg(ap, llvm::Type*); 00555 } 00556 auto *Ret = llvm::StructType::create(Ctx, StructFields, Name); 00557 va_end(ap); 00558 return Ret; 00559 } 00560 00561 bool StructType::isSized(SmallPtrSetImpl<const Type*> *Visited) const { 00562 if ((getSubclassData() & SCDB_IsSized) != 0) 00563 return true; 00564 if (isOpaque()) 00565 return false; 00566 00567 if (Visited && !Visited->insert(this)) 00568 return false; 00569 00570 // Okay, our struct is sized if all of the elements are, but if one of the 00571 // elements is opaque, the struct isn't sized *yet*, but may become sized in 00572 // the future, so just bail out without caching. 00573 for (element_iterator I = element_begin(), E = element_end(); I != E; ++I) 00574 if (!(*I)->isSized(Visited)) 00575 return false; 00576 00577 // Here we cheat a bit and cast away const-ness. The goal is to memoize when 00578 // we find a sized type, as types can only move from opaque to sized, not the 00579 // other way. 00580 const_cast<StructType*>(this)->setSubclassData( 00581 getSubclassData() | SCDB_IsSized); 00582 return true; 00583 } 00584 00585 StringRef StructType::getName() const { 00586 assert(!isLiteral() && "Literal structs never have names"); 00587 if (!SymbolTableEntry) return StringRef(); 00588 00589 return ((StringMapEntry<StructType*> *)SymbolTableEntry)->getKey(); 00590 } 00591 00592 void StructType::setBody(Type *type, ...) { 00593 assert(type && "Cannot create a struct type with no elements with this"); 00594 va_list ap; 00595 SmallVector<llvm::Type*, 8> StructFields; 00596 va_start(ap, type); 00597 while (type) { 00598 StructFields.push_back(type); 00599 type = va_arg(ap, llvm::Type*); 00600 } 00601 setBody(StructFields); 00602 va_end(ap); 00603 } 00604 00605 bool StructType::isValidElementType(Type *ElemTy) { 00606 return !ElemTy->isVoidTy() && !ElemTy->isLabelTy() && 00607 !ElemTy->isMetadataTy() && !ElemTy->isFunctionTy(); 00608 } 00609 00610 /// isLayoutIdentical - Return true if this is layout identical to the 00611 /// specified struct. 00612 bool StructType::isLayoutIdentical(StructType *Other) const { 00613 if (this == Other) return true; 00614 00615 if (isPacked() != Other->isPacked() || 00616 getNumElements() != Other->getNumElements()) 00617 return false; 00618 00619 return std::equal(element_begin(), element_end(), Other->element_begin()); 00620 } 00621 00622 /// getTypeByName - Return the type with the specified name, or null if there 00623 /// is none by that name. 00624 StructType *Module::getTypeByName(StringRef Name) const { 00625 return getContext().pImpl->NamedStructTypes.lookup(Name); 00626 } 00627 00628 00629 //===----------------------------------------------------------------------===// 00630 // CompositeType Implementation 00631 //===----------------------------------------------------------------------===// 00632 00633 Type *CompositeType::getTypeAtIndex(const Value *V) { 00634 if (StructType *STy = dyn_cast<StructType>(this)) { 00635 unsigned Idx = 00636 (unsigned)cast<Constant>(V)->getUniqueInteger().getZExtValue(); 00637 assert(indexValid(Idx) && "Invalid structure index!"); 00638 return STy->getElementType(Idx); 00639 } 00640 00641 return cast<SequentialType>(this)->getElementType(); 00642 } 00643 Type *CompositeType::getTypeAtIndex(unsigned Idx) { 00644 if (StructType *STy = dyn_cast<StructType>(this)) { 00645 assert(indexValid(Idx) && "Invalid structure index!"); 00646 return STy->getElementType(Idx); 00647 } 00648 00649 return cast<SequentialType>(this)->getElementType(); 00650 } 00651 bool CompositeType::indexValid(const Value *V) const { 00652 if (const StructType *STy = dyn_cast<StructType>(this)) { 00653 // Structure indexes require (vectors of) 32-bit integer constants. In the 00654 // vector case all of the indices must be equal. 00655 if (!V->getType()->getScalarType()->isIntegerTy(32)) 00656 return false; 00657 const Constant *C = dyn_cast<Constant>(V); 00658 if (C && V->getType()->isVectorTy()) 00659 C = C->getSplatValue(); 00660 const ConstantInt *CU = dyn_cast_or_null<ConstantInt>(C); 00661 return CU && CU->getZExtValue() < STy->getNumElements(); 00662 } 00663 00664 // Sequential types can be indexed by any integer. 00665 return V->getType()->isIntOrIntVectorTy(); 00666 } 00667 00668 bool CompositeType::indexValid(unsigned Idx) const { 00669 if (const StructType *STy = dyn_cast<StructType>(this)) 00670 return Idx < STy->getNumElements(); 00671 // Sequential types can be indexed by any integer. 00672 return true; 00673 } 00674 00675 00676 //===----------------------------------------------------------------------===// 00677 // ArrayType Implementation 00678 //===----------------------------------------------------------------------===// 00679 00680 ArrayType::ArrayType(Type *ElType, uint64_t NumEl) 00681 : SequentialType(ArrayTyID, ElType) { 00682 NumElements = NumEl; 00683 } 00684 00685 ArrayType *ArrayType::get(Type *elementType, uint64_t NumElements) { 00686 Type *ElementType = const_cast<Type*>(elementType); 00687 assert(isValidElementType(ElementType) && "Invalid type for array element!"); 00688 00689 LLVMContextImpl *pImpl = ElementType->getContext().pImpl; 00690 ArrayType *&Entry = 00691 pImpl->ArrayTypes[std::make_pair(ElementType, NumElements)]; 00692 00693 if (!Entry) 00694 Entry = new (pImpl->TypeAllocator) ArrayType(ElementType, NumElements); 00695 return Entry; 00696 } 00697 00698 bool ArrayType::isValidElementType(Type *ElemTy) { 00699 return !ElemTy->isVoidTy() && !ElemTy->isLabelTy() && 00700 !ElemTy->isMetadataTy() && !ElemTy->isFunctionTy(); 00701 } 00702 00703 //===----------------------------------------------------------------------===// 00704 // VectorType Implementation 00705 //===----------------------------------------------------------------------===// 00706 00707 VectorType::VectorType(Type *ElType, unsigned NumEl) 00708 : SequentialType(VectorTyID, ElType) { 00709 NumElements = NumEl; 00710 } 00711 00712 VectorType *VectorType::get(Type *elementType, unsigned NumElements) { 00713 Type *ElementType = const_cast<Type*>(elementType); 00714 assert(NumElements > 0 && "#Elements of a VectorType must be greater than 0"); 00715 assert(isValidElementType(ElementType) && 00716 "Elements of a VectorType must be a primitive type"); 00717 00718 LLVMContextImpl *pImpl = ElementType->getContext().pImpl; 00719 VectorType *&Entry = ElementType->getContext().pImpl 00720 ->VectorTypes[std::make_pair(ElementType, NumElements)]; 00721 00722 if (!Entry) 00723 Entry = new (pImpl->TypeAllocator) VectorType(ElementType, NumElements); 00724 return Entry; 00725 } 00726 00727 bool VectorType::isValidElementType(Type *ElemTy) { 00728 return ElemTy->isIntegerTy() || ElemTy->isFloatingPointTy() || 00729 ElemTy->isPointerTy(); 00730 } 00731 00732 //===----------------------------------------------------------------------===// 00733 // PointerType Implementation 00734 //===----------------------------------------------------------------------===// 00735 00736 PointerType *PointerType::get(Type *EltTy, unsigned AddressSpace) { 00737 assert(EltTy && "Can't get a pointer to <null> type!"); 00738 assert(isValidElementType(EltTy) && "Invalid type for pointer element!"); 00739 00740 LLVMContextImpl *CImpl = EltTy->getContext().pImpl; 00741 00742 // Since AddressSpace #0 is the common case, we special case it. 00743 PointerType *&Entry = AddressSpace == 0 ? CImpl->PointerTypes[EltTy] 00744 : CImpl->ASPointerTypes[std::make_pair(EltTy, AddressSpace)]; 00745 00746 if (!Entry) 00747 Entry = new (CImpl->TypeAllocator) PointerType(EltTy, AddressSpace); 00748 return Entry; 00749 } 00750 00751 00752 PointerType::PointerType(Type *E, unsigned AddrSpace) 00753 : SequentialType(PointerTyID, E) { 00754 #ifndef NDEBUG 00755 const unsigned oldNCT = NumContainedTys; 00756 #endif 00757 setSubclassData(AddrSpace); 00758 // Check for miscompile. PR11652. 00759 assert(oldNCT == NumContainedTys && "bitfield written out of bounds?"); 00760 } 00761 00762 PointerType *Type::getPointerTo(unsigned addrs) { 00763 return PointerType::get(this, addrs); 00764 } 00765 00766 bool PointerType::isValidElementType(Type *ElemTy) { 00767 return !ElemTy->isVoidTy() && !ElemTy->isLabelTy() && 00768 !ElemTy->isMetadataTy(); 00769 }