mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
[mips] [IAS] Do not generate redundant move when expanding lw/sw with symbol.
Summary: Even though there is no 2nd register operand in the "lw/sw $8, symbol" case, we still try to find one, and we end up with $0, which makes us generate an unnecessary "addu $8, $8, $0" (a.k.a. "move $8, $8"). We can avoid this by checking if the 2nd register operand is different from $0, before generating the addu. Reviewers: dsanders Reviewed By: dsanders Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D8055 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234406 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -2078,12 +2078,14 @@ void MipsAsmParser::expandMemInst(MCInst &Inst, SMLoc IDLoc,
|
||||
// Prepare TempInst for next instruction.
|
||||
TempInst.clear();
|
||||
// Add temp register to base.
|
||||
TempInst.setOpcode(Mips::ADDu);
|
||||
TempInst.addOperand(MCOperand::CreateReg(TmpRegNum));
|
||||
TempInst.addOperand(MCOperand::CreateReg(TmpRegNum));
|
||||
TempInst.addOperand(MCOperand::CreateReg(BaseRegNum));
|
||||
Instructions.push_back(TempInst);
|
||||
TempInst.clear();
|
||||
if (BaseRegNum != Mips::ZERO) {
|
||||
TempInst.setOpcode(Mips::ADDu);
|
||||
TempInst.addOperand(MCOperand::CreateReg(TmpRegNum));
|
||||
TempInst.addOperand(MCOperand::CreateReg(TmpRegNum));
|
||||
TempInst.addOperand(MCOperand::CreateReg(BaseRegNum));
|
||||
Instructions.push_back(TempInst);
|
||||
TempInst.clear();
|
||||
}
|
||||
// And finally, create original instruction with low part
|
||||
// of offset and new base.
|
||||
TempInst.setOpcode(Inst.getOpcode());
|
||||
|
Reference in New Issue
Block a user