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