[llvm] r261407 - MachineCopyPropagation: Move variables from function to pass

Matthias Braun via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 19 19:56:39 PST 2016


Author: matze
Date: Fri Feb 19 21:56:39 2016
New Revision: 261407

URL: http://llvm.org/viewvc/llvm-project?rev=261407&view=rev
Log:
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.

Modified:
    llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp

Modified: llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp?rev=261407&r1=261406&r2=261407&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineCopyPropagation.cpp Fri Feb 19 21:56:39 2016
@@ -49,9 +49,18 @@ namespace {
     typedef SmallVector<unsigned, 4> DestList;
     typedef DenseMap<unsigned, DestList> SourceMap;
 
-    void SourceNoLongerAvailable(unsigned Reg, SourceMap &SrcMap,
-                                 DenseMap<unsigned, MachineInstr*> &AvailCopyMap);
-    bool CopyPropagateBlock(MachineBasicBlock &MBB);
+    void SourceNoLongerAvailable(unsigned Reg);
+    void CopyPropagateBlock(MachineBasicBlock &MBB);
+
+    /// Candidates for deletion.
+    SmallSetVector<MachineInstr*, 8> MaybeDeadCopies;
+    /// Def -> available copies map.
+    DenseMap<unsigned, MachineInstr*> AvailCopyMap;
+    /// Def -> copies map.
+    DenseMap<unsigned, MachineInstr*> CopyMap;
+    /// Src -> Def map
+    SourceMap SrcMap;
+    bool Changed;
   };
 }
 char MachineCopyPropagation::ID = 0;
@@ -60,9 +69,7 @@ char &llvm::MachineCopyPropagationID = M
 INITIALIZE_PASS(MachineCopyPropagation, "machine-cp",
                 "Machine Copy Propagation Pass", false, false)
 
-void
-MachineCopyPropagation::SourceNoLongerAvailable(unsigned Reg, SourceMap &SrcMap,
-                              DenseMap<unsigned, MachineInstr*> &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
   return false;
 }
 
-bool MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) {
-  SmallSetVector<MachineInstr*, 8> MaybeDeadCopies;  // Candidates for deletion
-  DenseMap<unsigned, MachineInstr*> AvailCopyMap;    // Def -> available copies map
-  DenseMap<unsigned, MachineInstr*> 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::CopyPropaga
       // %xmm2<def> = copy %xmm0
       // ...
       // %xmm2<def> = 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::CopyPropaga
 
       // 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::CopyPropaga
     }
   }
 
-  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;
 }




More information about the llvm-commits mailing list