Implement findOptimalStorageSize a bit more generally
[oota-llvm.git] / lib / Target / TargetMachine.cpp
1 //===-- TargetMachine.cpp - General Target Information ---------------------==//
2 //
3 // This file describes the general parts of a Target machine.
4 // This file also implements MachineCacheInfo.
5 //
6 //===----------------------------------------------------------------------===//
7
8 #include "llvm/Target/TargetMachine.h"
9 #include "llvm/Target/MachineCacheInfo.h"
10 #include "llvm/Type.h"
11
12 //---------------------------------------------------------------------------
13 // class TargetMachine
14 // 
15 // Purpose:
16 //   Machine description.
17 // 
18 //---------------------------------------------------------------------------
19
20
21 // function TargetMachine::findOptimalStorageSize 
22 // 
23 // Purpose:
24 //   This default implementation assumes that all sub-word data items use
25 //   space equal to optSizeForSubWordData, and all other primitive data
26 //   items use space according to the type.
27 //   
28 unsigned TargetMachine::findOptimalStorageSize(const Type *Ty) const {
29   // Round integral values smaller than SubWordDataSize up to SubWordDataSize
30   if (Ty->isIntegral() &&
31       Ty->getPrimitiveSize() < DataLayout.getSubWordDataSize())
32     return DataLayout.getSubWordDataSize();
33
34   return DataLayout.getTypeSize(Ty);
35 }
36
37
38 //---------------------------------------------------------------------------
39 // class MachineCacheInfo 
40 // 
41 // Purpose:
42 //   Describes properties of the target cache architecture.
43 //---------------------------------------------------------------------------
44
45 void MachineCacheInfo::Initialize() {
46   numLevels = 2;
47   cacheLineSizes.push_back(16);  cacheLineSizes.push_back(32); 
48   cacheSizes.push_back(1 << 15); cacheSizes.push_back(1 << 20);
49   cacheAssoc.push_back(1);       cacheAssoc.push_back(4);
50 }