mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-27 13:40:30 +00:00
Collect eh filter info.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34804 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e2a6acd13f
commit
59e8434a85
@ -960,6 +960,8 @@ struct LandingPadInfo {
|
||||
unsigned LandingPadLabel; // Label at beginning of landing pad.
|
||||
Function *Personality; // Personality function.
|
||||
std::vector<unsigned> TypeIds; // List of type ids.
|
||||
bool IsFilter; // Indicate if the landing pad is a
|
||||
// throw filter.
|
||||
|
||||
LandingPadInfo(MachineBasicBlock *MBB)
|
||||
: LandingPadBlock(MBB)
|
||||
@ -967,6 +969,7 @@ struct LandingPadInfo {
|
||||
, EndLabel(0)
|
||||
, LandingPadLabel(0)
|
||||
, TypeIds()
|
||||
, IsFilter(false)
|
||||
{}
|
||||
};
|
||||
|
||||
@ -1202,6 +1205,10 @@ public:
|
||||
void addCatchTypeInfo(MachineBasicBlock *LandingPad,
|
||||
std::vector<GlobalVariable *> &TyInfo);
|
||||
|
||||
/// setIsFilterLandingPad - Indicates that the landing pad is a throw filter.
|
||||
///
|
||||
void setIsFilterLandingPad(MachineBasicBlock *LandingPad);
|
||||
|
||||
/// getTypeIDFor - Return the type id for the specified typeinfo. This is
|
||||
/// function wide.
|
||||
unsigned getTypeIDFor(GlobalVariable *TI);
|
||||
|
@ -1653,9 +1653,9 @@ LandingPadInfo &MachineModuleInfo::getOrCreateLandingPadInfo
|
||||
(MachineBasicBlock *LandingPad) {
|
||||
unsigned N = LandingPads.size();
|
||||
for (unsigned i = 0; i < N; ++i) {
|
||||
LandingPadInfo &UI = LandingPads[i];
|
||||
if (UI.LandingPadBlock == LandingPad)
|
||||
return UI;
|
||||
LandingPadInfo &LP = LandingPads[i];
|
||||
if (LP.LandingPadBlock == LandingPad)
|
||||
return LP;
|
||||
}
|
||||
|
||||
LandingPads.push_back(LandingPadInfo(LandingPad));
|
||||
@ -1666,17 +1666,17 @@ LandingPadInfo &MachineModuleInfo::getOrCreateLandingPadInfo
|
||||
/// associate it with a try landing pad block.
|
||||
void MachineModuleInfo::addInvoke(MachineBasicBlock *LandingPad,
|
||||
unsigned BeginLabel, unsigned EndLabel) {
|
||||
LandingPadInfo &UI = getOrCreateLandingPadInfo(LandingPad);
|
||||
if (!UI.BeginLabel) UI.BeginLabel = BeginLabel;
|
||||
UI.EndLabel = EndLabel;
|
||||
LandingPadInfo &LP = getOrCreateLandingPadInfo(LandingPad);
|
||||
if (!LP.BeginLabel) LP.BeginLabel = BeginLabel;
|
||||
LP.EndLabel = EndLabel;
|
||||
}
|
||||
|
||||
/// addLandingPad - Provide the label of a try LandingPad block.
|
||||
///
|
||||
unsigned MachineModuleInfo::addLandingPad(MachineBasicBlock *LandingPad) {
|
||||
unsigned LandingPadLabel = NextLabelID();
|
||||
LandingPadInfo &UI = getOrCreateLandingPadInfo(LandingPad);
|
||||
UI.LandingPadLabel = LandingPadLabel;
|
||||
LandingPadInfo &LP = getOrCreateLandingPadInfo(LandingPad);
|
||||
LP.LandingPadLabel = LandingPadLabel;
|
||||
return LandingPadLabel;
|
||||
}
|
||||
|
||||
@ -1684,19 +1684,26 @@ unsigned MachineModuleInfo::addLandingPad(MachineBasicBlock *LandingPad) {
|
||||
/// information.
|
||||
void MachineModuleInfo::addPersonality(MachineBasicBlock *LandingPad,
|
||||
Function *Personality) {
|
||||
LandingPadInfo &UI = getOrCreateLandingPadInfo(LandingPad);
|
||||
UI.Personality = Personality;
|
||||
LandingPadInfo &LP = getOrCreateLandingPadInfo(LandingPad);
|
||||
LP.Personality = Personality;
|
||||
}
|
||||
|
||||
/// addCatchTypeInfo - Provide the catch typeinfo for a landing pad.
|
||||
///
|
||||
void MachineModuleInfo::addCatchTypeInfo(MachineBasicBlock *LandingPad,
|
||||
std::vector<GlobalVariable *> &TyInfo) {
|
||||
LandingPadInfo &UI = getOrCreateLandingPadInfo(LandingPad);
|
||||
LandingPadInfo &LP = getOrCreateLandingPadInfo(LandingPad);
|
||||
for (unsigned N = TyInfo.size(); N; --N)
|
||||
UI.TypeIds.push_back(getTypeIDFor(TyInfo[N - 1]));
|
||||
LP.TypeIds.push_back(getTypeIDFor(TyInfo[N - 1]));
|
||||
}
|
||||
|
||||
/// setIsFilterLandingPad - Indicates that the landing pad is a throw filter.
|
||||
///
|
||||
void MachineModuleInfo::setIsFilterLandingPad(MachineBasicBlock *LandingPad) {
|
||||
LandingPadInfo &LP = getOrCreateLandingPadInfo(LandingPad);
|
||||
LP.IsFilter = true;
|
||||
}
|
||||
|
||||
/// TidyLandingPads - Remap landing pad labels and remove any deleted landing
|
||||
/// pads.
|
||||
void MachineModuleInfo::TidyLandingPads() {
|
||||
|
Loading…
Reference in New Issue
Block a user