[cfe-commits] r164827 - /cfe/trunk/lib/Analysis/UninitializedValues.cpp

Benjamin Kramer benny.kra at googlemail.com
Fri Sep 28 09:44:29 PDT 2012


Author: d0k
Date: Fri Sep 28 11:44:29 2012
New Revision: 164827

URL: http://llvm.org/viewvc/llvm-project?rev=164827&view=rev
Log:
Avoid malloc thrashing in the uninitialized value analysis.

- The size of the packed vector is often small, save mallocs using SmallBitVector.
- Copying SmallBitVectors is also cheap, remove a level of indirection.

Modified:
    cfe/trunk/lib/Analysis/UninitializedValues.cpp

Modified: cfe/trunk/lib/Analysis/UninitializedValues.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/UninitializedValues.cpp?rev=164827&r1=164826&r2=164827&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/UninitializedValues.cpp (original)
+++ cfe/trunk/lib/Analysis/UninitializedValues.cpp Fri Sep 28 11:44:29 2012
@@ -13,6 +13,7 @@
 
 #include <utility>
 #include "llvm/ADT/Optional.h"
+#include "llvm/ADT/SmallBitVector.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/PackedVector.h"
 #include "llvm/ADT/DenseMap.h"
@@ -98,22 +99,21 @@
 
 namespace {
 
-typedef llvm::PackedVector<Value, 2> ValueVector;
+typedef llvm::PackedVector<Value, 2, llvm::SmallBitVector> ValueVector;
 
 class CFGBlockValues {
   const CFG &cfg;
-  std::vector<ValueVector*> vals;
+  SmallVector<ValueVector, 8> vals;
   ValueVector scratch;
   DeclToIndex declToIndex;
 public:
   CFGBlockValues(const CFG &cfg);
-  ~CFGBlockValues();
 
   unsigned getNumEntries() const { return declToIndex.size(); }
   
   void computeSetOfDeclarations(const DeclContext &dc);  
   ValueVector &getValueVector(const CFGBlock *block) {
-    return *vals[block->getBlockID()];
+    return vals[block->getBlockID()];
   }
 
   void setAllScratchValues(Value V);
@@ -139,12 +139,6 @@
 
 CFGBlockValues::CFGBlockValues(const CFG &c) : cfg(c), vals(0) {}
 
-CFGBlockValues::~CFGBlockValues() {
-  for (std::vector<ValueVector*>::iterator I = vals.begin(), E = vals.end();
-       I != E; ++I)
-    delete *I;
-}
-
 void CFGBlockValues::computeSetOfDeclarations(const DeclContext &dc) {
   declToIndex.computeMap(dc);
   unsigned decls = declToIndex.size();
@@ -154,7 +148,7 @@
     return;
   vals.resize(n);
   for (unsigned i = 0; i < n; ++i)
-    vals[i] = new ValueVector(decls);
+    vals[i].resize(decls);
 }
 
 #if DEBUG_LOGGING





More information about the cfe-commits mailing list