16 #ifndef LLVM_LIB_IR_SYMBOLTABLELISTTRAITSIMPL_H
17 #define LLVM_LIB_IR_SYMBOLTABLELISTTRAITSIMPL_H
27 template<
typename ValueSubClass,
typename ItemParentClass>
28 template<
typename TPtr>
41 if (OldST == NewST)
return;
45 if (ItemList.
empty())
return;
50 I != ItemList.
end(); ++
I)
52 OldST->removeValueName(
I->getValueName());
58 I != ItemList.
end(); ++
I)
60 NewST->reinsertValue(
I);
65 template<
typename ValueSubClass,
typename ItemParentClass>
68 assert(!V->getParent() &&
"Value already in a container!!");
69 ItemParentClass *Owner = getListOwner();
76 template<
typename ValueSubClass,
typename ItemParentClass>
79 V->setParent(
nullptr);
82 ST->removeValueName(V->getValueName());
85 template<
typename ValueSubClass,
typename ItemParentClass>
91 ItemParentClass *NewIP = getListOwner(), *OldIP = L2.getListOwner();
92 if (NewIP == OldIP)
return;
99 for (; first != last; ++first) {
100 ValueSubClass &V = *first;
101 bool HasName = V.hasName();
102 if (OldST && HasName)
103 OldST->removeValueName(V.getValueName());
105 if (NewST && HasName)
106 NewST->reinsertValue(&V);
111 for (; first != last; ++first)
112 first->setParent(NewIP);
This class provides a symbol table of name/value pairs.
void transferNodesFromList(ilist_traits< ValueSubClass > &L2, ilist_iterator< ValueSubClass > first, ilist_iterator< ValueSubClass > last)
void removeNodeFromList(ValueSubClass *V)
void setSymTabObject(TPtr *, TPtr)
setSymTabObject - This is called when (f.e.) the parent of a basic block changes. ...
iplist - The subset of list functionality that can safely be used on nodes of polymorphic types...
bool LLVM_ATTRIBUTE_UNUSED_RESULT empty() const
void addNodeToList(ValueSubClass *V)
static bool getSymTab(Value *V, ValueSymbolTable *&ST)