From 93fa70598c88fe14ebe4b3752daab4ea265233e1 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 28 Oct 2002 23:55:33 +0000 Subject: [PATCH] Seperate code out of TargetMachine into MachineInstrInfo git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4368 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/TargetInstrInfo.cpp | 56 +++++++++++++++++++++++++++++ lib/Target/TargetMachine.cpp | 65 ++-------------------------------- 2 files changed, 59 insertions(+), 62 deletions(-) create mode 100644 lib/Target/TargetInstrInfo.cpp diff --git a/lib/Target/TargetInstrInfo.cpp b/lib/Target/TargetInstrInfo.cpp new file mode 100644 index 00000000000..ca26718708e --- /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(CV->getType())); + return !(CV->getType()->isIntegral() || isa(CV->getType())); +} diff --git a/lib/Target/TargetMachine.cpp b/lib/Target/TargetMachine.cpp index 31277ff3cda..2d0d330d8db 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 @@ -44,55 +43,6 @@ 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 // @@ -100,16 +50,7 @@ MachineInstrInfo::constantFitsInImmedField(MachineOpCode opCode, // 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); -- 2.34.1