24#ifndef LLVM_ADT_ILIST_H 
   25#define LLVM_ADT_ILIST_H 
   71  template <
class Iterator>
 
 
   82template <
typename NodeTy>
 
   89template <
typename NodeTy>
 
  109template <
class IntrusiveListT, 
class TraitsT>
 
  114  using pointer = 
typename base_list_type::pointer;
 
  121  using iterator = 
typename base_list_type::iterator;
 
  125      typename base_list_type::const_reverse_iterator;
 
  152  using base_list_type::begin;
 
  153  using base_list_type::end;
 
  154  using base_list_type::rbegin;
 
  155  using base_list_type::rend;
 
  156  using base_list_type::empty;
 
  157  using base_list_type::front;
 
  158  using base_list_type::back;
 
  161    assert(0 && 
"Swap does not use list traits callback correctly yet!");
 
  162    base_list_type::swap(
RHS);
 
 
  166    this->addNodeToList(New); 
 
  167    return base_list_type::insert(where, *New);
 
 
  176      return insert(begin(), New);
 
  178      return insert(++where, New);
 
 
  190    this->removeNodeFromList(
Node); 
 
  191    base_list_type::remove(*
Node);
 
 
  205    this->deleteNode(
remove(where));
 
 
  224    if (position == last)
 
  228    this->transferNodesFromList(L2, first, last);
 
  230    base_list_type::splice(position, L2, first, last);
 
  238  using base_list_type::size;
 
  241    while (first != last)
 
  242      first = 
erase(first);
 
 
  252    assert(!empty() && 
"pop_front() on empty list!");
 
 
  256    assert(!empty() && 
"pop_back() on empty list!");
 
 
  262    for (; first != last; ++first) 
insert(where, *first);
 
 
  268      transfer(where, L2, L2.begin(), L2.end());
 
 
  272    if (where == first || where == last) 
return; 
 
  273    transfer(where, L2, first, last);
 
 
  276    if (first != last) transfer(where, L2, first, last);
 
 
  285  template <
class Compare>
 
  290    base_list_type::merge(
Right, comp);
 
 
  294  using base_list_type::sort;
 
  298    auto I = 
N.getIterator();
 
  301    return &*std::prev(
I);
 
 
  310    auto Next = std::next(
N.getIterator());
 
 
 
  328    : 
public iplist_impl<simple_ilist<T, Options...>, ilist_traits<T>> {
 
  339    *
static_cast<iplist_impl_type *
>(
this) = std::move(
X);
 
 
 
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
 
static cl::opt< ITMode > IT(cl::desc("IT block support"), cl::Hidden, cl::init(DefaultIT), cl::values(clEnumValN(DefaultIT, "arm-default-it", "Generate any type of IT block"), clEnumValN(RestrictedIT, "arm-restrict-it", "Disallow complex IT blocks")))
 
static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")
 
A wrapper around an intrusive list with callbacks and non-intrusive ownership.
 
iterator erase(reference IT)
 
iterator erase(iterator first, iterator last)
 
void splice(iterator where, iplist_impl &L2, iterator first, iterator last)
 
void splice(iterator where, iplist_impl &L2, reference N)
 
void splice(iterator where, iplist_impl &L2)
 
typename base_list_type::reference reference
 
void push_back(pointer val)
 
void swap(iplist_impl &RHS)
 
void insert(iterator where, InIt first, InIt last)
 
iplist_impl(const iplist_impl &)=delete
 
typename base_list_type::const_reverse_iterator const_reverse_iterator
 
typename base_list_type::reverse_iterator reverse_iterator
 
pointer getPrevNode(reference N) const
Get the previous node, or nullptr for the list head.
 
iterator erase(pointer IT)
 
typename base_list_type::value_type value_type
 
pointer getNextNode(reference N) const
Get the next node, or nullptr for the list tail.
 
const_pointer getNextNode(const_reference N) const
Get the next node, or nullptr for the list tail.
 
iterator insert(iterator where, const_reference New)
 
typename base_list_type::iterator iterator
 
iterator erase(iterator where)
 
pointer remove(iterator &IT)
 
typename base_list_type::size_type size_type
 
iplist_impl(iplist_impl &&X)
 
void splice(iterator where, iplist_impl &L2, iterator first)
 
iterator insertAfter(iterator where, pointer New)
 
void splice(iterator where, iplist_impl &L2, pointer N)
 
typename base_list_type::difference_type difference_type
 
void push_front(pointer val)
 
void clearAndLeakNodesUnsafely()
Remove all nodes from the list like clear(), but do not call removeNodeFromList() or deleteNode().
 
iplist_impl & operator=(iplist_impl &&X)
 
iterator insert(iterator where, pointer New)
 
pointer remove(const iterator &IT)
 
pointer remove(pointer IT)
 
void merge(iplist_impl &Right)
 
void merge(iplist_impl &Right, Compare comp)
 
typename base_list_type::pointer pointer
 
iplist_impl & operator=(const iplist_impl &)=delete
 
size_type max_size() const
 
typename base_list_type::const_pointer const_pointer
 
void cloneFrom(const iplist_impl &L2, Cloner clone)
Clone another list.
 
typename base_list_type::const_iterator const_iterator
 
pointer remove(reference IT)
 
const_pointer getPrevNode(const_reference N) const
Get the previous node, or nullptr for the list head.
 
typename base_list_type::const_reference const_reference
 
iplist & operator=(iplist &&X)
 
iplist & operator=(const iplist &X)=delete
 
iplist(const iplist &X)=delete
 
This is an optimization pass for GlobalISel generic memory operations.
 
iplist< T, Options... > ilist
 
FunctionAddr VTableAddr Next
 
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
 
Implement std::hash so that hash_code can be used in STL containers.
 
void swap(llvm::BitVector &LHS, llvm::BitVector &RHS)
Implement std::swap in terms of BitVector swap.
 
Use delete by default for iplist and ilist.
 
static void deleteNode(NodeTy *V)
 
Callbacks do nothing by default in iplist and ilist.
 
void removeNodeFromList(NodeTy *)
 
void addNodeToList(NodeTy *)
When an MBB is added to an MF, we need to update the parent pointer of the MBB, the MBB numbering,...
 
void transferNodesFromList(ilist_callback_traits &OldList, Iterator, Iterator)
Callback before transferring nodes to this list.
 
Custom traits to do nothing on deletion.
 
static void deleteNode(NodeTy *V)
 
A fragment for template traits for intrusive list that provides default node related operations.
 
Template traits for intrusive list.