diff options
author | Chris Lattner <sabre@nondot.org> | 2001-08-27 15:50:41 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2001-08-27 15:50:41 +0000 |
commit | 3a13c7e56fe7dd722ce8b9be6b4fde7f37569800 (patch) | |
tree | f9d418236c2c59b5d2777ec8743df157df9effa5 /lib/CodeGen/TargetMachine/TargetMachine.cpp | |
parent | fed72d5973cc0a55c4beafde599f9f769d5d277e (diff) |
Factor code out to the TargetData class
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@380 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/TargetMachine/TargetMachine.cpp')
-rw-r--r-- | lib/CodeGen/TargetMachine/TargetMachine.cpp | 93 |
1 files changed, 11 insertions, 82 deletions
diff --git a/lib/CodeGen/TargetMachine/TargetMachine.cpp b/lib/CodeGen/TargetMachine/TargetMachine.cpp index 03819099bf..cf4cbc6800 100644 --- a/lib/CodeGen/TargetMachine/TargetMachine.cpp +++ b/lib/CodeGen/TargetMachine/TargetMachine.cpp @@ -39,93 +39,22 @@ const MachineInstrDescriptor* TargetInstrDescriptors = NULL; // function TargetMachine::findOptimalStorageSize // // Purpose: -// Compute optimal storage size for a structure, based on -// the optimal member offsets. // This default implementation assumes that all sub-word data items use // space equal to optSizeForSubWordData, and all other primitive data // items use space according to the type. // -unsigned int -TargetMachine::findOptimalStorageSize(const Type* ty) const -{ - switch(ty->getPrimitiveID()) - { - case Type::BoolTyID: - case Type::UByteTyID: case Type::SByteTyID: - case Type::UShortTyID: case Type::ShortTyID: - return optSizeForSubWordData; - break; - - case Type::UIntTyID: case Type::IntTyID: - return intSize; - break; - - case Type::FloatTyID: - return floatSize; - break; - - case Type::ULongTyID: case Type::LongTyID: - return longSize; - break; - - case Type::DoubleTyID: - return doubleSize; - break; - - case Type::PointerTyID: - case Type::LabelTyID: case Type::MethodTyID: - return pointerSize; - break; +unsigned int TargetMachine::findOptimalStorageSize(const Type* ty) const { + switch(ty->getPrimitiveID()) { + case Type::BoolTyID: + case Type::UByteTyID: + case Type::SByteTyID: + case Type::UShortTyID: + case Type::ShortTyID: + return optSizeForSubWordData; - case Type::ArrayTyID: - { - ArrayType* aty = (ArrayType*) ty; - assert(aty->getNumElements() >= 0 && - "Attempting to compute size for unknown-size array"); - return (unsigned) aty->getNumElements() * - this->findOptimalStorageSize(aty->getElementType()); - break; - } - - case Type::StructTyID: - {// This code should be invoked only from StructType::getStorageSize(). - StructType* sty = (StructType*) ty; - unsigned lastMemberIdx = sty->getElementTypes().size() - 1; - unsigned lastMemberOffset = sty->getElementOffset(lastMemberIdx, *this); - unsigned storageSize = lastMemberOffset - + this->findOptimalStorageSize(sty->getElementTypes()[lastMemberIdx]); - return storageSize; - break; - } - - default: - assert(0 && "Unexpected type in `findOptimalStorageSize'"); - return 0; - break; - } -} - - -// function TargetMachine::findOptimalMemberOffsets -// -// Purpose: -// Compute optimal offsets for the members of a structure. -// Returns a vector of unsigned ints, one per member. -// Caller is responsible for freeing the vector. - -unsigned int* -TargetMachine::findOptimalMemberOffsets(const StructType* stype) const -{ - int numMembers = stype->getElementTypes().size(); - unsigned int* offsetVec = new unsigned int[numMembers]; - unsigned int netOffset = 0; - for (int i = 0; i < numMembers; i++) - { - offsetVec[i] = netOffset; - const Type* memberType = stype->getElementTypes()[i]; - netOffset += this->findOptimalStorageSize(memberType); - } - return offsetVec; + default: + return DataLayout.getTypeSize(ty); + } } |