forked from OSchip/llvm-project
[AsmPrinter] Delete dead takeDeletedSymbsForFunction()
The code added in r98579 is dead now.
This commit is contained in:
parent
e68c1e00eb
commit
9583a3f262
|
@ -233,13 +233,6 @@ public:
|
|||
/// to emit them as well, return the whole set.
|
||||
ArrayRef<MCSymbol *> getAddrLabelSymbolToEmit(const BasicBlock *BB);
|
||||
|
||||
/// If the specified function has had any references to address-taken blocks
|
||||
/// generated, but the block got deleted, return the symbol now so we can
|
||||
/// emit it. This prevents emitting a reference to a symbol that has no
|
||||
/// definition.
|
||||
void takeDeletedSymbolsForFunction(const Function *F,
|
||||
std::vector<MCSymbol*> &Result);
|
||||
|
||||
/// \name Exception Handling
|
||||
/// \{
|
||||
|
||||
|
|
|
@ -715,16 +715,6 @@ void AsmPrinter::EmitFunctionHeader() {
|
|||
// their wild and crazy things as required.
|
||||
EmitFunctionEntryLabel();
|
||||
|
||||
// If the function had address-taken blocks that got deleted, then we have
|
||||
// references to the dangling symbols. Emit them at the start of the function
|
||||
// so that we don't get references to undefined symbols.
|
||||
std::vector<MCSymbol*> DeadBlockSyms;
|
||||
MMI->takeDeletedSymbolsForFunction(&F, DeadBlockSyms);
|
||||
for (unsigned i = 0, e = DeadBlockSyms.size(); i != e; ++i) {
|
||||
OutStreamer->AddComment("Address taken block that was later removed");
|
||||
OutStreamer->EmitLabel(DeadBlockSyms[i]);
|
||||
}
|
||||
|
||||
if (CurrentFnBegin) {
|
||||
if (MAI->useAssignmentForEHBegin()) {
|
||||
MCSymbol *CurPos = OutContext.createTempSymbol();
|
||||
|
|
|
@ -76,25 +76,11 @@ class MMIAddrLabelMap {
|
|||
/// we get notified if a block is deleted or RAUWd.
|
||||
std::vector<MMIAddrLabelMapCallbackPtr> BBCallbacks;
|
||||
|
||||
/// This is a per-function list of symbols whose corresponding BasicBlock got
|
||||
/// deleted. These symbols need to be emitted at some point in the file, so
|
||||
/// AsmPrinter emits them after the function body.
|
||||
DenseMap<AssertingVH<Function>, std::vector<MCSymbol*>>
|
||||
DeletedAddrLabelsNeedingEmission;
|
||||
|
||||
public:
|
||||
MMIAddrLabelMap(MCContext &context) : Context(context) {}
|
||||
|
||||
~MMIAddrLabelMap() {
|
||||
assert(DeletedAddrLabelsNeedingEmission.empty() &&
|
||||
"Some labels for deleted blocks never got emitted");
|
||||
}
|
||||
|
||||
ArrayRef<MCSymbol *> getAddrLabelSymbolToEmit(BasicBlock *BB);
|
||||
|
||||
void takeDeletedSymbolsForFunction(Function *F,
|
||||
std::vector<MCSymbol*> &Result);
|
||||
|
||||
void UpdateForDeletedBlock(BasicBlock *BB);
|
||||
void UpdateForRAUWBlock(BasicBlock *Old, BasicBlock *New);
|
||||
};
|
||||
|
@ -132,20 +118,6 @@ ArrayRef<MCSymbol *> MMIAddrLabelMap::getAddrLabelSymbolToEmit(BasicBlock *BB) {
|
|||
return Entry.Symbols;
|
||||
}
|
||||
|
||||
/// If we have any deleted symbols for F, return them.
|
||||
void MMIAddrLabelMap::
|
||||
takeDeletedSymbolsForFunction(Function *F, std::vector<MCSymbol*> &Result) {
|
||||
DenseMap<AssertingVH<Function>, std::vector<MCSymbol*>>::iterator I =
|
||||
DeletedAddrLabelsNeedingEmission.find(F);
|
||||
|
||||
// If there are no entries for the function, just return.
|
||||
if (I == DeletedAddrLabelsNeedingEmission.end()) return;
|
||||
|
||||
// Otherwise, take the list.
|
||||
std::swap(Result, I->second);
|
||||
DeletedAddrLabelsNeedingEmission.erase(I);
|
||||
}
|
||||
|
||||
void MMIAddrLabelMap::UpdateForDeletedBlock(BasicBlock *BB) {
|
||||
// If the block got deleted, there is no need for the symbol. If the symbol
|
||||
// was already emitted, we can just forget about it, otherwise we need to
|
||||
|
@ -158,16 +130,8 @@ void MMIAddrLabelMap::UpdateForDeletedBlock(BasicBlock *BB) {
|
|||
assert((BB->getParent() == nullptr || BB->getParent() == Entry.Fn) &&
|
||||
"Block/parent mismatch");
|
||||
|
||||
for (MCSymbol *Sym : Entry.Symbols) {
|
||||
if (Sym->isDefined())
|
||||
return;
|
||||
|
||||
// If the block is not yet defined, we need to emit it at the end of the
|
||||
// function. Add the symbol to the DeletedAddrLabelsNeedingEmission list
|
||||
// for the containing Function. Since the block is being deleted, its
|
||||
// parent may already be removed, we have to get the function from 'Entry'.
|
||||
DeletedAddrLabelsNeedingEmission[Entry.Fn].push_back(Sym);
|
||||
}
|
||||
assert(llvm::all_of(Entry.Symbols, [](MCSymbol *Sym) {
|
||||
return Sym->isDefined(); }));
|
||||
}
|
||||
|
||||
void MMIAddrLabelMap::UpdateForRAUWBlock(BasicBlock *Old, BasicBlock *New) {
|
||||
|
@ -252,15 +216,6 @@ MachineModuleInfo::getAddrLabelSymbolToEmit(const BasicBlock *BB) {
|
|||
return AddrLabelSymbols->getAddrLabelSymbolToEmit(const_cast<BasicBlock*>(BB));
|
||||
}
|
||||
|
||||
void MachineModuleInfo::
|
||||
takeDeletedSymbolsForFunction(const Function *F,
|
||||
std::vector<MCSymbol*> &Result) {
|
||||
// If no blocks have had their addresses taken, we're done.
|
||||
if (!AddrLabelSymbols) return;
|
||||
return AddrLabelSymbols->
|
||||
takeDeletedSymbolsForFunction(const_cast<Function*>(F), Result);
|
||||
}
|
||||
|
||||
/// \name Exception Handling
|
||||
/// \{
|
||||
|
||||
|
|
Loading…
Reference in New Issue