aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/TargetMachine/TargetMachine.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2001-08-27 15:50:41 +0000
committerChris Lattner <sabre@nondot.org>2001-08-27 15:50:41 +0000
commit3a13c7e56fe7dd722ce8b9be6b4fde7f37569800 (patch)
treef9d418236c2c59b5d2777ec8743df157df9effa5 /lib/CodeGen/TargetMachine/TargetMachine.cpp
parentfed72d5973cc0a55c4beafde599f9f769d5d277e (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.cpp93
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);
+ }
}