diff options
author | Chris Lattner <sabre@nondot.org> | 2002-10-28 23:55:33 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-10-28 23:55:33 +0000 |
commit | 93fa70598c88fe14ebe4b3752daab4ea265233e1 (patch) | |
tree | d5f6f8339cdec87cfb30097abc1cdd2abb521b2d | |
parent | 75276f150e081464300810c58934abcc9c4b9f53 (diff) |
Seperate code out of TargetMachine into MachineInstrInfo
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4368 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/TargetInstrInfo.cpp | 56 | ||||
-rw-r--r-- | lib/Target/TargetMachine.cpp | 65 |
2 files changed, 59 insertions, 62 deletions
diff --git a/lib/Target/TargetInstrInfo.cpp b/lib/Target/TargetInstrInfo.cpp new file mode 100644 index 0000000000..ca26718708 --- /dev/null +++ b/lib/Target/TargetInstrInfo.cpp @@ -0,0 +1,56 @@ +//===-- TargetMachine.cpp - General Target Information ---------------------==// +// +// This file describes the general parts of a Target machine. +// This file also implements MachineInstrInfo and MachineCacheInfo. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Target/MachineInstrInfo.h" +#include "llvm/Constant.h" +#include "llvm/DerivedTypes.h" + +//--------------------------------------------------------------------------- +// class MachineInstructionInfo +// Interface to description of machine instructions +//--------------------------------------------------------------------------- + + +MachineInstrInfo::MachineInstrInfo(const TargetMachine& tgt, + const MachineInstrDescriptor* Desc, + unsigned DescSize, + unsigned NumRealOpCodes) + : target(tgt), desc(Desc), descSize(DescSize), numRealOpCodes(NumRealOpCodes) { + // FIXME: TargetInstrDescriptors should not be global + assert(TargetInstrDescriptors == NULL && desc != NULL); + TargetInstrDescriptors = desc; // initialize global variable +} + +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 = maxImmedConstant(opCode, isSignExtended); + if (maxImmedValue != 0) + { + // NEED TO HANDLE UNSIGNED VALUES SINCE THEY MAY BECOME MUCH + // SMALLER AFTER CASTING TO SIGN-EXTENDED int, short, or char. + // See CreateUIntSetInstruction in SparcInstrInfo.cpp. + + // Now check if the constant fits + if (intValue <= (int64_t) maxImmedValue && + intValue >= -((int64_t) maxImmedValue+1)) + return true; + } + + return false; +} + +bool MachineInstrInfo::ConstantTypeMustBeLoaded(const Constant* CV) const { + assert(CV->getType()->isPrimitiveType() || isa<PointerType>(CV->getType())); + return !(CV->getType()->isIntegral() || isa<PointerType>(CV->getType())); +} diff --git a/lib/Target/TargetMachine.cpp b/lib/Target/TargetMachine.cpp index 31277ff3cd..2d0d330d8d 100644 --- a/lib/Target/TargetMachine.cpp +++ b/lib/Target/TargetMachine.cpp @@ -1,14 +1,13 @@ //===-- TargetMachine.cpp - General Target Information ---------------------==// // // This file describes the general parts of a Target machine. -// This file also implements MachineInstrInfo and MachineCacheInfo. +// This file also implements MachineCacheInfo. // //===----------------------------------------------------------------------===// #include "llvm/Target/TargetMachine.h" -#include "llvm/Target/MachineInstrInfo.h" #include "llvm/Target/MachineCacheInfo.h" -#include "llvm/Function.h" +#include "llvm/Type.h" //--------------------------------------------------------------------------- // class TargetMachine @@ -45,71 +44,13 @@ TargetMachine::findOptimalStorageSize(const Type* ty) const //--------------------------------------------------------------------------- -// class MachineInstructionInfo -// Interface to description of machine instructions -//--------------------------------------------------------------------------- - - -/*ctor*/ -MachineInstrInfo::MachineInstrInfo(const TargetMachine& tgt, - const MachineInstrDescriptor* _desc, - unsigned int _descSize, - unsigned int _numRealOpCodes) - : target(tgt), - desc(_desc), descSize(_descSize), numRealOpCodes(_numRealOpCodes) -{ - // FIXME: TargetInstrDescriptors should not be global - assert(TargetInstrDescriptors == NULL && desc != NULL); - TargetInstrDescriptors = desc; // initialize global variable -} - - -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 = maxImmedConstant(opCode, isSignExtended); - if (maxImmedValue != 0) - { - // NEED TO HANDLE UNSIGNED VALUES SINCE THEY MAY BECOME MUCH - // SMALLER AFTER CASTING TO SIGN-EXTENDED int, short, or char. - // See CreateUIntSetInstruction in SparcInstrInfo.cpp. - - // Now check if the constant fits - if (intValue <= (int64_t) maxImmedValue && - intValue >= -((int64_t) maxImmedValue+1)) - return true; - } - - return false; -} - - -//--------------------------------------------------------------------------- // class MachineCacheInfo // // Purpose: // Describes properties of the target cache architecture. //--------------------------------------------------------------------------- -/*ctor*/ -MachineCacheInfo::MachineCacheInfo(const TargetMachine& tgt) - : target(tgt) -{ - Initialize(); -} - -void -MachineCacheInfo::Initialize() -{ +void MachineCacheInfo::Initialize() { numLevels = 2; cacheLineSizes.push_back(16); cacheLineSizes.push_back(32); cacheSizes.push_back(1 << 15); cacheSizes.push_back(1 << 20); |