avoid an unneeded vector copy. This speeds up mem2reg on the testcase
authorChris Lattner <sabre@nondot.org>
Sat, 4 Aug 2007 01:07:49 +0000 (01:07 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 4 Aug 2007 01:07:49 +0000 (01:07 +0000)
in PR1432 by 6%

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40803 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/PromoteMemoryToRegister.cpp

index e4d541a0dd2258483667a663c9d92b258c107190..bb4b599fbaf37ec3c93744fc43d9d3b3aabfb3fa 100644 (file)
@@ -76,11 +76,18 @@ namespace {
   // Data package used by RenamePass()
   class VISIBILITY_HIDDEN RenamePassData {
   public:
+    RenamePassData() {}
     RenamePassData(BasicBlock *B, BasicBlock *P,
                    const std::vector<Value *> &V) : BB(B), Pred(P), Values(V) {}
     BasicBlock *BB;
     BasicBlock *Pred;
     std::vector<Value *> Values;
+    
+    void swap(RenamePassData &RHS) {
+      std::swap(BB, RHS.BB);
+      std::swap(Pred, RHS.Pred);
+      Values.swap(RHS.Values);
+    }
   };
 
   struct VISIBILITY_HIDDEN PromoteMem2Reg {
@@ -406,7 +413,8 @@ void PromoteMem2Reg::run() {
   std::vector<RenamePassData> RenamePassWorkList;
   RenamePassWorkList.push_back(RenamePassData(F.begin(), 0, Values));
   while(!RenamePassWorkList.empty()) {
-    RenamePassData RPD = RenamePassWorkList.back(); 
+    RenamePassData RPD;
+    RPD.swap(RenamePassWorkList.back());
     RenamePassWorkList.pop_back();
     // RenamePass may add new worklist entries.
     RenamePass(RPD.BB, RPD.Pred, RPD.Values, RenamePassWorkList);