Add a new replaceWith method useful for replacing instructions

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2088 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2002-04-01 17:52:16 +00:00
parent f8285d4d8f
commit bb063f38fa
2 changed files with 33 additions and 1 deletions

View File

@ -90,6 +90,12 @@ public:
void remove(ValueSubclass *D); // Defined in ValueHolderImpl.h
ValueSubclass *pop_back(); // Defined in ValueHolderImpl.h
// replaceWith - This removes the element pointed to by 'Where', and inserts
// NewValue in it's place. The old value is returned. 'Where' must be a
// valid iterator!
//
ValueSubclass *replaceWith(iterator &Where, ValueSubclass *NewValue);
// delete_span - Remove the elements from begin to end, deleting them as we
// go. This leaves the iterator pointing to the element that used to be end.
//

View File

@ -82,7 +82,7 @@ template<class ValueSubclass, class ItemParentType, class SymTabType>
ValueSubclass *ValueHolder<ValueSubclass,ItemParentType,SymTabType>
::remove(const iterator &DI) {
assert(DI != ValueList.end() &&
"Trying to remove the end of the def list!!!");
"Trying to remove the end of the value holder list!!!");
ValueSubclass *i = *DI;
ValueList.erase(DI);
@ -96,6 +96,32 @@ ValueSubclass *ValueHolder<ValueSubclass,ItemParentType,SymTabType>
return i;
}
template<class ValueSubclass, class ItemParentType, class SymTabType>
ValueSubclass *ValueHolder<ValueSubclass,ItemParentType,SymTabType>
::replaceWith(iterator &DI, ValueSubclass *NewVal) {
assert(DI != ValueList.end() &&
"Trying to replace the end of the value holder list!!!");
// Remove the value from the current container...
ValueSubclass *Ret = *DI;
Ret->setParent(0); // I don't own you anymore... byebye...
// You don't get to be in the symbol table anymore... byebye
if (Ret->hasName() && Parent)
Parent->getSymbolTable()->remove(Ret);
// Insert the new value into the container...
assert(NewVal->getParent() == 0 && "Value already has parent!");
NewVal->setParent(ItemParent);
*DI = NewVal;
if (NewVal->hasName() && Parent)
Parent->getSymbolTableSure()->insert(NewVal);
return Ret;
}
template<class ValueSubclass, class ItemParentType, class SymTabType>
void ValueHolder<ValueSubclass,ItemParentType,SymTabType>
::push_front(ValueSubclass *Inst) {