Added class MachineOptInfo as interface to target-specific

routines supporting machine code optimization.
Also added method MachineInstrInfo::getNOPOpCode().


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3845 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Vikram S. Adve 2002-09-20 00:52:09 +00:00
parent 2542d9a183
commit d55697cf13
5 changed files with 47 additions and 8 deletions

View File

@ -191,7 +191,7 @@ public:
bool isPseudoInstr(const MachineOpCode opCode) const {
return getDescriptor(opCode).iclass & M_PSEUDO_FLAG;
}
// Check if an instruction can be issued before its operands are ready,
// or if a subsequent instruction that uses its result can be issued
// before the results are ready.
@ -265,7 +265,12 @@ public:
//-------------------------------------------------------------------------
// Code generation support for creating individual machine instructions
//-------------------------------------------------------------------------
// Get certain common op codes for the current target. this and all the
// Create* methods below should be moved to a machine code generation class
//
virtual MachineOpCode getNOPOpCode() const = 0;
// Create an instruction sequence to put the constant `val' into
// the virtual register `dest'. `val' may be a Constant or a
// GlobalValue, viz., the constant address of a global variable or function.

View File

@ -191,7 +191,7 @@ public:
bool isPseudoInstr(const MachineOpCode opCode) const {
return getDescriptor(opCode).iclass & M_PSEUDO_FLAG;
}
// Check if an instruction can be issued before its operands are ready,
// or if a subsequent instruction that uses its result can be issued
// before the results are ready.
@ -265,7 +265,12 @@ public:
//-------------------------------------------------------------------------
// Code generation support for creating individual machine instructions
//-------------------------------------------------------------------------
// Get certain common op codes for the current target. this and all the
// Create* methods below should be moved to a machine code generation class
//
virtual MachineOpCode getNOPOpCode() const = 0;
// Create an instruction sequence to put the constant `val' into
// the virtual register `dest'. `val' may be a Constant or a
// GlobalValue, viz., the constant address of a global variable or function.

View File

@ -16,6 +16,7 @@ class MachineSchedInfo;
class MachineRegInfo;
class MachineFrameInfo;
class MachineCacheInfo;
class MachineOptInfo;
class PassManager;
class Pass;
@ -56,13 +57,17 @@ public:
// -- Instruction opcode and operand information
// -- Pipelines and scheduling information
// -- Register information
// -- Stack frame information
// -- Cache hierarchy information
// -- Machine-level optimization information (peephole only)
//
virtual const MachineInstrInfo& getInstrInfo() const = 0;
virtual const MachineSchedInfo& getSchedInfo() const = 0;
virtual const MachineRegInfo& getRegInfo() const = 0;
virtual const MachineFrameInfo& getFrameInfo() const = 0;
virtual const MachineCacheInfo& getCacheInfo() const = 0;
virtual const MachineOptInfo& getOptInfo() const = 0;
// Data storage information
//
virtual unsigned int findOptimalStorageSize (const Type* ty) const;

View File

@ -13,6 +13,7 @@
#include "llvm/Target/MachineFrameInfo.h"
#include "llvm/Target/MachineCacheInfo.h"
#include "llvm/Target/MachineRegInfo.h"
#include "llvm/Target/MachineOptInfo.h"
#include "llvm/Type.h"
#include <sys/types.h>
@ -125,7 +126,12 @@ struct UltraSparcInstrInfo : public MachineInstrInfo {
//-------------------------------------------------------------------------
// Code generation support for creating individual machine instructions
//-------------------------------------------------------------------------
// Get certain common op codes for the current target. This and all the
// Create* methods below should be moved to a machine code generation class
//
virtual MachineOpCode getNOPOpCode() const { return NOP; }
// Create an instruction sequence to put the constant `val' into
// the virtual register `dest'. `val' may be a Constant or a
// GlobalValue, viz., the constant address of a global variable or function.
@ -690,6 +696,21 @@ public:
};
//---------------------------------------------------------------------------
// class UltraSparcOptInfo
//
// Purpose:
// Interface to machine-level optimization routines for the UltraSPARC.
//---------------------------------------------------------------------------
class UltraSparcOptInfo: public MachineOptInfo {
public:
UltraSparcOptInfo(const TargetMachine &T) : MachineOptInfo(T) {}
virtual bool IsUselessCopy (const MachineInstr* MI) const;
};
//---------------------------------------------------------------------------
// class UltraSparcMachine
//
@ -707,14 +728,16 @@ private:
UltraSparcRegInfo regInfo;
UltraSparcFrameInfo frameInfo;
UltraSparcCacheInfo cacheInfo;
UltraSparcOptInfo optInfo;
public:
UltraSparc();
virtual const MachineInstrInfo &getInstrInfo() const { return instrInfo; }
virtual const MachineSchedInfo &getSchedInfo() const { return schedInfo; }
virtual const MachineRegInfo &getRegInfo() const { return regInfo; }
virtual const MachineFrameInfo &getFrameInfo() const { return frameInfo; }
virtual const MachineCacheInfo &getCacheInfo() const { return cacheInfo; }
virtual const MachineOptInfo &getOptInfo() const { return optInfo; }
// getPrologEpilogCodeInserter - Inserts prolog/epilog code.
virtual Pass* getPrologEpilogInsertionPass();

View File

@ -108,7 +108,8 @@ UltraSparc::UltraSparc()
schedInfo(*this),
regInfo(*this),
frameInfo(*this),
cacheInfo(*this)
cacheInfo(*this),
optInfo(*this)
{
optSizeForSubWordData = 4;
minMemOpWordSize = 8;