LLVM 20.0.0git
Classes | Public Types | Public Member Functions | List of all members
llvm::DIEValueList Class Reference

A list of DIE values. More...

#include "llvm/CodeGen/DIE.h"

Inheritance diagram for llvm::DIEValueList:
Inheritance graph
[legend]

Classes

class  const_value_iterator
 
class  value_iterator
 

Public Types

using value_range = iterator_range< value_iterator >
 
using const_value_range = iterator_range< const_value_iterator >
 

Public Member Functions

value_iterator addValue (BumpPtrAllocator &Alloc, const DIEValue &V)
 
template<class T >
value_iterator addValue (BumpPtrAllocator &Alloc, dwarf::Attribute Attribute, dwarf::Form Form, T &&Value)
 
template<class T >
bool replaceValue (BumpPtrAllocator &Alloc, dwarf::Attribute Attribute, dwarf::Attribute NewAttribute, dwarf::Form Form, T &&NewValue)
 
template<class T >
bool replaceValue (BumpPtrAllocator &Alloc, dwarf::Attribute Attribute, dwarf::Form Form, T &&NewValue)
 
bool replaceValue (BumpPtrAllocator &Alloc, dwarf::Attribute Attribute, dwarf::Form Form, DIEValue &NewValue)
 
bool deleteValue (dwarf::Attribute Attribute)
 
void takeValues (DIEValueList &Other)
 Take ownership of the nodes in Other, and append them to the back of the list.
 
value_range values ()
 
const_value_range values () const
 

Detailed Description

A list of DIE values.

This is a singly-linked list, but instead of reversing the order of insertion, we keep a pointer to the back of the list so we can push in order.

There are two main reasons to choose a linked list over a customized vector-like data structure.

  1. For teardown efficiency, we want DIEs to be BumpPtrAllocated. Using a linked list here makes this way easier to accomplish.
  2. Carrying an extra pointer per DIEValue isn't expensive. 45% of DIEs have 2 or fewer values, and 90% have 5 or fewer. A vector would be over-allocated by 50% on average anyway, the same cost as the linked-list node.

Definition at line 689 of file DIE.h.

Member Typedef Documentation

◆ const_value_range

Definition at line 738 of file DIE.h.

◆ value_range

Definition at line 737 of file DIE.h.

Member Function Documentation

◆ addValue() [1/2]

value_iterator llvm::DIEValueList::addValue ( BumpPtrAllocator Alloc,
const DIEValue V 
)
inline

◆ addValue() [2/2]

template<class T >
value_iterator llvm::DIEValueList::addValue ( BumpPtrAllocator Alloc,
dwarf::Attribute  Attribute,
dwarf::Form  Form,
T &&  Value 
)
inline

Definition at line 745 of file DIE.h.

References addValue(), and llvm::Alloc.

◆ deleteValue()

bool llvm::DIEValueList::deleteValue ( dwarf::Attribute  Attribute)
inline

Definition at line 791 of file DIE.h.

References List.

◆ replaceValue() [1/3]

template<class T >
bool llvm::DIEValueList::replaceValue ( BumpPtrAllocator Alloc,
dwarf::Attribute  Attribute,
dwarf::Attribute  NewAttribute,
dwarf::Form  Form,
T &&  NewValue 
)
inline

Definition at line 752 of file DIE.h.

References llvm::Alloc, and values().

◆ replaceValue() [2/3]

bool llvm::DIEValueList::replaceValue ( BumpPtrAllocator Alloc,
dwarf::Attribute  Attribute,
dwarf::Form  Form,
DIEValue NewValue 
)
inline

Definition at line 779 of file DIE.h.

References values().

◆ replaceValue() [3/3]

template<class T >
bool llvm::DIEValueList::replaceValue ( BumpPtrAllocator Alloc,
dwarf::Attribute  Attribute,
dwarf::Form  Form,
T &&  NewValue 
)
inline

Definition at line 767 of file DIE.h.

References llvm::Alloc, and values().

◆ takeValues()

void llvm::DIEValueList::takeValues ( DIEValueList Other)
inline

Take ownership of the nodes in Other, and append them to the back of the list.

Definition at line 805 of file DIE.h.

References List, and llvm::Other.

◆ values() [1/2]

value_range llvm::DIEValueList::values ( )
inline

◆ values() [2/2]

const_value_range llvm::DIEValueList::values ( ) const
inline

Definition at line 810 of file DIE.h.

References List, and llvm::make_range().


The documentation for this class was generated from the following file: