[llvm-commits] [llvm] r38479 - /llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp

Owen Anderson resistor at mac.com
Mon Jul 9 17:09:26 PDT 2007


Author: resistor
Date: Mon Jul  9 19:09:25 2007
New Revision: 38479

URL: http://llvm.org/viewvc/llvm-project?rev=38479&view=rev
Log:
Use a cheaper test, delaying calling find_leader() until we know that it's necessary.  This improves
the time to optimize Anton's testcase from 21.1s to 17.6s.

Modified:
    llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp?rev=38479&r1=38478&r2=38479&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp Mon Jul  9 19:09:25 2007
@@ -565,6 +565,7 @@
     bool insert(Value* v) { return contents.insert(v); }
     void insert(iterator I, iterator E) { contents.insert(I, E); }
     void erase(Value* v) { contents.erase(v); }
+    unsigned count(Value* v) { return contents.count(v); }
     size_t size() { return contents.size(); }
     
     void set(unsigned i)  {
@@ -1173,15 +1174,16 @@
           isa<ShuffleVectorInst>(BI) || isa<InsertElementInst>(BI) ||
           isa<ExtractElementInst>(BI) || isa<SelectInst>(BI) ||
           isa<CastInst>(BI) || isa<GetElementPtrInst>(BI)) {
-         Value *leader = find_leader(availableOut[BB], VN.lookup(BI));
-  
-        if (leader != 0)
+        
+        if (availableOut[BB].test(VN.lookup(BI)) && ! availableOut[BB].count(BI)) {
+          Value *leader = find_leader(availableOut[BB], VN.lookup(BI));
           if (Instruction* Instr = dyn_cast<Instruction>(leader))
             if (Instr->getParent() != 0 && Instr != BI) {
               replace.push_back(std::make_pair(BI, leader));
               erase.push_back(BI);
               ++NumEliminated;
             }
+        }
       }
     }
   }





More information about the llvm-commits mailing list