mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-25 00:33:15 +00:00
Handle regmasks in findRegisterDefOperandIdx().
Only accept register masks when looking for an 'overlapping' def. When Overlap is not set, the function searches for a proper definition of Reg. This means MI->modifiesRegister() considers register masks, but MI->definesRegister() doesn't. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150529 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6b7913893b
commit
1cf8b0f2a5
@ -702,6 +702,7 @@ public:
|
||||
/// that are not dead are skipped. If Overlap is true, then it also looks for
|
||||
/// defs that merely overlap the specified register. If TargetRegisterInfo is
|
||||
/// non-null, then it also checks if there is a def of a super-register.
|
||||
/// This may also return a register mask operand when Overlap is true.
|
||||
int findRegisterDefOperandIdx(unsigned Reg,
|
||||
bool isDead = false, bool Overlap = false,
|
||||
const TargetRegisterInfo *TRI = NULL) const;
|
||||
|
@ -1045,6 +1045,10 @@ MachineInstr::findRegisterDefOperandIdx(unsigned Reg, bool isDead, bool Overlap,
|
||||
bool isPhys = TargetRegisterInfo::isPhysicalRegister(Reg);
|
||||
for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
|
||||
const MachineOperand &MO = getOperand(i);
|
||||
// Accept regmask operands when Overlap is set.
|
||||
// Ignore them when looking for a specific def operand (Overlap == false).
|
||||
if (isPhys && Overlap && MO.isRegMask() && MO.clobbersPhysReg(Reg))
|
||||
return i;
|
||||
if (!MO.isReg() || !MO.isDef())
|
||||
continue;
|
||||
unsigned MOReg = MO.getReg();
|
||||
|
Loading…
x
Reference in New Issue
Block a user