mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-22 23:24:59 +00:00
CodeGen: Use mop_iterator instead of MIOperands/ConstMIOperands
MIOperands/ConstMIOperands are classes iterating over the MachineOperand of a MachineInstr, however MachineInstr::mop_iterator does the same thing. I assume these two iterators exist to have a uniform interface to iterate over the operands of a machine instruction bundle and a single machine instruction. However in practice I find it more confusing to have 2 different iterator classes, so this patch transforms (nearly all) the code to use mop_iterators. The only exception being MIOperands::anlayzePhysReg() and MIOperands::analyzeVirtReg() still needing an equivalent, I leave that as an exercise for the next patch. Differential Revision: http://reviews.llvm.org/D9932 This version is slightly modified from the proposed revision in that it introduces MachineInstr::getOperandNo to avoid the extra counting variable in the few loops that previously used MIOperands::getOperandNo. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238539 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -3541,16 +3541,18 @@ bool X86FastISel::tryToFoldLoadIntoMI(MachineInstr *MI, unsigned OpNo,
|
||||
// to just look at OpNo + the offset to the index reg. We actually need to
|
||||
// scan the instruction to find the index reg and see if its the correct reg
|
||||
// class.
|
||||
for (MIOperands MO(Result); MO.isValid(); ++MO) {
|
||||
if (!MO->isReg() || MO->isDef() || MO->getReg() != AM.IndexReg)
|
||||
unsigned OperandNo = 0;
|
||||
for (MachineInstr::mop_iterator I = Result->operands_begin(),
|
||||
E = Result->operands_end(); I != E; ++I, ++OperandNo) {
|
||||
MachineOperand &MO = *I;
|
||||
if (!MO.isReg() || MO.isDef() || MO.getReg() != AM.IndexReg)
|
||||
continue;
|
||||
// Found the index reg, now try to rewrite it.
|
||||
unsigned OpNo = MO.getOperandNo();
|
||||
unsigned IndexReg = constrainOperandRegClass(Result->getDesc(),
|
||||
MO->getReg(), OpNo);
|
||||
if (IndexReg == MO->getReg())
|
||||
MO.getReg(), OperandNo);
|
||||
if (IndexReg == MO.getReg())
|
||||
continue;
|
||||
MO->setReg(IndexReg);
|
||||
MO.setReg(IndexReg);
|
||||
}
|
||||
|
||||
Result->addMemOperand(*FuncInfo.MF, createMachineMemOperandFor(LI));
|
||||
|
Reference in New Issue
Block a user