fix a logic bug where we wouldn't promote single store allocas if the
authorChris Lattner <sabre@nondot.org>
Sat, 4 Aug 2007 02:45:02 +0000 (02:45 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 4 Aug 2007 02:45:02 +0000 (02:45 +0000)
stored value was a non-instruction value.  Doh.

This increase the # single store allocas from 8982 to 9026, and
speeds up mem2reg on the testcase in PR1432 from 2.17 to 2.13s.

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

lib/Transforms/Utils/PromoteMemoryToRegister.cpp

index 1106c6ea163bb70aafad71bdc3088ef8df89e131..7520b22749df9c6a7a0a707e9ae36209c6606c7f 100644 (file)
@@ -557,7 +557,7 @@ void PromoteMem2Reg::RewriteSingleStoreAlloca(AllocaInst *AI,
     // do so now.  We can't handle the case where the store doesn't dominate a
     // block because there may be a path between the store and the use, but we
     // may need to insert phi nodes to handle dominance properly.
-    if (StoringGlobalVal || !dominates(OnlyStore->getParent(), UseBlock))
+    if (!StoringGlobalVal && !dominates(OnlyStore->getParent(), UseBlock))
       continue;
     
     // If the use and store are in the same block, do a quick scan to
@@ -569,7 +569,7 @@ void PromoteMem2Reg::RewriteSingleStoreAlloca(AllocaInst *AI,
           break;
       }
       if (&*I != OnlyStore)
-        break;  // Do not handle this alloca.
+        continue;  // Do not promote the uses of this in this block.
     }
     
     // Otherwise, if this is a different block or if all uses happen