From: Bill Wendling Date: Tue, 11 Dec 2007 19:17:04 +0000 (+0000) Subject: - Update the virtual reg to machine instruction map when hoisting. X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=28bd5f0e47d968d64ea2e64868c505923b27c24d;hp=650b0527a495acbf7d6ee3343e8c41fae1686148 - Update the virtual reg to machine instruction map when hoisting. - Fix subtle bug when creating initially creating this map. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44873 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/MachineLICM.cpp b/lib/CodeGen/MachineLICM.cpp index b158e90f16e..b5a00848a23 100644 --- a/lib/CodeGen/MachineLICM.cpp +++ b/lib/CodeGen/MachineLICM.cpp @@ -215,7 +215,7 @@ void MachineLICM::MapVirtualRegisterDefs(const MachineFunction &MF) { const MachineInstr &MI = *II; for (unsigned i = 0, e = MI.getNumOperands(); i != e; ++i) { - const MachineOperand &MO = MI.getOperand(0); + const MachineOperand &MO = MI.getOperand(i); if (MO.isRegister() && MO.isDef() && MRegisterInfo::isVirtualRegister(MO.getReg())) @@ -317,7 +317,17 @@ void MachineLICM::Hoist(MachineInstr &MI) { "The predecessor doesn't feed directly into the loop header!"); // Now move the instructions to the predecessor. - MoveInstToEndOfBlock(MBB, MI.clone()); + MachineInstr *NewMI = MI.clone(); + MoveInstToEndOfBlock(MBB, NewMI); + + // Update VRegDefs. + for (unsigned i = 0, e = NewMI->getNumOperands(); i != e; ++i) { + const MachineOperand &MO = NewMI->getOperand(i); + + if (MO.isRegister() && MO.isDef() && + MRegisterInfo::isVirtualRegister(MO.getReg())) + VRegDefs[MO.getReg()] = NewMI; + } // Hoisting was successful! Remove bothersome instruction now. MI.getParent()->remove(&MI);