diff options
| author | Vikram S. Adve <vadve@cs.uiuc.edu> | 2001-07-28 04:09:37 +0000 | 
|---|---|---|
| committer | Vikram S. Adve <vadve@cs.uiuc.edu> | 2001-07-28 04:09:37 +0000 | 
| commit | c42969175193f5dfd46b510f1ff9de58ab7528c8 (patch) | |
| tree | 1ba00f2f4fbb52ab3b25fd0f883f75e1c557eecc /llvm/lib | |
| parent | bff682dfac237eeb245e4c674ae3150c4038cbc1 (diff) | |
| download | bcm5719-llvm-c42969175193f5dfd46b510f1ff9de58ab7528c8.tar.gz bcm5719-llvm-c42969175193f5dfd46b510f1ff9de58ab7528c8.zip | |
Added MachineInstrInfo class and moved instruction-related members there.
Added several fields to MachineInstrDescriptor (and renamed it from
MachineInstrInfo.  Latency fields are to support scheduling.
llvm-svn: 308
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/TargetMachine/TargetMachine.cpp | 76 | 
1 files changed, 72 insertions, 4 deletions
| diff --git a/llvm/lib/CodeGen/TargetMachine/TargetMachine.cpp b/llvm/lib/CodeGen/TargetMachine/TargetMachine.cpp index 653f0217cd8..03819099bf2 100644 --- a/llvm/lib/CodeGen/TargetMachine/TargetMachine.cpp +++ b/llvm/lib/CodeGen/TargetMachine/TargetMachine.cpp @@ -15,18 +15,36 @@  #include "llvm/CodeGen/TargetMachine.h"  #include "llvm/DerivedTypes.h" +//************************ Exported Constants ******************************/ + + +// External object describing the machine instructions +// Initialized only when the TargetMachine class is created +// and reset when that class is destroyed. +//  +const MachineInstrDescriptor* TargetInstrDescriptors = NULL; +  //************************ Class Implementations **************************/  //--------------------------------------------------------------------------- -// function TargetMachine::findOptimalMemberOffsets  +// class TargetMachine  //   // 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. +//   Machine description. +//   //--------------------------------------------------------------------------- + +// 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  { @@ -87,6 +105,14 @@ TargetMachine::findOptimalStorageSize(const Type* ty) const      }  } + +// 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  { @@ -102,4 +128,46 @@ TargetMachine::findOptimalMemberOffsets(const StructType* stype) const    return offsetVec;  } + +//--------------------------------------------------------------------------- +// class MachineInstructionInfo +//	Interface to description of machine instructions +//--------------------------------------------------------------------------- + + +/*ctor*/ +MachineInstrInfo::MachineInstrInfo(const MachineInstrDescriptor* _desc, +				   unsigned int _descSize) +  : desc(_desc), descSize(_descSize) +{ +  assert(TargetInstrDescriptors == NULL && desc != NULL); +  TargetInstrDescriptors = desc;	// initialize global variable +}   + + +/*dtor*/ +MachineInstrInfo::~MachineInstrInfo() +{ +  TargetInstrDescriptors = NULL;	// reset global variable +} + + +bool +MachineInstrInfo::constantFitsInImmedField(MachineOpCode opCode, +					   int64_t intValue) const +{ +  // First, check if opCode has an immed field. +  bool isSignExtended; +  uint64_t maxImmedValue = this->maxImmedConstant(opCode, isSignExtended); +  if (maxImmedValue != 0) +    { +      // Now check if the constant fits +      if (intValue <= (int64_t) maxImmedValue && +	  intValue >= -((int64_t) maxImmedValue+1)) +	return true; +    } +   +  return false; +} +  //--------------------------------------------------------------------------- | 

