* Add a file header with some information

* Delete the DelaySlotInfo objects created by the SchedulingManager class.
  These leaked objects were accounting for 3/4 of the memory leaked by the
  backend, so this is a relatively major win.
* Reorganize SchedulingManager::getDelaySlotInfoForInstr so that it has
  better code locality (making it easier to read).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2197 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2002-04-09 05:45:58 +00:00
parent 918c4ecb0c
commit af50d00829
2 changed files with 50 additions and 70 deletions

View File

@ -1,14 +1,9 @@
// $Id$
//***************************************************************************
// File:
// InstrScheduling.cpp
//
// Purpose:
//
// History:
// 7/23/01 - Vikram Adve - Created
//**************************************************************************/
//===- InstrScheduling.cpp - Generic Instruction Scheduling support -------===//
//
// This file implements the llvm/CodeGen/InstrScheduling.h interface, along with
// generic support routines for instruction scheduling.
//
//===----------------------------------------------------------------------===//
#include "llvm/CodeGen/InstrScheduling.h"
#include "llvm/CodeGen/MachineInstr.h"
@ -364,10 +359,14 @@ private:
// indexed by branch node ptr
public:
/*ctor*/ SchedulingManager (const TargetMachine& _target,
const SchedGraph* graph,
SchedPriorities& schedPrio);
/*dtor*/ ~SchedulingManager () {}
SchedulingManager(const TargetMachine& _target, const SchedGraph* graph,
SchedPriorities& schedPrio);
~SchedulingManager() {
for (std::hash_map<const SchedGraphNode*,
DelaySlotInfo*>::iterator I = delaySlotInfoForBranches.begin(),
E = delaySlotInfoForBranches.end(); I != E; ++I)
delete I->second;
}
//----------------------------------------------------------------------
// Simplify access to the machine instruction info
@ -497,30 +496,21 @@ public:
inline DelaySlotInfo* getDelaySlotInfoForInstr(const SchedGraphNode* bn,
bool createIfMissing=false)
{
DelaySlotInfo* dinfo;
std::hash_map<const SchedGraphNode*, DelaySlotInfo* >::const_iterator
std::hash_map<const SchedGraphNode*, DelaySlotInfo*>::const_iterator
I = delaySlotInfoForBranches.find(bn);
if (I == delaySlotInfoForBranches.end())
{
if (createIfMissing)
{
dinfo = new DelaySlotInfo(bn,
getInstrInfo().getNumDelaySlots(bn->getOpCode()));
delaySlotInfoForBranches[bn] = dinfo;
}
else
dinfo = NULL;
}
else
dinfo = (*I).second;
return dinfo;
if (I != delaySlotInfoForBranches.end())
return I->second;
if (!createIfMissing) return 0;
DelaySlotInfo *dinfo =
new DelaySlotInfo(bn, getInstrInfo().getNumDelaySlots(bn->getOpCode()));
return delaySlotInfoForBranches[bn] = dinfo;
}
private:
/*ctor*/ SchedulingManager (); // Disable: DO NOT IMPLEMENT.
void updateEarliestStartTimes(const SchedGraphNode* node,
cycles_t schedTime);
SchedulingManager(); // DISABLED: DO NOT IMPLEMENT
void updateEarliestStartTimes(const SchedGraphNode* node, cycles_t schedTime);
};

View File

@ -1,14 +1,9 @@
// $Id$
//***************************************************************************
// File:
// InstrScheduling.cpp
//
// Purpose:
//
// History:
// 7/23/01 - Vikram Adve - Created
//**************************************************************************/
//===- InstrScheduling.cpp - Generic Instruction Scheduling support -------===//
//
// This file implements the llvm/CodeGen/InstrScheduling.h interface, along with
// generic support routines for instruction scheduling.
//
//===----------------------------------------------------------------------===//
#include "llvm/CodeGen/InstrScheduling.h"
#include "llvm/CodeGen/MachineInstr.h"
@ -364,10 +359,14 @@ private:
// indexed by branch node ptr
public:
/*ctor*/ SchedulingManager (const TargetMachine& _target,
const SchedGraph* graph,
SchedPriorities& schedPrio);
/*dtor*/ ~SchedulingManager () {}
SchedulingManager(const TargetMachine& _target, const SchedGraph* graph,
SchedPriorities& schedPrio);
~SchedulingManager() {
for (std::hash_map<const SchedGraphNode*,
DelaySlotInfo*>::iterator I = delaySlotInfoForBranches.begin(),
E = delaySlotInfoForBranches.end(); I != E; ++I)
delete I->second;
}
//----------------------------------------------------------------------
// Simplify access to the machine instruction info
@ -497,30 +496,21 @@ public:
inline DelaySlotInfo* getDelaySlotInfoForInstr(const SchedGraphNode* bn,
bool createIfMissing=false)
{
DelaySlotInfo* dinfo;
std::hash_map<const SchedGraphNode*, DelaySlotInfo* >::const_iterator
std::hash_map<const SchedGraphNode*, DelaySlotInfo*>::const_iterator
I = delaySlotInfoForBranches.find(bn);
if (I == delaySlotInfoForBranches.end())
{
if (createIfMissing)
{
dinfo = new DelaySlotInfo(bn,
getInstrInfo().getNumDelaySlots(bn->getOpCode()));
delaySlotInfoForBranches[bn] = dinfo;
}
else
dinfo = NULL;
}
else
dinfo = (*I).second;
return dinfo;
if (I != delaySlotInfoForBranches.end())
return I->second;
if (!createIfMissing) return 0;
DelaySlotInfo *dinfo =
new DelaySlotInfo(bn, getInstrInfo().getNumDelaySlots(bn->getOpCode()));
return delaySlotInfoForBranches[bn] = dinfo;
}
private:
/*ctor*/ SchedulingManager (); // Disable: DO NOT IMPLEMENT.
void updateEarliestStartTimes(const SchedGraphNode* node,
cycles_t schedTime);
SchedulingManager(); // DISABLED: DO NOT IMPLEMENT
void updateEarliestStartTimes(const SchedGraphNode* node, cycles_t schedTime);
};