[llvm-commits] [llvm] r48939 - /llvm/trunk/lib/Transforms/Scalar/GVN.cpp

Chris Lattner sabre at nondot.org
Fri Mar 28 21:52:12 PDT 2008


Author: lattner
Date: Fri Mar 28 23:52:12 2008
New Revision: 48939

URL: http://llvm.org/viewvc/llvm-project?rev=48939&view=rev
Log:
make the common case of a single store (which clearly shouldn't be turned
into a memset!) faster by avoiding an allocation of an std::list node.

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

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

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Fri Mar 28 23:52:12 2008
@@ -1182,7 +1182,7 @@
   typedef std::list<MemsetRange>::const_iterator const_iterator;
   const_iterator begin() const { return Ranges.begin(); }
   const_iterator end() const { return Ranges.end(); }
-  
+  bool empty() const { return Ranges.empty(); }
   
   void addStore(int64_t OffsetFromFirst, StoreInst *SI);
 };
@@ -1281,8 +1281,6 @@
   // are stored.
   MemsetRanges Ranges(TD);
   
-  // Add our first pointer.
-  Ranges.addStore(0, SI);
   Value *StartPtr = SI->getPointerOperand();
   
   BasicBlock::iterator BI = SI;
@@ -1319,6 +1317,17 @@
 
     Ranges.addStore(Offset, NextStore);
   }
+
+  // If we have no ranges, then we just had a single store with nothing that
+  // could be merged in.  This is a very common case of course.
+  if (Ranges.empty())
+    return false;
+  
+  // If we had at least one store that could be merged in, add the starting
+  // store as well.  We try to avoid this unless there is at least something
+  // interesting as a small compile-time optimization.
+  Ranges.addStore(0, SI);
+
   
   Function *MemSetF = 0;
   





More information about the llvm-commits mailing list