mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 22:24:07 +00:00
Add @earlyclobber TableGen constraint
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91554 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -555,8 +555,13 @@ void MachineInstr::addOperand(const MachineOperand &Op) {
|
||||
Operands.back().ParentMI = this;
|
||||
|
||||
// If the operand is a register, update the operand's use list.
|
||||
if (Op.isReg())
|
||||
if (Op.isReg()) {
|
||||
Operands.back().AddRegOperandToRegInfo(RegInfo);
|
||||
// If the register operand is flagged as early, mark the operand as such
|
||||
unsigned OpNo = Operands.size() - 1;
|
||||
if (TID->getOperandConstraint(OpNo, TOI::EARLY_CLOBBER) != -1)
|
||||
Operands[OpNo].setIsEarlyClobber(true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -573,8 +578,12 @@ void MachineInstr::addOperand(const MachineOperand &Op) {
|
||||
|
||||
// Do explicitly set the reginfo for this operand though, to ensure the
|
||||
// next/prev fields are properly nulled out.
|
||||
if (Operands[OpNo].isReg())
|
||||
if (Operands[OpNo].isReg()) {
|
||||
Operands[OpNo].AddRegOperandToRegInfo(0);
|
||||
// If the register operand is flagged as early, mark the operand as such
|
||||
if (TID->getOperandConstraint(OpNo, TOI::EARLY_CLOBBER) != -1)
|
||||
Operands[OpNo].setIsEarlyClobber(true);
|
||||
}
|
||||
|
||||
} else if (Operands.size()+1 <= Operands.capacity()) {
|
||||
// Otherwise, we have to remove register operands from their register use
|
||||
@ -594,8 +603,12 @@ void MachineInstr::addOperand(const MachineOperand &Op) {
|
||||
Operands.insert(Operands.begin()+OpNo, Op);
|
||||
Operands[OpNo].ParentMI = this;
|
||||
|
||||
if (Operands[OpNo].isReg())
|
||||
if (Operands[OpNo].isReg()) {
|
||||
Operands[OpNo].AddRegOperandToRegInfo(RegInfo);
|
||||
// If the register operand is flagged as early, mark the operand as such
|
||||
if (TID->getOperandConstraint(OpNo, TOI::EARLY_CLOBBER) != -1)
|
||||
Operands[OpNo].setIsEarlyClobber(true);
|
||||
}
|
||||
|
||||
// Re-add all the implicit ops.
|
||||
for (unsigned i = OpNo+1, e = Operands.size(); i != e; ++i) {
|
||||
@ -613,6 +626,11 @@ void MachineInstr::addOperand(const MachineOperand &Op) {
|
||||
|
||||
// Re-add all the operands.
|
||||
AddRegOperandsToUseLists(*RegInfo);
|
||||
|
||||
// If the register operand is flagged as early, mark the operand as such
|
||||
if (Operands[OpNo].isReg()
|
||||
&& TID->getOperandConstraint(OpNo, TOI::EARLY_CLOBBER) != -1)
|
||||
Operands[OpNo].setIsEarlyClobber(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user