Remove the code from Function::dropAllReferences which replaced

uses of the function's blocks with undef. This code isn't needed,
because BasicBlock's destructor handles such uses. Also, undef isn't
correct, since blockaddresses may still be used for comparisons
with null.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121170 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2010-12-07 19:56:51 +00:00
parent 45258f5708
commit a6399ae089

View File

@ -227,19 +227,10 @@ void Function::dropAllReferences() {
for (iterator I = begin(), E = end(); I != E; ++I) for (iterator I = begin(), E = end(); I != E; ++I)
I->dropAllReferences(); I->dropAllReferences();
// Delete all basic blocks. // Delete all basic blocks. They are now unused, except possibly by
while (!BasicBlocks.empty()) { // blockaddresses, but BasicBlock's destructor takes care of those.
// If there is still a reference to the block, it must be a 'blockaddress' while (!BasicBlocks.empty())
// constant pointing to it. Just replace the BlockAddress with undef. BasicBlocks.begin()->eraseFromParent();
BasicBlock *BB = BasicBlocks.begin();
if (!BB->use_empty()) {
BlockAddress *BA = cast<BlockAddress>(BB->use_back());
BA->replaceAllUsesWith(UndefValue::get(BA->getType()));
BA->destroyConstant();
}
BB->eraseFromParent();
}
} }
void Function::addAttribute(unsigned i, Attributes attr) { void Function::addAttribute(unsigned i, Attributes attr) {