OSDN Git Service

Put a heuristic in place to prevent GVN from falling into bad cases with massively...
authorOwen Anderson <resistor@mac.com>
Tue, 26 Aug 2008 22:07:42 +0000 (22:07 +0000)
committerOwen Anderson <resistor@mac.com>
Tue, 26 Aug 2008 22:07:42 +0000 (22:07 +0000)
This speeds up a particular testcase from 12+ hours to 5 seconds with little perceptible loss of quality.

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

lib/Transforms/Scalar/GVN.cpp

index 272ad1b..42fbc78 100644 (file)
@@ -862,6 +862,12 @@ bool GVN::processNonLocalLoad(LoadInst* L,
   DenseMap<BasicBlock*, Value*> deps;
   MD.getNonLocalDependency(L, deps);
   
+  // If we had to process more than one hundred blocks to find the
+  // dependencies, this load isn't worth worrying about.  Optimizing
+  // it will be too expensive.
+  if (deps.size() > 100)
+    return false;
+  
   DenseMap<BasicBlock*, Value*> repl;
   
   // Filter out useless results (non-locals, etc)