Renamed files to match the main classes they provide.
[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 the InstInfo interface as well...
5 //
6 //===----------------------------------------------------------------------===//
7
8 #include "llvm/Target/MachineInstrInfo.h"
9 #include "llvm/DerivedTypes.h"
10
11 //---------------------------------------------------------------------------
12 // class TargetMachine
13 // 
14 // Purpose:
15 //   Machine description.
16 // 
17 //---------------------------------------------------------------------------
18
19
20 // function TargetMachine::findOptimalStorageSize 
21 // 
22 // Purpose:
23 //   This default implementation assumes that all sub-word data items use
24 //   space equal to optSizeForSubWordData, and all other primitive data
25 //   items use space according to the type.
26 //   
27 unsigned int
28 TargetMachine::findOptimalStorageSize(const Type* ty) const
29 {
30   switch(ty->getPrimitiveID())
31     {
32     case Type::BoolTyID:
33     case Type::UByteTyID:
34     case Type::SByteTyID:     
35     case Type::UShortTyID:
36     case Type::ShortTyID:     
37       return optSizeForSubWordData;
38     
39     default:
40       return DataLayout.getTypeSize(ty);
41     }
42 }
43
44
45 //---------------------------------------------------------------------------
46 // class MachineInstructionInfo
47 //      Interface to description of machine instructions
48 //---------------------------------------------------------------------------
49
50
51 /*ctor*/
52 MachineInstrInfo::MachineInstrInfo(const MachineInstrDescriptor* _desc,
53                                    unsigned int _descSize,
54                                    unsigned int _numRealOpCodes)
55   : desc(_desc), descSize(_descSize), numRealOpCodes(_numRealOpCodes)
56 {
57   // FIXME: TargetInstrDescriptors should not be global
58   assert(TargetInstrDescriptors == NULL && desc != NULL);
59   TargetInstrDescriptors = desc;        // initialize global variable
60 }  
61
62
63 MachineInstrInfo::~MachineInstrInfo()
64 {
65   TargetInstrDescriptors = NULL;        // reset global variable
66 }
67
68
69 bool
70 MachineInstrInfo::constantFitsInImmedField(MachineOpCode opCode,
71                                            int64_t intValue) const
72 {
73   // First, check if opCode has an immed field.
74   bool isSignExtended;
75   uint64_t maxImmedValue = maxImmedConstant(opCode, isSignExtended);
76   if (maxImmedValue != 0)
77     {
78       // Now check if the constant fits
79       if (intValue <= (int64_t) maxImmedValue &&
80           intValue >= -((int64_t) maxImmedValue+1))
81         return true;
82     }
83   
84   return false;
85 }