mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Add LeakDetection to MachineInstr.
Move out of line member functions of MachineBasicBlock to MachineBasicBlock.cpp. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11497 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
19831ec853
commit
aad5c05051
@ -24,8 +24,6 @@ namespace llvm {
|
|||||||
template <>
|
template <>
|
||||||
class ilist_traits<MachineInstr>
|
class ilist_traits<MachineInstr>
|
||||||
{
|
{
|
||||||
typedef ilist_traits<MachineInstr> self;
|
|
||||||
|
|
||||||
// this is only set by the MachineBasicBlock owning the ilist
|
// this is only set by the MachineBasicBlock owning the ilist
|
||||||
friend class MachineBasicBlock;
|
friend class MachineBasicBlock;
|
||||||
MachineBasicBlock* parent;
|
MachineBasicBlock* parent;
|
||||||
@ -45,25 +43,13 @@ public:
|
|||||||
static void setPrev(MachineInstr* N, MachineInstr* prev) { N->prev = prev; }
|
static void setPrev(MachineInstr* N, MachineInstr* prev) { N->prev = prev; }
|
||||||
static void setNext(MachineInstr* N, MachineInstr* next) { N->next = next; }
|
static void setNext(MachineInstr* N, MachineInstr* next) { N->next = next; }
|
||||||
|
|
||||||
static MachineInstr* createNode() { return new MachineInstr(0, 0); }
|
static MachineInstr* createNode();
|
||||||
|
void addNodeToList(MachineInstr* N);
|
||||||
void addNodeToList(MachineInstr* N) {
|
void removeNodeFromList(MachineInstr* N);
|
||||||
assert(N->parent == 0 && "machine instruction already in a basic block");
|
void transferNodesFromList(
|
||||||
N->parent = parent;
|
iplist<MachineInstr, ilist_traits<MachineInstr> >& toList,
|
||||||
}
|
ilist_iterator<MachineInstr> first,
|
||||||
|
ilist_iterator<MachineInstr> last);
|
||||||
void removeNodeFromList(MachineInstr* N) {
|
|
||||||
assert(N->parent != 0 && "machine instruction not in a basic block");
|
|
||||||
N->parent = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void transferNodesFromList(iplist<MachineInstr, self>& toList,
|
|
||||||
ilist_iterator<MachineInstr> first,
|
|
||||||
ilist_iterator<MachineInstr> last) {
|
|
||||||
if (parent != toList.parent)
|
|
||||||
for (; first != last; ++first)
|
|
||||||
first->parent = toList.parent;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class BasicBlock;
|
class BasicBlock;
|
||||||
|
@ -345,7 +345,6 @@ private:
|
|||||||
// Intrusive list support
|
// Intrusive list support
|
||||||
//
|
//
|
||||||
friend class ilist_traits<MachineInstr>;
|
friend class ilist_traits<MachineInstr>;
|
||||||
MachineInstr() : Opcode(0), numImplicitRefs(0) { /* used only by ilist */ }
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MachineInstr(short Opcode, unsigned numOperands);
|
MachineInstr(short Opcode, unsigned numOperands);
|
||||||
@ -363,6 +362,8 @@ public:
|
|||||||
///
|
///
|
||||||
MachineInstr(MachineBasicBlock *MBB, short Opcode, unsigned numOps);
|
MachineInstr(MachineBasicBlock *MBB, short Opcode, unsigned numOps);
|
||||||
|
|
||||||
|
~MachineInstr();
|
||||||
|
|
||||||
const MachineBasicBlock* getParent() const { return parent; }
|
const MachineBasicBlock* getParent() const { return parent; }
|
||||||
MachineBasicBlock* getParent() { return parent; }
|
MachineBasicBlock* getParent() { return parent; }
|
||||||
|
|
||||||
|
68
lib/CodeGen/MachineBasicBlock.cpp
Normal file
68
lib/CodeGen/MachineBasicBlock.cpp
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
//===-- llvm/CodeGen/MachineBasicBlock.cpp ----------------------*- C++ -*-===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file was developed by the LLVM research group and is distributed under
|
||||||
|
// the University of Illinois Open Source License. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// Collect the sequence of machine instructions for a basic block.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#include "llvm/CodeGen/MachineBasicBlock.h"
|
||||||
|
|
||||||
|
#include "llvm/BasicBlock.h"
|
||||||
|
#include "llvm/CodeGen/MachineFunction.h"
|
||||||
|
#include "llvm/CodeGen/MachineInstr.h"
|
||||||
|
#include "Support/LeakDetector.h"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace llvm;
|
||||||
|
|
||||||
|
MachineInstr* ilist_traits<MachineInstr>::createNode()
|
||||||
|
{
|
||||||
|
MachineInstr* dummy = new MachineInstr(0, 0);
|
||||||
|
LeakDetector::removeGarbageObject(dummy);
|
||||||
|
return dummy;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ilist_traits<MachineInstr>::addNodeToList(MachineInstr* N)
|
||||||
|
{
|
||||||
|
assert(N->parent == 0 && "machine instruction already in a basic block");
|
||||||
|
N->parent = parent;
|
||||||
|
LeakDetector::removeGarbageObject(N);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ilist_traits<MachineInstr>::removeNodeFromList(MachineInstr* N)
|
||||||
|
{
|
||||||
|
assert(N->parent != 0 && "machine instruction not in a basic block");
|
||||||
|
N->parent = 0;
|
||||||
|
LeakDetector::addGarbageObject(N);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ilist_traits<MachineInstr>::transferNodesFromList(
|
||||||
|
iplist<MachineInstr, ilist_traits<MachineInstr> >& toList,
|
||||||
|
ilist_iterator<MachineInstr> first,
|
||||||
|
ilist_iterator<MachineInstr> last)
|
||||||
|
{
|
||||||
|
if (parent != toList.parent)
|
||||||
|
for (; first != last; ++first)
|
||||||
|
first->parent = toList.parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MachineBasicBlock::dump() const
|
||||||
|
{
|
||||||
|
print(std::cerr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MachineBasicBlock::print(std::ostream &OS) const
|
||||||
|
{
|
||||||
|
const BasicBlock *LBB = getBasicBlock();
|
||||||
|
OS << "\n" << LBB->getName() << " (" << (const void*)LBB << "):\n";
|
||||||
|
for (const_iterator I = begin(); I != end(); ++I) {
|
||||||
|
OS << "\t";
|
||||||
|
I->print(OS, MachineFunction::get(LBB->getParent()).getTarget());
|
||||||
|
}
|
||||||
|
}
|
@ -120,17 +120,6 @@ void MachineFunction::print(std::ostream &OS) const {
|
|||||||
OS << "\nEnd function \"" << Fn->getName() << "\"\n\n";
|
OS << "\nEnd function \"" << Fn->getName() << "\"\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void MachineBasicBlock::dump() const { print(std::cerr); }
|
|
||||||
|
|
||||||
void MachineBasicBlock::print(std::ostream &OS) const {
|
|
||||||
const BasicBlock *LBB = getBasicBlock();
|
|
||||||
OS << "\n" << LBB->getName() << " (" << (const void*)LBB << "):\n";
|
|
||||||
for (const_iterator I = begin(); I != end(); ++I) {
|
|
||||||
OS << "\t";
|
|
||||||
I->print(OS, MachineFunction::get(LBB->getParent()).getTarget());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// The next two methods are used to construct and to retrieve
|
// The next two methods are used to construct and to retrieve
|
||||||
// the MachineCodeForFunction object for the given function.
|
// the MachineCodeForFunction object for the given function.
|
||||||
// construct() -- Allocates and initializes for a given function and target
|
// construct() -- Allocates and initializes for a given function and target
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "llvm/Target/TargetMachine.h"
|
#include "llvm/Target/TargetMachine.h"
|
||||||
#include "llvm/Target/TargetInstrInfo.h"
|
#include "llvm/Target/TargetInstrInfo.h"
|
||||||
#include "llvm/Target/MRegisterInfo.h"
|
#include "llvm/Target/MRegisterInfo.h"
|
||||||
|
#include "Support/LeakDetector.h"
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
|
|
||||||
@ -38,6 +39,8 @@ MachineInstr::MachineInstr(short opcode, unsigned numOperands)
|
|||||||
numImplicitRefs(0),
|
numImplicitRefs(0),
|
||||||
operands(numOperands, MachineOperand()),
|
operands(numOperands, MachineOperand()),
|
||||||
parent(0) {
|
parent(0) {
|
||||||
|
// Make sure that we get added to a machine basicblock
|
||||||
|
LeakDetector::addGarbageObject(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// MachineInstr ctor - This constructor only does a _reserve_ of the operands,
|
/// MachineInstr ctor - This constructor only does a _reserve_ of the operands,
|
||||||
@ -48,6 +51,8 @@ MachineInstr::MachineInstr(short opcode, unsigned numOperands)
|
|||||||
MachineInstr::MachineInstr(short opcode, unsigned numOperands, bool XX, bool YY)
|
MachineInstr::MachineInstr(short opcode, unsigned numOperands, bool XX, bool YY)
|
||||||
: Opcode(opcode), numImplicitRefs(0), parent(0) {
|
: Opcode(opcode), numImplicitRefs(0), parent(0) {
|
||||||
operands.reserve(numOperands);
|
operands.reserve(numOperands);
|
||||||
|
// Make sure that we get added to a machine basicblock
|
||||||
|
LeakDetector::addGarbageObject(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// MachineInstr ctor - Work exactly the same as the ctor above, except that the
|
/// MachineInstr ctor - Work exactly the same as the ctor above, except that the
|
||||||
@ -58,9 +63,16 @@ MachineInstr::MachineInstr(MachineBasicBlock *MBB, short opcode,
|
|||||||
: Opcode(opcode), numImplicitRefs(0), parent(0) {
|
: Opcode(opcode), numImplicitRefs(0), parent(0) {
|
||||||
assert(MBB && "Cannot use inserting ctor with null basic block!");
|
assert(MBB && "Cannot use inserting ctor with null basic block!");
|
||||||
operands.reserve(numOperands);
|
operands.reserve(numOperands);
|
||||||
|
// Make sure that we get added to a machine basicblock
|
||||||
|
LeakDetector::addGarbageObject(this);
|
||||||
MBB->push_back(this); // Add instruction to end of basic block!
|
MBB->push_back(this); // Add instruction to end of basic block!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MachineInstr::~MachineInstr()
|
||||||
|
{
|
||||||
|
LeakDetector::removeGarbageObject(this);
|
||||||
|
}
|
||||||
|
|
||||||
/// OperandComplete - Return true if it's illegal to add a new operand
|
/// OperandComplete - Return true if it's illegal to add a new operand
|
||||||
///
|
///
|
||||||
bool MachineInstr::OperandsComplete() const {
|
bool MachineInstr::OperandsComplete() const {
|
||||||
|
Loading…
Reference in New Issue
Block a user