OSDN Git Service

Fix a performance problem with the new SSAUpdater. This showed up in the
authorBob Wilson <bob.wilson@apple.com>
Wed, 21 Apr 2010 18:39:03 +0000 (18:39 +0000)
committerBob Wilson <bob.wilson@apple.com>
Wed, 21 Apr 2010 18:39:03 +0000 (18:39 +0000)
GCCAS time for MultiSource/Benchmarks/ASCI_Purple/SMG2000.

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

lib/Transforms/Utils/SSAUpdater.cpp

index d491cbb..25d50db 100644 (file)
@@ -529,9 +529,15 @@ void SSAUpdater::FindAvailableVals(BlockListTy *BlockList) {
          E = BlockList->rend(); I != E; ++I) {
     BBInfo *Info = *I;
 
-    // Check if this block contains a newly added PHI.
-    if (Info->DefBB != Info)
+    if (Info->DefBB != Info) {
+      // Record the available value at join nodes to speed up subsequent
+      // uses of this SSAUpdater for the same value.
+      if (Info->NumPreds > 1)
+        AvailableVals[Info->BB] = Info->DefBB->AvailableVal;
       continue;
+    }
+
+    // Check if this block contains a newly added PHI.
     PHINode *PHI = dyn_cast<PHINode>(Info->AvailableVal);
     if (!PHI || PHI->getNumIncomingValues() == Info->NumPreds)
       continue;