From bd18d751ded5d3ab803c8d3fdb9a1cc86ff40a44 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Sat, 20 Feb 2016 03:56:39 +0000 Subject: [PATCH] MachineCopyPropagation: Move variables from function to pass This avoids unnecessarily passing them around when calling helper functions. It may also be slightly faster to call clear() on the datastructures instead of freshly initializing them for each block. llvm-svn: 261407 --- llvm/lib/CodeGen/MachineCopyPropagation.cpp | 40 ++++++++++++++++------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/llvm/lib/CodeGen/MachineCopyPropagation.cpp b/llvm/lib/CodeGen/MachineCopyPropagation.cpp index 2e744e5..d2af95c 100644 --- a/llvm/lib/CodeGen/MachineCopyPropagation.cpp +++ b/llvm/lib/CodeGen/MachineCopyPropagation.cpp @@ -49,9 +49,18 @@ namespace { typedef SmallVector DestList; typedef DenseMap SourceMap; - void SourceNoLongerAvailable(unsigned Reg, SourceMap &SrcMap, - DenseMap &AvailCopyMap); - bool CopyPropagateBlock(MachineBasicBlock &MBB); + void SourceNoLongerAvailable(unsigned Reg); + void CopyPropagateBlock(MachineBasicBlock &MBB); + + /// Candidates for deletion. + SmallSetVector MaybeDeadCopies; + /// Def -> available copies map. + DenseMap AvailCopyMap; + /// Def -> copies map. + DenseMap CopyMap; + /// Src -> Def map + SourceMap SrcMap; + bool Changed; }; } char MachineCopyPropagation::ID = 0; @@ -60,9 +69,7 @@ char &llvm::MachineCopyPropagationID = MachineCopyPropagation::ID; INITIALIZE_PASS(MachineCopyPropagation, "machine-cp", "Machine Copy Propagation Pass", false, false) -void -MachineCopyPropagation::SourceNoLongerAvailable(unsigned Reg, SourceMap &SrcMap, - DenseMap &AvailCopyMap) { +void MachineCopyPropagation::SourceNoLongerAvailable(unsigned Reg) { for (MCRegAliasIterator AI(Reg, TRI, true); AI.isValid(); ++AI) { SourceMap::iterator SI = SrcMap.find(*AI); if (SI != SrcMap.end()) { @@ -116,15 +123,9 @@ static bool isNopCopy(const MachineInstr *CopyMI, unsigned Def, unsigned Src, return false; } -bool MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) { - SmallSetVector MaybeDeadCopies; // Candidates for deletion - DenseMap AvailCopyMap; // Def -> available copies map - DenseMap CopyMap; // Def -> copies map - SourceMap SrcMap; // Src -> Def map - +void MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) { DEBUG(dbgs() << "MCP: CopyPropagateBlock " << MBB.getName() << "\n"); - bool Changed = false; for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end(); I != E; ) { MachineInstr *MI = &*I; ++I; @@ -195,7 +196,7 @@ bool MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) { // %xmm2 = copy %xmm0 // ... // %xmm2 = copy %xmm9 - SourceNoLongerAvailable(Def, SrcMap, AvailCopyMap); + SourceNoLongerAvailable(Def); // Remember Def is defined by the copy. // ... Make sure to clear the def maps of aliases first. @@ -292,7 +293,7 @@ bool MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) { // If 'Reg' is previously source of a copy, it is no longer available for // copy propagation. - SourceNoLongerAvailable(Reg, SrcMap, AvailCopyMap); + SourceNoLongerAvailable(Reg); } } @@ -308,21 +309,24 @@ bool MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) { } } - return Changed; + MaybeDeadCopies.clear(); + AvailCopyMap.clear(); + CopyMap.clear(); + SrcMap.clear(); } bool MachineCopyPropagation::runOnMachineFunction(MachineFunction &MF) { if (skipOptnoneFunction(*MF.getFunction())) return false; - bool Changed = false; + Changed = false; TRI = MF.getSubtarget().getRegisterInfo(); TII = MF.getSubtarget().getInstrInfo(); MRI = &MF.getRegInfo(); for (MachineBasicBlock &MBB : MF) - Changed |= CopyPropagateBlock(MBB); + CopyPropagateBlock(MBB); return Changed; } -- 2.7.4