pull the predMap densemap out of the inner loop of performPRE, so
authorChris Lattner <sabre@nondot.org>
Mon, 1 Dec 2008 07:29:03 +0000 (07:29 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 1 Dec 2008 07:29:03 +0000 (07:29 +0000)
that it isn't reallocated all the time.  This is a tiny speedup for
GVN: 3.90->3.88s

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

lib/Transforms/Scalar/GVN.cpp

index 9189f41c19c09005b35732b55b90c095aff14215..2995b1000a3aa2a3648aa5a46e240c90d3e06a90 100644 (file)
@@ -1225,6 +1225,7 @@ bool GVN::processBlock(DomTreeNode* DTN) {
 bool GVN::performPRE(Function& F) {
   bool changed = false;
   SmallVector<std::pair<TerminatorInst*, unsigned>, 4> toSplit;
+  DenseMap<BasicBlock*, Value*> predMap;
   for (df_iterator<BasicBlock*> DI = df_begin(&F.getEntryBlock()),
        DE = df_end(&F.getEntryBlock()); DI != DE; ++DI) {
     BasicBlock* CurrentBlock = *DI;
@@ -1252,7 +1253,8 @@ bool GVN::performPRE(Function& F) {
       unsigned numWith = 0;
       unsigned numWithout = 0;
       BasicBlock* PREPred = 0;
-      DenseMap<BasicBlock*, Value*> predMap;
+      predMap.clear();
+
       for (pred_iterator PI = pred_begin(CurrentBlock),
            PE = pred_end(CurrentBlock); PI != PE; ++PI) {
         // We're not interested in PRE where the block is its
@@ -1359,7 +1361,7 @@ bool GVN::performPRE(Function& F) {
       
       Instruction* erase = BI;
       BI++;
-      DEBUG(cerr << "GVN removed: " << *erase);
+      DEBUG(cerr << "GVN PRE removed: " << *erase);
       MD->removeInstruction(erase);
       erase->eraseFromParent();
       changed = true;