mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-09 11:25:55 +00:00
Limit the number of memory operands in MachineInstr to 2^16 and store the number in padding.
Saves one machine word on MachineInstr (88->80 bytes on x86_64, 48->44 on i386). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152930 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -74,9 +74,10 @@ private:
|
|||||||
// anything other than to convey comment
|
// anything other than to convey comment
|
||||||
// information to AsmPrinter.
|
// information to AsmPrinter.
|
||||||
|
|
||||||
|
uint16_t NumMemRefs; // information on memory references
|
||||||
|
mmo_iterator MemRefs;
|
||||||
|
|
||||||
std::vector<MachineOperand> Operands; // the operands
|
std::vector<MachineOperand> Operands; // the operands
|
||||||
mmo_iterator MemRefs; // information on memory references
|
|
||||||
mmo_iterator MemRefsEnd;
|
|
||||||
MachineBasicBlock *Parent; // Pointer to the owning basic block.
|
MachineBasicBlock *Parent; // Pointer to the owning basic block.
|
||||||
DebugLoc debugLoc; // Source line information.
|
DebugLoc debugLoc; // Source line information.
|
||||||
|
|
||||||
@@ -284,13 +285,13 @@ public:
|
|||||||
|
|
||||||
/// Access to memory operands of the instruction
|
/// Access to memory operands of the instruction
|
||||||
mmo_iterator memoperands_begin() const { return MemRefs; }
|
mmo_iterator memoperands_begin() const { return MemRefs; }
|
||||||
mmo_iterator memoperands_end() const { return MemRefsEnd; }
|
mmo_iterator memoperands_end() const { return MemRefs + NumMemRefs; }
|
||||||
bool memoperands_empty() const { return MemRefsEnd == MemRefs; }
|
bool memoperands_empty() const { return NumMemRefs == 0; }
|
||||||
|
|
||||||
/// hasOneMemOperand - Return true if this instruction has exactly one
|
/// hasOneMemOperand - Return true if this instruction has exactly one
|
||||||
/// MachineMemOperand.
|
/// MachineMemOperand.
|
||||||
bool hasOneMemOperand() const {
|
bool hasOneMemOperand() const {
|
||||||
return MemRefsEnd - MemRefs == 1;
|
return NumMemRefs == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// API for querying MachineInstr properties. They are the same as MCInstrDesc
|
/// API for querying MachineInstr properties. They are the same as MCInstrDesc
|
||||||
@@ -888,7 +889,7 @@ public:
|
|||||||
/// list. This does not transfer ownership.
|
/// list. This does not transfer ownership.
|
||||||
void setMemRefs(mmo_iterator NewMemRefs, mmo_iterator NewMemRefsEnd) {
|
void setMemRefs(mmo_iterator NewMemRefs, mmo_iterator NewMemRefsEnd) {
|
||||||
MemRefs = NewMemRefs;
|
MemRefs = NewMemRefs;
|
||||||
MemRefsEnd = NewMemRefsEnd;
|
NumMemRefs = NewMemRefsEnd - NewMemRefs;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@@ -482,7 +482,7 @@ raw_ostream &llvm::operator<<(raw_ostream &OS, const MachineMemOperand &MMO) {
|
|||||||
/// MCID NULL and no operands.
|
/// MCID NULL and no operands.
|
||||||
MachineInstr::MachineInstr()
|
MachineInstr::MachineInstr()
|
||||||
: MCID(0), Flags(0), AsmPrinterFlags(0),
|
: MCID(0), Flags(0), AsmPrinterFlags(0),
|
||||||
MemRefs(0), MemRefsEnd(0),
|
NumMemRefs(0), MemRefs(0),
|
||||||
Parent(0) {
|
Parent(0) {
|
||||||
// Make sure that we get added to a machine basicblock
|
// Make sure that we get added to a machine basicblock
|
||||||
LeakDetector::addGarbageObject(this);
|
LeakDetector::addGarbageObject(this);
|
||||||
@@ -502,7 +502,7 @@ void MachineInstr::addImplicitDefUseOperands() {
|
|||||||
/// the MCInstrDesc.
|
/// the MCInstrDesc.
|
||||||
MachineInstr::MachineInstr(const MCInstrDesc &tid, bool NoImp)
|
MachineInstr::MachineInstr(const MCInstrDesc &tid, bool NoImp)
|
||||||
: MCID(&tid), Flags(0), AsmPrinterFlags(0),
|
: MCID(&tid), Flags(0), AsmPrinterFlags(0),
|
||||||
MemRefs(0), MemRefsEnd(0), Parent(0) {
|
NumMemRefs(0), MemRefs(0), Parent(0) {
|
||||||
unsigned NumImplicitOps = 0;
|
unsigned NumImplicitOps = 0;
|
||||||
if (!NoImp)
|
if (!NoImp)
|
||||||
NumImplicitOps = MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
|
NumImplicitOps = MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
|
||||||
@@ -517,7 +517,7 @@ MachineInstr::MachineInstr(const MCInstrDesc &tid, bool NoImp)
|
|||||||
MachineInstr::MachineInstr(const MCInstrDesc &tid, const DebugLoc dl,
|
MachineInstr::MachineInstr(const MCInstrDesc &tid, const DebugLoc dl,
|
||||||
bool NoImp)
|
bool NoImp)
|
||||||
: MCID(&tid), Flags(0), AsmPrinterFlags(0),
|
: MCID(&tid), Flags(0), AsmPrinterFlags(0),
|
||||||
MemRefs(0), MemRefsEnd(0), Parent(0), debugLoc(dl) {
|
NumMemRefs(0), MemRefs(0), Parent(0), debugLoc(dl) {
|
||||||
unsigned NumImplicitOps = 0;
|
unsigned NumImplicitOps = 0;
|
||||||
if (!NoImp)
|
if (!NoImp)
|
||||||
NumImplicitOps = MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
|
NumImplicitOps = MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
|
||||||
@@ -533,7 +533,7 @@ MachineInstr::MachineInstr(const MCInstrDesc &tid, const DebugLoc dl,
|
|||||||
/// basic block.
|
/// basic block.
|
||||||
MachineInstr::MachineInstr(MachineBasicBlock *MBB, const MCInstrDesc &tid)
|
MachineInstr::MachineInstr(MachineBasicBlock *MBB, const MCInstrDesc &tid)
|
||||||
: MCID(&tid), Flags(0), AsmPrinterFlags(0),
|
: MCID(&tid), Flags(0), AsmPrinterFlags(0),
|
||||||
MemRefs(0), MemRefsEnd(0), Parent(0) {
|
NumMemRefs(0), MemRefs(0), Parent(0) {
|
||||||
assert(MBB && "Cannot use inserting ctor with null basic block!");
|
assert(MBB && "Cannot use inserting ctor with null basic block!");
|
||||||
unsigned NumImplicitOps =
|
unsigned NumImplicitOps =
|
||||||
MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
|
MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
|
||||||
@@ -549,7 +549,7 @@ MachineInstr::MachineInstr(MachineBasicBlock *MBB, const MCInstrDesc &tid)
|
|||||||
MachineInstr::MachineInstr(MachineBasicBlock *MBB, const DebugLoc dl,
|
MachineInstr::MachineInstr(MachineBasicBlock *MBB, const DebugLoc dl,
|
||||||
const MCInstrDesc &tid)
|
const MCInstrDesc &tid)
|
||||||
: MCID(&tid), Flags(0), AsmPrinterFlags(0),
|
: MCID(&tid), Flags(0), AsmPrinterFlags(0),
|
||||||
MemRefs(0), MemRefsEnd(0), Parent(0), debugLoc(dl) {
|
NumMemRefs(0), MemRefs(0), Parent(0), debugLoc(dl) {
|
||||||
assert(MBB && "Cannot use inserting ctor with null basic block!");
|
assert(MBB && "Cannot use inserting ctor with null basic block!");
|
||||||
unsigned NumImplicitOps =
|
unsigned NumImplicitOps =
|
||||||
MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
|
MCID->getNumImplicitDefs() + MCID->getNumImplicitUses();
|
||||||
@@ -564,7 +564,7 @@ MachineInstr::MachineInstr(MachineBasicBlock *MBB, const DebugLoc dl,
|
|||||||
///
|
///
|
||||||
MachineInstr::MachineInstr(MachineFunction &MF, const MachineInstr &MI)
|
MachineInstr::MachineInstr(MachineFunction &MF, const MachineInstr &MI)
|
||||||
: MCID(&MI.getDesc()), Flags(0), AsmPrinterFlags(0),
|
: MCID(&MI.getDesc()), Flags(0), AsmPrinterFlags(0),
|
||||||
MemRefs(MI.MemRefs), MemRefsEnd(MI.MemRefsEnd),
|
NumMemRefs(MI.NumMemRefs), MemRefs(MI.MemRefs),
|
||||||
Parent(0), debugLoc(MI.getDebugLoc()) {
|
Parent(0), debugLoc(MI.getDebugLoc()) {
|
||||||
Operands.reserve(MI.getNumOperands());
|
Operands.reserve(MI.getNumOperands());
|
||||||
|
|
||||||
@@ -739,17 +739,16 @@ void MachineInstr::RemoveOperand(unsigned OpNo) {
|
|||||||
void MachineInstr::addMemOperand(MachineFunction &MF,
|
void MachineInstr::addMemOperand(MachineFunction &MF,
|
||||||
MachineMemOperand *MO) {
|
MachineMemOperand *MO) {
|
||||||
mmo_iterator OldMemRefs = MemRefs;
|
mmo_iterator OldMemRefs = MemRefs;
|
||||||
mmo_iterator OldMemRefsEnd = MemRefsEnd;
|
uint16_t OldNumMemRefs = NumMemRefs;
|
||||||
|
|
||||||
size_t NewNum = (MemRefsEnd - MemRefs) + 1;
|
uint16_t NewNum = NumMemRefs + 1;
|
||||||
mmo_iterator NewMemRefs = MF.allocateMemRefsArray(NewNum);
|
mmo_iterator NewMemRefs = MF.allocateMemRefsArray(NewNum);
|
||||||
mmo_iterator NewMemRefsEnd = NewMemRefs + NewNum;
|
|
||||||
|
|
||||||
std::copy(OldMemRefs, OldMemRefsEnd, NewMemRefs);
|
std::copy(OldMemRefs, OldMemRefs + OldNumMemRefs, NewMemRefs);
|
||||||
NewMemRefs[NewNum - 1] = MO;
|
NewMemRefs[NewNum - 1] = MO;
|
||||||
|
|
||||||
MemRefs = NewMemRefs;
|
MemRefs = NewMemRefs;
|
||||||
MemRefsEnd = NewMemRefsEnd;
|
NumMemRefs = NewNum;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
Reference in New Issue
Block a user