mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
Add copyKillDeadInfo to copy kill / dead info; other minor updates.
llvm-svn: 31758
This commit is contained in:
parent
9bc55a6c38
commit
21b524d10f
@ -206,19 +206,19 @@ public:
|
||||
return IsDead;
|
||||
}
|
||||
void setIsKill() {
|
||||
assert(isRegister() && "Wrong MachineOperand accessor");
|
||||
assert(isRegister() && !IsDef && "Wrong MachineOperand accessor");
|
||||
IsKill = true;
|
||||
}
|
||||
void setIsDead() {
|
||||
assert(isRegister() && "Wrong MachineOperand accessor");
|
||||
assert(isRegister() && IsDef && "Wrong MachineOperand accessor");
|
||||
IsDead = true;
|
||||
}
|
||||
void unsetIsKill() {
|
||||
assert(isRegister() && "Wrong MachineOperand accessor");
|
||||
assert(isRegister() && !IsDef && "Wrong MachineOperand accessor");
|
||||
IsKill = false;
|
||||
}
|
||||
void unsetIsDead() {
|
||||
assert(isRegister() && "Wrong MachineOperand accessor");
|
||||
assert(isRegister() && IsDef && "Wrong MachineOperand accessor");
|
||||
IsDead = false;
|
||||
}
|
||||
|
||||
@ -261,7 +261,7 @@ public:
|
||||
}
|
||||
|
||||
/// 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;
|
||||
|
||||
/// ChangeToImmediate - Replace this operand with a new immediate operand of
|
||||
@ -295,13 +295,13 @@ public:
|
||||
///
|
||||
class MachineInstr {
|
||||
short Opcode; // the opcode
|
||||
short NumImplicitOps; // Number of implicit operands (which
|
||||
// are determined at construction time).
|
||||
|
||||
std::vector<MachineOperand> Operands; // the operands
|
||||
MachineInstr* prev, *next; // links for our intrusive list
|
||||
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
|
||||
bool OperandsComplete() const;
|
||||
|
||||
@ -376,6 +376,26 @@ public:
|
||||
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
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user