Add the AddLandingPadInfo function.

AddLandingPadInfo takes a landingpad instruction and grabs all of the
information from it that it needs for EH table generation.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136429 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Bill Wendling 2011-07-28 23:42:57 +00:00
parent 3d8b15ea70
commit e963a3814f
2 changed files with 39 additions and 0 deletions

View File

@ -220,6 +220,11 @@ void AddCatchInfo(const CallInst &I,
void CopyCatchInfo(const BasicBlock *SuccBB, const BasicBlock *LPad,
MachineModuleInfo *MMI, FunctionLoweringInfo &FLI);
/// AddLandingPadInfo - Extract the exception handling information from the
/// landingpad instruction and add them to the specified machine module info.
void AddLandingPadInfo(const LandingPadInst &I, MachineModuleInfo &MMI,
MachineBasicBlock *MBB);
} // end namespace llvm
#endif

View File

@ -454,3 +454,37 @@ void llvm::CopyCatchInfo(const BasicBlock *SuccBB, const BasicBlock *LPad,
break;
}
}
//--------- NEW EH - Begin ---------
/// AddLandingPadInfo - Extract the exception handling information from the
/// landingpad instruction and add them to the specified machine module info.
void llvm::AddLandingPadInfo(const LandingPadInst &I, MachineModuleInfo &MMI,
MachineBasicBlock *MBB) {
MMI.addPersonality(MBB, I.getPersonalityFn());
if (I.isCleanup())
MMI.addCleanup(MBB);
for (unsigned i = 0, e = I.getNumClauses(); i != e; ) {
switch (I.getClauseType(i)) {
case LandingPadInst::Catch:
MMI.addCatchTypeInfo(MBB, dyn_cast<GlobalVariable>(I.getClauseValue(i)));
++i;
break;
case LandingPadInst::Filter: {
// Add filters in a list.
SmallVector<const GlobalVariable*, 4> FilterList;
do {
FilterList.push_back(cast<GlobalVariable>(I.getClauseValue(i)));
++i;
} while (i != e && I.getClauseType(i) == LandingPadInst::Filter);
MMI.addFilterTypeInfo(MBB, FilterList);
break;
}
}
}
}
//--------- NEW EH - End ---------