1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00

* Minor cleanups

* Reduce number of #includes, sometimes drastically (LiveRangeInfo.h lost _7_)
* Move instrIsFeasible() from InstrScheduling.h to SchedPriorities.h
* Delete blank lines at end of files

llvm-svn: 1672
This commit is contained in:
Chris Lattner 2002-02-04 05:52:08 +00:00
parent 8c2f0a45a6
commit 009faad8e4
10 changed files with 65 additions and 126 deletions

View File

@ -1,23 +1,15 @@
// $Id$ -*- C++ -*- //===-- InstrScheduling.h - Interface To Instruction Scheduling --*- C++ -*-==//
//***************************************************************************
// File:
// InstrScheduling.h
// //
// Purpose: // This file defines a minimal, but complete, interface to instruction
// scheduling.
// //
// History: //===----------------------------------------------------------------------===//
// 7/23/01 - Vikram Adve - Created
//***************************************************************************
#ifndef LLVM_CODEGEN_INSTR_SCHEDULING_H #ifndef LLVM_CODEGEN_INSTR_SCHEDULING_H
#define LLVM_CODEGEN_INSTR_SCHEDULING_H #define LLVM_CODEGEN_INSTR_SCHEDULING_H
#include "llvm/CodeGen/MachineInstr.h"
class Method; class Method;
class SchedulingManager;
class TargetMachine; class TargetMachine;
class MachineSchedInfo;
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Function: ScheduleInstructionsWithSSA // Function: ScheduleInstructionsWithSSA
@ -42,18 +34,6 @@ bool ScheduleInstructionsWithSSA(Method *M, const TargetMachine &Target);
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Not implemented yet. // Not implemented yet.
bool ScheduleInstructions (Method* method, bool ScheduleInstructions(Method *M, const TargetMachine &Target);
const TargetMachine &Target);
//---------------------------------------------------------------------------
// Function: instrIsFeasible
//
// Purpose:
// Used by the priority analysis to filter out instructions
// that are not feasible to issue in the current cycle.
// Should only be used during schedule construction..
//---------------------------------------------------------------------------
bool instrIsFeasible (const SchedulingManager& S,
MachineOpCode opCode);
#endif #endif

View File

