diff options
author | Bill Wendling <isanbard@gmail.com> | 2011-10-05 22:24:35 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2011-10-05 22:24:35 +0000 |
commit | 267f323d28aad590ccde7806bf35f11511760a58 (patch) | |
tree | 64e88bfeaf5a3fb073880c8870ae18ef2edbaf11 /llvm/lib/CodeGen | |
parent | 5cf58b9ba062803cdb3fa5464c195d4ec3a08cf4 (diff) | |
download | bcm5719-llvm-267f323d28aad590ccde7806bf35f11511760a58.tar.gz bcm5719-llvm-267f323d28aad590ccde7806bf35f11511760a58.zip |
Modify the mapping from landing pad to call sites to accept more than one call
site.
llvm-svn: 141226
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h | 4 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 3 |
3 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 6eb862a0525..ebf20972136 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -5250,7 +5250,7 @@ void SelectionDAGBuilder::LowerCallTo(ImmutableCallSite CS, SDValue Callee, unsigned CallSiteIndex = MMI.getCurrentCallSite(); if (CallSiteIndex) { MMI.setCallSiteBeginLabel(BeginLabel, CallSiteIndex); - LPadToCallSiteMap[LandingPad] = CallSiteIndex; + LPadToCallSiteMap[LandingPad].push_back(CallSiteIndex); // Now that the call site is handled, stop tracking it. MMI.setCurrentCallSite(0); diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h index 521e4d39384..461677f8bff 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h @@ -320,8 +320,8 @@ public: /// GFI - Garbage collection metadata for the function. GCFunctionInfo *GFI; - /// LPadToBeginLabelMap - Map a landing pad to the begin label. - DenseMap<MachineBasicBlock*, unsigned> LPadToCallSiteMap; + /// LPadToCallSiteMap - Map a landing pad to the call site indexes. + DenseMap<MachineBasicBlock*, SmallVector<unsigned, 4> > LPadToCallSiteMap; /// HasTailCall - This is set to true if a call in the current /// block has been translated as a tail call. In this case, diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index b6fb978e6b4..68b9146adfe 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -691,6 +691,9 @@ void SelectionDAGISel::PrepareEHLandingPad() { // landing pad can thus be detected via the MachineModuleInfo. 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); BuildMI(*MBB, FuncInfo->InsertPt, SDB->getCurDebugLoc(), II) .addSym(Label); |