class iplist_impl : public TraitsT, IntrusiveListT {
typedef IntrusiveListT base_list_type;
+protected:
+ typedef iplist_impl iplist_impl_type;
+
public:
typedef typename base_list_type::pointer pointer;
typedef typename base_list_type::const_pointer const_pointer;
public:
iplist_impl() = default;
+ iplist_impl(iplist_impl &&X)
+ : TraitsT(std::move(X)), IntrusiveListT(std::move(X)) {}
+ iplist_impl &operator=(iplist_impl &&X) {
+ *static_cast<TraitsT *>(this) = std::move(X);
+ *static_cast<IntrusiveListT *>(this) = std::move(X);
+ return *this;
+ }
~iplist_impl() { clear(); }
// Miscellaneous inspection routines.
/// there for a description of what's available.
template <class T, class... Options>
class iplist
- : public iplist_impl<simple_ilist<T, Options...>, ilist_traits<T>> {};
+ : public iplist_impl<simple_ilist<T, Options...>, ilist_traits<T>> {
+ typedef typename iplist::iplist_impl_type iplist_impl_type;
+
+public:
+ iplist() = default;
+ iplist(iplist &&X) : iplist_impl_type(std::move(X)) {}
+ iplist(const iplist &X) = delete;
+ iplist &operator=(iplist &&X) {
+ *static_cast<iplist_impl_type *>(this) = std::move(X);
+ return *this;
+ }
+ iplist &operator=(const iplist &X) = delete;
+};
/// An intrusive list with ownership and callbacks specified/controlled by
/// ilist_traits, with API that is unsafe for polymorphic types.
insert(this->begin(), first, last);
}
+ ilist(ilist &&X) : base_list_type(std::move(X)) {}
+ ilist &operator=(ilist &&X) {
+ *static_cast<base_list_type *>(this) = std::move(X);
+ return *this;
+ }
+
// bring hidden functions into scope
using base_list_type::insert;
using base_list_type::push_front;
IVUsers(Loop *L, AssumptionCache *AC, LoopInfo *LI, DominatorTree *DT,
ScalarEvolution *SE);
+ IVUsers(IVUsers &&X)
+ : L(std::move(X.L)), AC(std::move(X.AC)), DT(std::move(X.DT)),
+ SE(std::move(X.SE)), Processed(std::move(X.Processed)),
+ IVUses(std::move(X.IVUses)), EphValues(std::move(X.EphValues)) {
+ for (IVStrideUse &U : IVUses)
+ U.Parent = this;
+ }
+ IVUsers(const IVUsers &) = delete;
+ IVUsers &operator=(IVUsers &&) = delete;
+ IVUsers &operator=(const IVUsers &) = delete;
+
Loop *getLoop() const { return L; }
/// AddUsersIfInteresting - Inspect the specified Instruction. If it is a