Factor code out to the TargetData class
authorChris Lattner <sabre@nondot.org>
Mon, 27 Aug 2001 15:50:41 +0000 (15:50 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 27 Aug 2001 15:50:41 +0000 (15:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@380 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/TargetMachine/TargetMachine.cpp

index 03819099bf218810b5e4d1237f01c92cbcbdab65..cf4cbc6800235ee6322656c439ed3ebb64c07967 100644 (file)
@@ -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);
+  }
 }