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:
Evan Cheng 2006-11-15 20:48:17 +00:00
parent 0851b4f3ed
commit 9a00279988

View File

@ -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
// //