Promoting allocas with the 'single store' fastpath is
authorChris Lattner <sabre@nondot.org>
Sat, 4 Aug 2007 20:03:23 +0000 (20:03 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 4 Aug 2007 20:03:23 +0000 (20:03 +0000)
faster than with the 'local to a block' fastpath.  This speeds
up PR1432 from 2.1232 to 2.0686s (2.6%)

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

lib/Transforms/Utils/PromoteMemoryToRegister.cpp

index c5861832a1af4897e345e0c826fe30063dd2bb40..c0c7f65622788fc7ca4f19c7e1b46f88b68f1e12 100644 (file)
@@ -273,16 +273,6 @@ void PromoteMem2Reg::run() {
     // analogous to finding the 'uses' and 'definitions' of each variable.
     Info.AnalyzeAlloca(AI);
 
-    // If the alloca is only read and written in one basic block, just perform a
-    // linear sweep over the block to eliminate it.
-    if (Info.OnlyUsedInOneBlock) {
-      LocallyUsedAllocas[Info.OnlyBlock].push_back(AI);
-
-      // Remove the alloca from the Allocas list, since it will be processed.
-      RemoveFromAllocasList(AllocaNum);
-      continue;
-    }
-
     // If there is only a single store to this value, replace any loads of
     // it that are directly dominated by the definition with the value stored.
     if (Info.DefiningBlocks.size() == 1) {
@@ -303,6 +293,15 @@ void PromoteMem2Reg::run() {
       }
     }
     
+    // If the alloca is only read and written in one basic block, just perform a
+    // linear sweep over the block to eliminate it.
+    if (Info.OnlyUsedInOneBlock) {
+      LocallyUsedAllocas[Info.OnlyBlock].push_back(AI);
+      
+      // Remove the alloca from the Allocas list, since it will be processed.
+      RemoveFromAllocasList(AllocaNum);
+      continue;
+    }
     
     if (AST)
       PointerAllocaValues[AllocaNum] = Info.AllocaPointerVal;