summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorVikram S. Adve <vadve@cs.uiuc.edu>2001-07-28 04:09:37 +0000
committerVikram S. Adve <vadve@cs.uiuc.edu>2001-07-28 04:09:37 +0000
commitc42969175193f5dfd46b510f1ff9de58ab7528c8 (patch)
tree1ba00f2f4fbb52ab3b25fd0f883f75e1c557eecc /llvm/lib/CodeGen
parentbff682dfac237eeb245e4c674ae3150c4038cbc1 (diff)
downloadbcm5719-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/CodeGen')
-rw-r--r--llvm/lib/CodeGen/TargetMachine/TargetMachine.cpp76
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;
+}
+
//---------------------------------------------------------------------------
OpenPOWER on IntegriCloud