@ -16,12 +16,7 @@
#include "llvm/Instruction.h" #include "llvm/Instruction.h"
#include "llvm/CodeGen/MachineInstr.h" #include "llvm/CodeGen/MachineInstr.h"
class Method;
class InstrForest;
class MachineInstr;
class InstructionNode; class InstructionNode;
class TmpInstruction;
class Constant;
class TargetMachine; class TargetMachine;
@ -104,8 +99,8 @@ void Set3OperandsFromInstr (MachineInstr* minstr,
// //
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
MachineOperand::MachineOperandType MachineOperand::MachineOperandType ChooseRegOrImmed(
ChooseRegOrImmed (Value* val, Value* val,
MachineOpCode opCode, MachineOpCode opCode,
const TargetMachine& targetMachine, const TargetMachine& targetMachine,
bool canUseImmed, bool canUseImmed,

View File

@ -1,11 +1,10 @@
#include "Support/CommandLine.h"
#ifndef REG_ALLOC_COMMON_H #ifndef REG_ALLOC_COMMON_H
#define REG_ALLOC_COMMON_H #define REG_ALLOC_COMMON_H
// THIS IS NOW SPECIFIED VIA A COMMANDLINE ARGUMENT TO LLC #include "Support/CommandLine.h"
//
// set DEBUG_RA for printing out debug messages // set DEBUG_RA for printing out debug messages
// if DEBUG_RA is 1 normal output messages // if DEBUG_RA is 1 normal output messages
// if DEBUG_RA is 2 extensive debug info for each instr // if DEBUG_RA is 2 extensive debug info for each instr

View File

@ -10,12 +10,12 @@
#include "llvm/CodeGen/IGNode.h" #include "llvm/CodeGen/IGNode.h"
#include "llvm/CodeGen/InterferenceGraph.h" #include "llvm/CodeGen/InterferenceGraph.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/MachineRegInfo.h" #include "llvm/Target/MachineRegInfo.h"
#include <stack> #include <stack>
#include <iostream> #include <iostream>
class MachineRegClassInfo;
typedef std::vector<unsigned int> ReservedColorListType; typedef std::vector<unsigned> ReservedColorListType;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -35,14 +35,9 @@ typedef std::vector<unsigned int> ReservedColorListType;
// methods are called thru a register class. // methods are called thru a register class.
// //
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
class RegClass class RegClass {
{
private:
const Method *const Meth; // Method we are working on const Method *const Meth; // Method we are working on
const MachineRegClassInfo *const MRC; // corresponding MRC const MachineRegClassInfo *const MRC; // corresponding MRC
const unsigned RegClassID; // my int ID const unsigned RegClassID; // my int ID
InterferenceGraph IG; // Interference graph - constructed by InterferenceGraph IG; // Interference graph - constructed by

View File

@ -28,6 +28,8 @@
#include "llvm/CodeGen/RegAllocCommon.h" #include "llvm/CodeGen/RegAllocCommon.h"
#include "llvm/CodeGen/LiveRange.h" #include "llvm/CodeGen/LiveRange.h"
class LiveRange;
class RegClass;
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// Class IGNode // Class IGNode
@ -35,8 +37,7 @@
// Represents a node in an interference graph. // Represents a node in an interference graph.
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
class IGNode class IGNode {
{
const int Index; // index within IGNodeList const int Index; // index within IGNodeList
bool OnStack; // this has been pushed on to stack for coloring bool OnStack; // this has been pushed on to stack for coloring
@ -51,9 +52,7 @@ class IGNode
// After that, never incremented/set again nor used. // After that, never incremented/set again nor used.
LiveRange *const ParentLR; // parent LR (cannot be a const) LiveRange *const ParentLR; // parent LR (cannot be a const)
public:
public:
// constructor // constructor
// //
@ -117,8 +116,9 @@ class IGNode
inline void setRegClass(RegClass *const RC) inline void setRegClass(RegClass *const RC)
{ ParentLR->setRegClass(RC); } { ParentLR->setRegClass(RC); }
inline RegClass *const getRegClass() const inline RegClass *const getRegClass() const {
{ return ParentLR->getRegClass(); } return ParentLR->getRegClass();
}
inline bool hasColor() const inline bool hasColor() const
{ return ParentLR->hasColor(); } { return ParentLR->hasColor(); }

View File

@ -26,13 +26,9 @@ class IGNode;
// of Values. // of Values.
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
class LiveRange : public ValueSet class LiveRange : public ValueSet {
{
private:
RegClass *MyRegClass; // register classs (e.g., int, FP) for this LR RegClass *MyRegClass; // register classs (e.g., int, FP) for this LR
bool doesSpanAcrossCalls; bool doesSpanAcrossCalls;
// //
// Does this live range span across calls? // Does this live range span across calls?
@ -168,7 +164,7 @@ class LiveRange : public ValueSet
} }
inline Type::PrimitiveID getTypeID() const { inline Type::PrimitiveID getTypeID() const {
return this->getType()->getPrimitiveID(); return getType()->getPrimitiveID();
} }
inline void setSuggestedColor(int Col) { inline void setSuggestedColor(int Col) {
@ -176,8 +172,10 @@ class LiveRange : public ValueSet
if(SuggestedColor == -1 ) if(SuggestedColor == -1 )
SuggestedColor = Col; SuggestedColor = Col;
#if 0
else if (DEBUG_RA) else if (DEBUG_RA)
std::cerr << "Already has a suggested color " << Col << "\n"; std::cerr << "Already has a suggested color " << Col << "\n";
#endif
} }
inline unsigned getSuggestedColor() const { inline unsigned getSuggestedColor() const {
@ -206,12 +204,6 @@ class LiveRange : public ValueSet
inline unsigned getSpillCost() const { inline unsigned getSpillCost() const {
return SpillCost; return SpillCost;
} }
}; };
#endif #endif

View File

@ -1,44 +1,39 @@
/* Title: LiveRangeInfo.h -*- C++ -*- //===-- LiveRangeInfo.h - Track all LiveRanges for a Method ------*- C++ -*-==//
Author: Ruchira Sasanka //
Date: Jun 30, 01 // This file contains the class LiveRangeInfo which constructs and keeps
Purpose: // the LiveRangMap which contains all the live ranges used in a method.
//
This file contains the class LiveRangeInfo which constructs and keeps // Assumptions:
the LiveRangMap which contains all the live ranges used in a method. //
// All variables (llvm Values) are defined before they are used. However, a
Assumptions: // constant may not be defined in the machine instruction stream if it can be
// used as an immediate value within a machine instruction. However, register
All variables (llvm Values) are defined before they are used. However, a // allocation does not have to worry about immediate constants since they
constant may not be defined in the machine instruction stream if it can be // do not require registers.
used as an immediate value within a machine instruction. However, register //
allocation does not have to worry about immediate constants since they // Since an llvm Value has a list of uses associated, it is sufficient to
do not require registers. // record only the defs in a Live Range.
//
Since an llvm Value has a list of uses associated, it is sufficient to //===----------------------------------------------------------------------===//
record only the defs in a Live Range.
*/
#ifndef LIVE_RANGE_INFO_H #ifndef LIVE_RANGE_INFO_H
#define LIVE_RANGE_INFO_H #define LIVE_RANGE_INFO_H
#include "llvm/Type.h" #include "Support/HashExtras.h"
#include "llvm/Method.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/Analysis/LiveVar/LiveVarSet.h"
#include "llvm/CodeGen/IGNode.h"
#include "llvm/CodeGen/LiveRange.h"
#include "llvm/CodeGen/RegClass.h"
class LiveRange;
class MachineInstr;
class LiveVarSet;
class RegClass;
class MachineRegInfo;
class TargetMachine;
class Value;
class Method;
class Instruction;
typedef std::hash_map<const Value*, LiveRange*> LiveRangeMapType; typedef std::hash_map<const Value*, LiveRange*> LiveRangeMapType;
typedef std::vector<const MachineInstr*> CallRetInstrListType; typedef std::vector<const MachineInstr*> CallRetInstrListType;
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// Class LiveRangeInfo // Class LiveRangeInfo
// //
@ -46,13 +41,8 @@ typedef std::vector<const MachineInstr*> CallRetInstrListType;
// ranges used in a method. Also contain methods to coalesce live ranges. // ranges used in a method. Also contain methods to coalesce live ranges.
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
class LiveRangeInfo class LiveRangeInfo {
{
private:
const Method *const Meth; // Method for which live range info is held const Method *const Meth; // Method for which live range info is held
LiveRangeMapType LiveRangeMap; // A map from Value * to LiveRange * to LiveRangeMapType LiveRangeMap; // A map from Value * to LiveRange * to
// record all live ranges in a method // record all live ranges in a method
// created by constructLiveRanges // created by constructLiveRanges
@ -96,9 +86,9 @@ public:
// in machine specific code) to the common live range map // in machine specific code) to the common live range map
// //
inline void addLRToMap(const Value *Val, LiveRange *LR) { inline void addLRToMap(const Value *Val, LiveRange *LR) {
assert( Val && LR && "Val/LR is NULL!\n"); assert(Val && LR && "Val/LR is NULL!\n");
assert( (! LiveRangeMap[ Val ]) && "LR already set in map"); assert((!LiveRangeMap[Val]) && "LR already set in map");
LiveRangeMap[ Val ] = LR; LiveRangeMap[Val] = LR;
} }
// return the common live range map for this method // return the common live range map for this method
@ -109,7 +99,7 @@ public:
// Method sed to get the corresponding live range of a Value // Method sed to get the corresponding live range of a Value
// //
inline LiveRange *getLiveRangeForValue( const Value *const Val) inline LiveRange *getLiveRangeForValue( const Value *const Val)
{ return LiveRangeMap[ Val ]; } { return LiveRangeMap[Val]; }
// Method used to get the Call and Return instruction list // Method used to get the Call and Return instruction list
// //
@ -125,10 +115,6 @@ public:
// debugging method to print the live ranges // debugging method to print the live ranges
// //
void printLiveRanges(); void printLiveRanges();
}; };
#endif #endif

View File

@ -25,21 +25,19 @@
PhyRegAlloc PRA(*MethodI, target, &LVI); // allocate regs PhyRegAlloc PRA(*MethodI, target, &LVI); // allocate regs
PRA.allocateRegisters(); PRA.allocateRegisters();
*/ */
#ifndef PHY_REG_ALLOC_H #ifndef PHY_REG_ALLOC_H
#define PHY_REG_ALLOC_H #define PHY_REG_ALLOC_H
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/RegClass.h" #include "llvm/CodeGen/RegClass.h"
#include "llvm/CodeGen/LiveRangeInfo.h" #include "llvm/CodeGen/LiveRangeInfo.h"
#include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
#include "llvm/Analysis/LoopDepth.h" #include "llvm/Analysis/LoopDepth.h"
#include <deque> #include <deque>
class MachineCodeForMethod; class MachineCodeForMethod;
class MachineRegInfo;
class MethodLiveVarInfo;
class MachineInstr;
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
// Class AddedInstrns: // Class AddedInstrns:

View File

@ -1,11 +1,10 @@
#include "Support/CommandLine.h"
#ifndef REG_ALLOC_COMMON_H #ifndef REG_ALLOC_COMMON_H
#define REG_ALLOC_COMMON_H #define REG_ALLOC_COMMON_H
// THIS IS NOW SPECIFIED VIA A COMMANDLINE ARGUMENT TO LLC #include "Support/CommandLine.h"
//
// set DEBUG_RA for printing out debug messages // set DEBUG_RA for printing out debug messages
// if DEBUG_RA is 1 normal output messages // if DEBUG_RA is 1 normal output messages
// if DEBUG_RA is 2 extensive debug info for each instr // if DEBUG_RA is 2 extensive debug info for each instr

View File

@ -10,12 +10,12 @@
#include "llvm/CodeGen/IGNode.h" #include "llvm/CodeGen/IGNode.h"
#include "llvm/CodeGen/InterferenceGraph.h" #include "llvm/CodeGen/InterferenceGraph.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/MachineRegInfo.h" #include "llvm/Target/MachineRegInfo.h"
#include <stack> #include <stack>
#include <iostream> #include <iostream>
class MachineRegClassInfo;
typedef std::vector<unsigned int> ReservedColorListType; typedef std::vector<unsigned> ReservedColorListType;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@ -35,14 +35,9 @@ typedef std::vector<unsigned int> ReservedColorListType;
// methods are called thru a register class. // methods are called thru a register class.
// //
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
class RegClass class RegClass {
{
private:
const Method *const Meth; // Method we are working on const Method *const Meth; // Method we are working on
const MachineRegClassInfo *const MRC; // corresponding MRC const MachineRegClassInfo *const MRC; // corresponding MRC
const unsigned RegClassID; // my int ID const unsigned RegClassID; // my int ID
InterferenceGraph IG; // Interference graph - constructed by InterferenceGraph IG; // Interference graph - constructed by