mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-21 02:24:22 +00:00
EH: Sink computation of local PadMap variable into function that uses it
No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224635 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -195,9 +195,22 @@ bool EHStreamer::callToNoUnwindFunction(const MachineInstr *MI) {
|
|||||||
/// table. Entries must be ordered by try-range address.
|
/// table. Entries must be ordered by try-range address.
|
||||||
void EHStreamer::
|
void EHStreamer::
|
||||||
computeCallSiteTable(SmallVectorImpl<CallSiteEntry> &CallSites,
|
computeCallSiteTable(SmallVectorImpl<CallSiteEntry> &CallSites,
|
||||||
const RangeMapType &PadMap,
|
|
||||||
const SmallVectorImpl<const LandingPadInfo *> &LandingPads,
|
const SmallVectorImpl<const LandingPadInfo *> &LandingPads,
|
||||||
const SmallVectorImpl<unsigned> &FirstActions) {
|
const SmallVectorImpl<unsigned> &FirstActions) {
|
||||||
|
// Invokes and nounwind calls have entries in PadMap (due to being bracketed
|
||||||
|
// by try-range labels when lowered). Ordinary calls do not, so appropriate
|
||||||
|
// try-ranges for them need be deduced so we can put them in the LSDA.
|
||||||
|
RangeMapType PadMap;
|
||||||
|
for (unsigned i = 0, N = LandingPads.size(); i != N; ++i) {
|
||||||
|
const LandingPadInfo *LandingPad = LandingPads[i];
|
||||||
|
for (unsigned j = 0, E = LandingPad->BeginLabels.size(); j != E; ++j) {
|
||||||
|
MCSymbol *BeginLabel = LandingPad->BeginLabels[j];
|
||||||
|
assert(!PadMap.count(BeginLabel) && "Duplicate landing pad labels!");
|
||||||
|
PadRange P = { i, j };
|
||||||
|
PadMap[BeginLabel] = P;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// The end label of the previous invoke or nounwind try-range.
|
// The end label of the previous invoke or nounwind try-range.
|
||||||
MCSymbol *LastLabel = nullptr;
|
MCSymbol *LastLabel = nullptr;
|
||||||
|
|
||||||
@ -340,23 +353,9 @@ void EHStreamer::emitExceptionTable() {
|
|||||||
unsigned SizeActions =
|
unsigned SizeActions =
|
||||||
computeActionsTable(LandingPads, Actions, FirstActions);
|
computeActionsTable(LandingPads, Actions, FirstActions);
|
||||||
|
|
||||||
// Invokes and nounwind calls have entries in PadMap (due to being bracketed
|
|
||||||
// by try-range labels when lowered). Ordinary calls do not, so appropriate
|
|
||||||
// try-ranges for them need be deduced when using DWARF exception handling.
|
|
||||||
RangeMapType PadMap;
|
|
||||||
for (unsigned i = 0, N = LandingPads.size(); i != N; ++i) {
|
|
||||||
const LandingPadInfo *LandingPad = LandingPads[i];
|
|
||||||
for (unsigned j = 0, E = LandingPad->BeginLabels.size(); j != E; ++j) {
|
|
||||||
MCSymbol *BeginLabel = LandingPad->BeginLabels[j];
|
|
||||||
assert(!PadMap.count(BeginLabel) && "Duplicate landing pad labels!");
|
|
||||||
PadRange P = { i, j };
|
|
||||||
PadMap[BeginLabel] = P;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compute the call-site table.
|
// Compute the call-site table.
|
||||||
SmallVector<CallSiteEntry, 64> CallSites;
|
SmallVector<CallSiteEntry, 64> CallSites;
|
||||||
computeCallSiteTable(CallSites, PadMap, LandingPads, FirstActions);
|
computeCallSiteTable(CallSites, LandingPads, FirstActions);
|
||||||
|
|
||||||
// Final tallies.
|
// Final tallies.
|
||||||
|
|
||||||
|
@ -86,7 +86,6 @@ protected:
|
|||||||
/// form gaps in the table. Entries must be ordered by try-range address.
|
/// form gaps in the table. Entries must be ordered by try-range address.
|
||||||
|
|
||||||
void computeCallSiteTable(SmallVectorImpl<CallSiteEntry> &CallSites,
|
void computeCallSiteTable(SmallVectorImpl<CallSiteEntry> &CallSites,
|
||||||
const RangeMapType &PadMap,
|
|
||||||
const SmallVectorImpl<const LandingPadInfo *> &LPs,
|
const SmallVectorImpl<const LandingPadInfo *> &LPs,
|
||||||
const SmallVectorImpl<unsigned> &FirstActions);
|
const SmallVectorImpl<unsigned> &FirstActions);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user