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 | 910b82f04246c5b160e1b2e2f02f90670d0da067 (patch) | |
tree | c5fdef4faea3cd89234d6c6555e71ae435884d88 /llvm/lib/Target/TargetInstrInfo.cpp | |
parent | 1303f2f0574257f3ff5d3a82f97ff087f01559aa (diff) | |
download | bcm5719-llvm-910b82f04246c5b160e1b2e2f02f90670d0da067.tar.gz bcm5719-llvm-910b82f04246c5b160e1b2e2f02f90670d0da067.zip |
Seperate code out of TargetMachine into MachineInstrInfo
llvm-svn: 4368
Diffstat (limited to 'llvm/lib/Target/TargetInstrInfo.cpp')
-rw-r--r-- | llvm/lib/Target/TargetInstrInfo.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/llvm/lib/Target/TargetInstrInfo.cpp b/llvm/lib/Target/TargetInstrInfo.cpp new file mode 100644 index 00000000000..ca26718708e --- /dev/null +++ b/llvm/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())); +} |