Collect eh filter info.

llvm-svn: 34804
This commit is contained in:
Jim Laskey 2007-03-01 20:25:32 +00:00
parent fa80a0e8a2
commit 6458e6acb9
2 changed files with 26 additions and 12 deletions

View File

@ -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);

View File

@ -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() {