return isSmall() ? Storage.Array : Storage.Ptr;
}
-public:
- UseListShuffleVector() : Size(0) {}
- UseListShuffleVector(UseListShuffleVector &&X) {
+ void destroy() {
+ if (!isSmall())
+ delete[] Storage.Ptr;
+ }
+ void moveUnchecked(UseListShuffleVector &X) {
std::memcpy(this, &X, sizeof(UseListShuffleVector));
X.Size = 0;
}
- UseListShuffleVector(const UseListShuffleVector &X) {
- std::memcpy(this, &X, sizeof(UseListShuffleVector));
- if (!isSmall()) {
- Storage.Ptr = new unsigned[Size];
- std::memcpy(Storage.Ptr, X.Storage.Ptr, Size * sizeof(*Storage.Ptr));
- }
+
+ 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() {
- if (!isSmall())
- delete[] Storage.Ptr;
- }
+ ~UseListShuffleVector() { destroy(); }
typedef unsigned *iterator;
typedef const unsigned *const_iterator;
UseListOrder(const Value *V, const Function *F, size_t ShuffleSize)
: V(V), F(F), Shuffle(ShuffleSize) {}
+
+ UseListOrder() : V(0), F(0) {}
+ UseListOrder(UseListOrder &&X)
+ : V(X.V), F(X.F), Shuffle(std::move(X.Shuffle)) {}
+ UseListOrder &operator=(UseListOrder &&X) {
+ V = X.V;
+ F = X.F;
+ Shuffle = std::move(X.Shuffle);
+ return *this;
+ }
+
+private:
+ UseListOrder(const UseListOrder &X) LLVM_DELETED_FUNCTION;
+ UseListOrder &operator=(const UseListOrder &X) LLVM_DELETED_FUNCTION;
};
typedef std::vector<UseListOrder> UseListOrderStack;