mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-28 19:25:00 +00:00
land David Blaikie's patch to de-constify Type, with a few tweaks.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135375 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -41,7 +41,7 @@ char TargetData::ID = 0;
|
||||
// Support for StructLayout
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
StructLayout::StructLayout(const StructType *ST, const TargetData &TD) {
|
||||
StructLayout::StructLayout(StructType *ST, const TargetData &TD) {
|
||||
assert(!ST->isOpaque() && "Cannot get layout of opaque structs");
|
||||
StructAlignment = 0;
|
||||
StructSize = 0;
|
||||
@@ -49,7 +49,7 @@ StructLayout::StructLayout(const StructType *ST, const TargetData &TD) {
|
||||
|
||||
// Loop over each of the elements, placing them in memory.
|
||||
for (unsigned i = 0, e = NumElements; i != e; ++i) {
|
||||
const Type *Ty = ST->getElementType(i);
|
||||
Type *Ty = ST->getElementType(i);
|
||||
unsigned TyAlign = ST->isPacked() ? 1 : TD.getABITypeAlignment(Ty);
|
||||
|
||||
// Add padding if necessary to align the data element properly.
|
||||
@@ -261,7 +261,7 @@ TargetData::setAlignment(AlignTypeEnum align_type, unsigned abi_align,
|
||||
/// preferred if ABIInfo = false) the target wants for the specified datatype.
|
||||
unsigned TargetData::getAlignmentInfo(AlignTypeEnum AlignType,
|
||||
uint32_t BitWidth, bool ABIInfo,
|
||||
const Type *Ty) const {
|
||||
Type *Ty) const {
|
||||
// Check to see if we have an exact match and remember the best match we see.
|
||||
int BestMatchIdx = -1;
|
||||
int LargestInt = -1;
|
||||
@@ -315,7 +315,7 @@ unsigned TargetData::getAlignmentInfo(AlignTypeEnum AlignType,
|
||||
namespace {
|
||||
|
||||
class StructLayoutMap {
|
||||
typedef DenseMap<const StructType*, StructLayout*> LayoutInfoTy;
|
||||
typedef DenseMap<StructType*, StructLayout*> LayoutInfoTy;
|
||||
LayoutInfoTy LayoutInfo;
|
||||
|
||||
public:
|
||||
@@ -329,7 +329,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
StructLayout *&operator[](const StructType *STy) {
|
||||
StructLayout *&operator[](StructType *STy) {
|
||||
return LayoutInfo[STy];
|
||||
}
|
||||
|
||||
@@ -343,7 +343,7 @@ TargetData::~TargetData() {
|
||||
delete static_cast<StructLayoutMap*>(LayoutMap);
|
||||
}
|
||||
|
||||
const StructLayout *TargetData::getStructLayout(const StructType *Ty) const {
|
||||
const StructLayout *TargetData::getStructLayout(StructType *Ty) const {
|
||||
if (!LayoutMap)
|
||||
LayoutMap = new StructLayoutMap();
|
||||
|
||||
@@ -389,14 +389,14 @@ std::string TargetData::getStringRepresentation() const {
|
||||
}
|
||||
|
||||
|
||||
uint64_t TargetData::getTypeSizeInBits(const Type *Ty) const {
|
||||
uint64_t TargetData::getTypeSizeInBits(Type *Ty) const {
|
||||
assert(Ty->isSized() && "Cannot getTypeInfo() on a type that is unsized!");
|
||||
switch (Ty->getTypeID()) {
|
||||
case Type::LabelTyID:
|
||||
case Type::PointerTyID:
|
||||
return getPointerSizeInBits();
|
||||
case Type::ArrayTyID: {
|
||||
const ArrayType *ATy = cast<ArrayType>(Ty);
|
||||
ArrayType *ATy = cast<ArrayType>(Ty);
|
||||
return getTypeAllocSizeInBits(ATy->getElementType())*ATy->getNumElements();
|
||||
}
|
||||
case Type::StructTyID:
|
||||
@@ -435,7 +435,7 @@ uint64_t TargetData::getTypeSizeInBits(const Type *Ty) const {
|
||||
Get the ABI (\a abi_or_pref == true) or preferred alignment (\a abi_or_pref
|
||||
== false) for the requested type \a Ty.
|
||||
*/
|
||||
unsigned TargetData::getAlignment(const Type *Ty, bool abi_or_pref) const {
|
||||
unsigned TargetData::getAlignment(Type *Ty, bool abi_or_pref) const {
|
||||
int AlignType = -1;
|
||||
|
||||
assert(Ty->isSized() && "Cannot getTypeInfo() on a type that is unsized!");
|
||||
@@ -485,7 +485,7 @@ unsigned TargetData::getAlignment(const Type *Ty, bool abi_or_pref) const {
|
||||
abi_or_pref, Ty);
|
||||
}
|
||||
|
||||
unsigned TargetData::getABITypeAlignment(const Type *Ty) const {
|
||||
unsigned TargetData::getABITypeAlignment(Type *Ty) const {
|
||||
return getAlignment(Ty, true);
|
||||
}
|
||||
|
||||
@@ -496,7 +496,7 @@ unsigned TargetData::getABIIntegerTypeAlignment(unsigned BitWidth) const {
|
||||
}
|
||||
|
||||
|
||||
unsigned TargetData::getCallFrameTypeAlignment(const Type *Ty) const {
|
||||
unsigned TargetData::getCallFrameTypeAlignment(Type *Ty) const {
|
||||
for (unsigned i = 0, e = Alignments.size(); i != e; ++i)
|
||||
if (Alignments[i].AlignType == STACK_ALIGN)
|
||||
return Alignments[i].ABIAlign;
|
||||
@@ -504,11 +504,11 @@ unsigned TargetData::getCallFrameTypeAlignment(const Type *Ty) const {
|
||||
return getABITypeAlignment(Ty);
|
||||
}
|
||||
|
||||
unsigned TargetData::getPrefTypeAlignment(const Type *Ty) const {
|
||||
unsigned TargetData::getPrefTypeAlignment(Type *Ty) const {
|
||||
return getAlignment(Ty, false);
|
||||
}
|
||||
|
||||
unsigned TargetData::getPreferredTypeAlignmentShift(const Type *Ty) const {
|
||||
unsigned TargetData::getPreferredTypeAlignmentShift(Type *Ty) const {
|
||||
unsigned Align = getPrefTypeAlignment(Ty);
|
||||
assert(!(Align & (Align-1)) && "Alignment is not a power of two!");
|
||||
return Log2_32(Align);
|
||||
@@ -521,16 +521,16 @@ IntegerType *TargetData::getIntPtrType(LLVMContext &C) const {
|
||||
}
|
||||
|
||||
|
||||
uint64_t TargetData::getIndexedOffset(const Type *ptrTy, Value* const* Indices,
|
||||
uint64_t TargetData::getIndexedOffset(Type *ptrTy, Value* const* Indices,
|
||||
unsigned NumIndices) const {
|
||||
const Type *Ty = ptrTy;
|
||||
Type *Ty = ptrTy;
|
||||
assert(Ty->isPointerTy() && "Illegal argument for getIndexedOffset()");
|
||||
uint64_t Result = 0;
|
||||
|
||||
generic_gep_type_iterator<Value* const*>
|
||||
TI = gep_type_begin(ptrTy, Indices, Indices+NumIndices);
|
||||
for (unsigned CurIDX = 0; CurIDX != NumIndices; ++CurIDX, ++TI) {
|
||||
if (const StructType *STy = dyn_cast<StructType>(*TI)) {
|
||||
if (StructType *STy = dyn_cast<StructType>(*TI)) {
|
||||
assert(Indices[CurIDX]->getType() ==
|
||||
Type::getInt32Ty(ptrTy->getContext()) &&
|
||||
"Illegal struct idx");
|
||||
@@ -561,7 +561,7 @@ uint64_t TargetData::getIndexedOffset(const Type *ptrTy, Value* const* Indices,
|
||||
/// global. This includes an explicitly requested alignment (if the global
|
||||
/// has one).
|
||||
unsigned TargetData::getPreferredAlignment(const GlobalVariable *GV) const {
|
||||
const Type *ElemType = GV->getType()->getElementType();
|
||||
Type *ElemType = GV->getType()->getElementType();
|
||||
unsigned Alignment = getPrefTypeAlignment(ElemType);
|
||||
unsigned GVAlignment = GV->getAlignment();
|
||||
if (GVAlignment >= Alignment) {
|
||||
|
Reference in New Issue
Block a user