Modify the mapping from landing pad to call sites to accept more than one call

site.

llvm-svn: 141226
This commit is contained in:
Bill Wendling 2011-10-05 22:24:35 +00:00
parent 5cf58b9ba0
commit 267f323d28
3 changed files with 6 additions and 3 deletions

View File

@ -5250,7 +5250,7 @@ void SelectionDAGBuilder::LowerCallTo(ImmutableCallSite CS, SDValue Callee,
unsigned CallSiteIndex = MMI.getCurrentCallSite(); unsigned CallSiteIndex = MMI.getCurrentCallSite();
if (CallSiteIndex) { if (CallSiteIndex) {
MMI.setCallSiteBeginLabel(BeginLabel, CallSiteIndex); MMI.setCallSiteBeginLabel(BeginLabel, CallSiteIndex);
LPadToCallSiteMap[LandingPad] = CallSiteIndex; LPadToCallSiteMap[LandingPad].push_back(CallSiteIndex);
// Now that the call site is handled, stop tracking it. // Now that the call site is handled, stop tracking it.
MMI.setCurrentCallSite(0); MMI.setCurrentCallSite(0);

View File

@ -320,8 +320,8 @@ public:
/// GFI - Garbage collection metadata for the function. /// GFI - Garbage collection metadata for the function.
GCFunctionInfo *GFI; GCFunctionInfo *GFI;
/// LPadToBeginLabelMap - Map a landing pad to the begin label. /// LPadToCallSiteMap - Map a landing pad to the call site indexes.
DenseMap<MachineBasicBlock*, unsigned> LPadToCallSiteMap; DenseMap<MachineBasicBlock*, SmallVector<unsigned, 4> > LPadToCallSiteMap;
/// HasTailCall - This is set to true if a call in the current /// HasTailCall - This is set to true if a call in the current
/// block has been translated as a tail call. In this case, /// block has been translated as a tail call. In this case,

View File

@ -691,6 +691,9 @@ void SelectionDAGISel::PrepareEHLandingPad() {
// landing pad can thus be detected via the MachineModuleInfo. // landing pad can thus be detected via the MachineModuleInfo.
MCSymbol *Label = MF->getMMI().addLandingPad(MBB); MCSymbol *Label = MF->getMMI().addLandingPad(MBB);
// Assign the call site to the landing pad's begin label.
MF->getMMI().setCallSiteLandingPad(Label, SDB->LPadToCallSiteMap[MBB]);
const MCInstrDesc &II = TM.getInstrInfo()->get(TargetOpcode::EH_LABEL); const MCInstrDesc &II = TM.getInstrInfo()->get(TargetOpcode::EH_LABEL);
BuildMI(*MBB, FuncInfo->InsertPt, SDB->getCurDebugLoc(), II) BuildMI(*MBB, FuncInfo->InsertPt, SDB->getCurDebugLoc(), II)
.addSym(Label); .addSym(Label);