[llvm] r214979 - UseListOrder: Use std::vector

Duncan P. N. Exon Smith dexonsmith at apple.com
Wed Aug 6 10:36:08 PDT 2014


Author: dexonsmith
Date: Wed Aug  6 12:36:08 2014
New Revision: 214979

URL: http://llvm.org/viewvc/llvm-project?rev=214979&view=rev
Log:
UseListOrder: Use std::vector

I initially used a `SmallVector<>` for `UseListOrder::Shuffle`, which
was a silly choice.  When I realized my error I quickly rolled a custom
data structure.

This commit simplifies it to a `std::vector<>`.  Now that I've had a
chance to measure performance, this data structure isn't part of a
bottleneck, so the additional complexity is unnecessary.

This is part of PR5680.

Modified:
    llvm/trunk/include/llvm/IR/UseListOrder.h

Modified: llvm/trunk/include/llvm/IR/UseListOrder.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/UseListOrder.h?rev=214979&r1=214978&r2=214979&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/UseListOrder.h (original)
+++ llvm/trunk/include/llvm/IR/UseListOrder.h Wed Aug  6 12:36:08 2014
@@ -25,67 +25,11 @@ class Module;
 class Function;
 class Value;
 
-/// \brief Structure to hold a use-list shuffle vector.
-///
-/// Stores most use-lists locally, but large use-lists use an extra heap entry.
-/// Costs two fewer pointers than the equivalent \a SmallVector.
-class UseListShuffleVector {
-  unsigned Size;
-  union {
-    unsigned *Ptr;
-    unsigned Array[6];
-  } Storage;
-
-  bool isSmall() const { return Size <= 6; }
-  unsigned *data() { return isSmall() ? Storage.Array : Storage.Ptr; }
-  const unsigned *data() const {
-    return isSmall() ? Storage.Array : Storage.Ptr;
-  }
-
-  void destroy() {
-    if (!isSmall())
-      delete[] Storage.Ptr;
-  }
-  void moveUnchecked(UseListShuffleVector &X) {
-    std::memcpy(this, &X, sizeof(UseListShuffleVector));
-    X.Size = 0;
-  }
-
-  UseListShuffleVector(const UseListShuffleVector &X) LLVM_DELETED_FUNCTION;
-  UseListShuffleVector &
-  operator=(const UseListShuffleVector &X) LLVM_DELETED_FUNCTION;
-
-public:
-  UseListShuffleVector() : Size(0) {}
-  UseListShuffleVector(UseListShuffleVector &&X) { moveUnchecked(X); }
-  UseListShuffleVector &operator=(UseListShuffleVector &&X) {
-    destroy();
-    moveUnchecked(X);
-    return *this;
-  }
-  explicit UseListShuffleVector(size_t Size) : Size(Size) {
-    if (!isSmall())
-      Storage.Ptr = new unsigned[Size];
-  }
-  ~UseListShuffleVector() { destroy(); }
-
-  typedef unsigned *iterator;
-  typedef const unsigned *const_iterator;
-
-  size_t size() const { return Size; }
-  iterator begin() { return data(); }
-  iterator end() { return begin() + size(); }
-  const_iterator begin() const { return data(); }
-  const_iterator end() const { return begin() + size(); }
-  unsigned &operator[](size_t I) { return data()[I]; }
-  unsigned operator[](size_t I) const { return data()[I]; }
-};
-
 /// \brief Structure to hold a use-list order.
 struct UseListOrder {
   const Value *V;
   const Function *F;
-  UseListShuffleVector Shuffle;
+  std::vector<unsigned> Shuffle;
 
   UseListOrder(const Value *V, const Function *F, size_t ShuffleSize)
       : V(V), F(F), Shuffle(ShuffleSize) {}





More information about the llvm-commits mailing list