mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-15 05:24:01 +00:00
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:
@ -220,6 +220,11 @@ void AddCatchInfo(const CallInst &I,
|
|||||||
void CopyCatchInfo(const BasicBlock *SuccBB, const BasicBlock *LPad,
|
void CopyCatchInfo(const BasicBlock *SuccBB, const BasicBlock *LPad,
|
||||||
MachineModuleInfo *MMI, FunctionLoweringInfo &FLI);
|
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
|
} // end namespace llvm
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -454,3 +454,37 @@ void llvm::CopyCatchInfo(const BasicBlock *SuccBB, const BasicBlock *LPad,
|
|||||||
break;
|
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 ---------
|
||||||
|
Reference in New Issue
Block a user