From 8c5c0733cde7c941de6c9386a07a8378c5c482c5 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Tue, 7 Aug 2012 22:47:06 +0000 Subject: [PATCH] Skip tied operand pairs that already have the same register. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161454 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/TwoAddressInstructionPass.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/CodeGen/TwoAddressInstructionPass.cpp b/lib/CodeGen/TwoAddressInstructionPass.cpp index 62d54208c6d..d22274496ab 100644 --- a/lib/CodeGen/TwoAddressInstructionPass.cpp +++ b/lib/CodeGen/TwoAddressInstructionPass.cpp @@ -1209,27 +1209,28 @@ collectTiedOperands(MachineInstr *MI, TiedOperandMap &TiedOperands) { if (!MI->isRegTiedToDefOperand(SrcIdx, &DstIdx)) continue; AnyOps = true; + MachineOperand &SrcMO = MI->getOperand(SrcIdx); + MachineOperand &DstMO = MI->getOperand(DstIdx); + unsigned SrcReg = SrcMO.getReg(); + unsigned DstReg = DstMO.getReg(); + // Tied constraint already satisfied? + if (SrcReg == DstReg) + continue; - assert(MI->getOperand(SrcIdx).isReg() && - MI->getOperand(SrcIdx).getReg() && - MI->getOperand(SrcIdx).isUse() && - "two address instruction invalid"); - - unsigned RegB = MI->getOperand(SrcIdx).getReg(); + assert(SrcReg && SrcMO.isUse() && "two address instruction invalid"); // Deal with uses immediately - simply rewrite the src operand. - if (MI->getOperand(SrcIdx).isUndef()) { - unsigned DstReg = MI->getOperand(DstIdx).getReg(); + if (SrcMO.isUndef()) { // Constrain the DstReg register class if required. if (TargetRegisterInfo::isVirtualRegister(DstReg)) if (const TargetRegisterClass *RC = TII->getRegClass(MCID, SrcIdx, TRI, *MF)) MRI->constrainRegClass(DstReg, RC); - MI->getOperand(SrcIdx).setReg(DstReg); + SrcMO.setReg(DstReg); DEBUG(dbgs() << "\t\trewrite undef:\t" << *MI); continue; } - TiedOperands[RegB].push_back(std::make_pair(SrcIdx, DstIdx)); + TiedOperands[SrcReg].push_back(std::make_pair(SrcIdx, DstIdx)); } return AnyOps; } -- 2.34.1