mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-12 03:32:10 +00:00
Add copyKillDeadInfo to copy kill / dead info; other minor updates.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31758 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0851b4f3ed
commit
9a00279988
@ -206,19 +206,19 @@ public:
|
|||||||
return IsDead;
|
return IsDead;
|
||||||
}
|
}
|
||||||
void setIsKill() {
|
void setIsKill() {
|
||||||
assert(isRegister() && "Wrong MachineOperand accessor");
|
assert(isRegister() && !IsDef && "Wrong MachineOperand accessor");
|
||||||
IsKill = true;
|
IsKill = true;
|
||||||
}
|
}
|
||||||
void setIsDead() {
|
void setIsDead() {
|
||||||
assert(isRegister() && "Wrong MachineOperand accessor");
|
assert(isRegister() && IsDef && "Wrong MachineOperand accessor");
|
||||||
IsDead = true;
|
IsDead = true;
|
||||||
}
|
}
|
||||||
void unsetIsKill() {
|
void unsetIsKill() {
|
||||||
assert(isRegister() && "Wrong MachineOperand accessor");
|
assert(isRegister() && !IsDef && "Wrong MachineOperand accessor");
|
||||||
IsKill = false;
|
IsKill = false;
|
||||||
}
|
}
|
||||||
void unsetIsDead() {
|
void unsetIsDead() {
|
||||||
assert(isRegister() && "Wrong MachineOperand accessor");
|
assert(isRegister() && IsDef && "Wrong MachineOperand accessor");
|
||||||
IsDead = false;
|
IsDead = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// isIdenticalTo - Return true if this operand is identical to the specified
|
/// isIdenticalTo - Return true if this operand is identical to the specified
|
||||||
/// operand.
|
/// operand. Note: This method ignores isKill and isDead properties.
|
||||||
bool isIdenticalTo(const MachineOperand &Other) const;
|
bool isIdenticalTo(const MachineOperand &Other) const;
|
||||||
|
|
||||||
/// ChangeToImmediate - Replace this operand with a new immediate operand of
|
/// ChangeToImmediate - Replace this operand with a new immediate operand of
|
||||||
@ -295,13 +295,13 @@ public:
|
|||||||
///
|
///
|
||||||
class MachineInstr {
|
class MachineInstr {
|
||||||
short Opcode; // the opcode
|
short Opcode; // the opcode
|
||||||
|
short NumImplicitOps; // Number of implicit operands (which
|
||||||
|
// are determined at construction time).
|
||||||
|
|
||||||
std::vector<MachineOperand> Operands; // the operands
|
std::vector<MachineOperand> Operands; // the operands
|
||||||
MachineInstr* prev, *next; // links for our intrusive list
|
MachineInstr* prev, *next; // links for our intrusive list
|
||||||
MachineBasicBlock* parent; // pointer to the owning basic block
|
MachineBasicBlock* parent; // pointer to the owning basic block
|
||||||
|
|
||||||
unsigned NumImplicitOps; // Number of implicit operands (which
|
|
||||||
// are determined at construction time).
|
|
||||||
|
|
||||||
// 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 OperandsComplete() const;
|
bool OperandsComplete() const;
|
||||||
|
|
||||||
@ -376,6 +376,26 @@ public:
|
|||||||
delete removeFromParent();
|
delete removeFromParent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// copyKillDeadInfo - Copies kill / dead operand properties from MI.
|
||||||
|
///
|
||||||
|
void copyKillDeadInfo(const MachineInstr *MI) {
|
||||||
|
for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
|
||||||
|
const MachineOperand &MO = MI->getOperand(i);
|
||||||
|
if (MO.isReg() && (MO.isKill() || MO.isDead())) {
|
||||||
|
for (unsigned j = 0, ee = getNumOperands(); j != ee; ++j) {
|
||||||
|
MachineOperand &MOp = getOperand(j);
|
||||||
|
if (MOp.isIdenticalTo(MO)) {
|
||||||
|
if (MO.isKill())
|
||||||
|
MOp.setIsKill();
|
||||||
|
else
|
||||||
|
MOp.setIsDead();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Debugging support
|
// Debugging support
|
||||||
//
|
//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user