mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-12 13:38:21 +00:00
change EH related stuff (other than EH_LABEL) to use MCSymbol
instead of label ID's. This cleans up and regularizes a bunch of code and makes way for future progress. Unfortunately, this pointed out to me that JITDwarfEmitter.cpp is largely copy and paste from DwarfException/MachineModuleInfo and other places. This is very sad and disturbing. :( One major change here is that TidyLandingPads moved from being called in DwarfException::BeginFunction to being called in DwarfException::EndFunction. There should not be any functionality change from doing this, but I'm not an EH expert. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98459 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -10,6 +10,11 @@
|
||||
#include "llvm/CodeGen/MachineModuleInfo.h"
|
||||
|
||||
#include "llvm/Constants.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/GlobalVariable.h"
|
||||
#include "llvm/Intrinsics.h"
|
||||
#include "llvm/Instructions.h"
|
||||
#include "llvm/Module.h"
|
||||
#include "llvm/Analysis/ValueTracking.h"
|
||||
#include "llvm/CodeGen/MachineFunctionPass.h"
|
||||
#include "llvm/CodeGen/MachineFunction.h"
|
||||
@ -17,11 +22,8 @@
|
||||
#include "llvm/Target/TargetInstrInfo.h"
|
||||
#include "llvm/Target/TargetMachine.h"
|
||||
#include "llvm/Target/TargetOptions.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/GlobalVariable.h"
|
||||
#include "llvm/Intrinsics.h"
|
||||
#include "llvm/Instructions.h"
|
||||
#include "llvm/Module.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/MC/MCSymbol.h"
|
||||
#include "llvm/Support/Dwarf.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
using namespace llvm;
|
||||
@ -68,6 +70,12 @@ bool MachineModuleInfo::doFinalization() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// getLabelSym - Turn a label ID into a symbol.
|
||||
MCSymbol *MachineModuleInfo::getLabelSym(unsigned ID) {
|
||||
return Context.GetOrCreateTemporarySymbol
|
||||
(Twine(Context.getAsmInfo().getPrivateGlobalPrefix()) + "Label" +Twine(ID));
|
||||
}
|
||||
|
||||
/// EndFunction - Discard function meta information.
|
||||
///
|
||||
void MachineModuleInfo::EndFunction() {
|
||||
@ -123,7 +131,7 @@ LandingPadInfo &MachineModuleInfo::getOrCreateLandingPadInfo
|
||||
/// addInvoke - Provide the begin and end labels of an invoke style call and
|
||||
/// associate it with a try landing pad block.
|
||||
void MachineModuleInfo::addInvoke(MachineBasicBlock *LandingPad,
|
||||
unsigned BeginLabel, unsigned EndLabel) {
|
||||
MCSymbol *BeginLabel, MCSymbol *EndLabel) {
|
||||
LandingPadInfo &LP = getOrCreateLandingPadInfo(LandingPad);
|
||||
LP.BeginLabels.push_back(BeginLabel);
|
||||
LP.EndLabels.push_back(EndLabel);
|
||||
@ -132,10 +140,11 @@ void MachineModuleInfo::addInvoke(MachineBasicBlock *LandingPad,
|
||||
/// addLandingPad - Provide the label of a try LandingPad block.
|
||||
///
|
||||
unsigned MachineModuleInfo::addLandingPad(MachineBasicBlock *LandingPad) {
|
||||
unsigned LandingPadLabel = NextLabelID();
|
||||
unsigned LandingPadID = NextLabelID();
|
||||
MCSymbol *LandingPadLabel = getLabelSym(LandingPadID);
|
||||
LandingPadInfo &LP = getOrCreateLandingPadInfo(LandingPad);
|
||||
LP.LandingPadLabel = LandingPadLabel;
|
||||
return LandingPadLabel;
|
||||
return LandingPadID;
|
||||
}
|
||||
|
||||
/// addPersonality - Provide the personality function for the exception
|
||||
@ -189,7 +198,7 @@ void MachineModuleInfo::addCleanup(MachineBasicBlock *LandingPad) {
|
||||
void MachineModuleInfo::TidyLandingPads() {
|
||||
for (unsigned i = 0; i != LandingPads.size(); ) {
|
||||
LandingPadInfo &LandingPad = LandingPads[i];
|
||||
if (isLabelDeleted(LandingPad.LandingPadLabel))
|
||||
if (LandingPad.LandingPadLabel && !LandingPad.LandingPadLabel->isDefined())
|
||||
LandingPad.LandingPadLabel = 0;
|
||||
|
||||
// Special case: we *should* emit LPs with null LP MBB. This indicates
|
||||
@ -199,16 +208,14 @@ void MachineModuleInfo::TidyLandingPads() {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (unsigned j=0; j != LandingPads[i].BeginLabels.size(); ) {
|
||||
unsigned BeginLabel = LandingPad.BeginLabels[j];
|
||||
unsigned EndLabel = LandingPad.EndLabels[j];
|
||||
if (isLabelDeleted(BeginLabel) || isLabelDeleted(EndLabel)) {
|
||||
LandingPad.BeginLabels.erase(LandingPad.BeginLabels.begin() + j);
|
||||
LandingPad.EndLabels.erase(LandingPad.EndLabels.begin() + j);
|
||||
continue;
|
||||
}
|
||||
|
||||
++j;
|
||||
for (unsigned j = 0, e = LandingPads[i].BeginLabels.size(); j != e; ++j) {
|
||||
MCSymbol *BeginLabel = LandingPad.BeginLabels[j];
|
||||
MCSymbol *EndLabel = LandingPad.EndLabels[j];
|
||||
if (BeginLabel->isDefined() && EndLabel->isDefined()) continue;
|
||||
|
||||
LandingPad.BeginLabels.erase(LandingPad.BeginLabels.begin() + j);
|
||||
LandingPad.EndLabels.erase(LandingPad.EndLabels.begin() + j);
|
||||
--j, --e;
|
||||
}
|
||||
|
||||
// Remove landing pads with no try-ranges.
|
||||
@ -222,7 +229,6 @@ void MachineModuleInfo::TidyLandingPads() {
|
||||
if (!LandingPad.LandingPadBlock ||
|
||||
(LandingPad.TypeIds.size() == 1 && !LandingPad.TypeIds[0]))
|
||||
LandingPad.TypeIds.clear();
|
||||
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user