diff options
| -rw-r--r-- | llvm/include/llvm/CodeGen/FunctionLoweringInfo.h | 9 | ||||
| -rw-r--r-- | llvm/include/llvm/CodeGen/MachineModuleInfo.h | 24 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineFunction.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MachineModuleInfo.cpp | 2 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 10 |
5 files changed, 18 insertions, 32 deletions
diff --git a/llvm/include/llvm/CodeGen/FunctionLoweringInfo.h b/llvm/include/llvm/CodeGen/FunctionLoweringInfo.h index 45a47d7333e3..04667c04a4ef 100644 --- a/llvm/include/llvm/CodeGen/FunctionLoweringInfo.h +++ b/llvm/include/llvm/CodeGen/FunctionLoweringInfo.h @@ -188,6 +188,9 @@ public: /// SelectionDAGISel::PrepareEHLandingPad(). unsigned ExceptionPointerVirtReg, ExceptionSelectorVirtReg; + /// The current call site index being processed, if any. 0 if none. + unsigned CurCallSite = 0; + /// Collection of dbg.declare instructions handled after argument /// lowering and before ISel proper. SmallPtrSet<const DbgDeclareInst *, 8> PreprocessedDbgDeclares; @@ -281,6 +284,12 @@ public: Register getCatchPadExceptionPointerVReg(const Value *CPI, const TargetRegisterClass *RC); + /// Set the call site currently being processed. + void setCurrentCallSite(unsigned Site) { CurCallSite = Site; } + + /// Get the call site currently being processed, if any. Return zero if none. + unsigned getCurrentCallSite() { return CurCallSite; } + private: /// LiveOutRegInfo - Information about live out vregs. IndexedMap<LiveOutInfo, VirtReg2IndexFunctor> LiveOutRegInfo; diff --git a/llvm/include/llvm/CodeGen/MachineModuleInfo.h b/llvm/include/llvm/CodeGen/MachineModuleInfo.h index dfa0e993ec06..f054c56bb641 100644 --- a/llvm/include/llvm/CodeGen/MachineModuleInfo.h +++ b/llvm/include/llvm/CodeGen/MachineModuleInfo.h @@ -99,20 +99,6 @@ class MachineModuleInfo { /// want. MachineModuleInfoImpl *ObjFileMMI; - /// \name Exception Handling - /// \{ - - /// The current call site index being processed, if any. 0 if none. - unsigned CurCallSite = 0; - - /// \} - - // TODO: Ideally, what we'd like is to have a switch that allows emitting - // synchronous (precise at call-sites only) CFA into .eh_frame. However, - // even under this switch, we'd like .debug_frame to be precise when using - // -g. At this moment, there's no way to specify that some CFI directives - // go into .eh_frame only, while others go into .debug_frame only. - /// True if debugging information is available in this module. bool DbgInfoAvailable = false; @@ -185,16 +171,6 @@ public: /// Returns true if valid debug info is present. bool hasDebugInfo() const { return DbgInfoAvailable; } - /// \name Exception Handling - /// \{ - - /// Set the call site currently being processed. - void setCurrentCallSite(unsigned Site) { CurCallSite = Site; } - - /// Get the call site currently being processed, if any. return zero if - /// none. - unsigned getCurrentCallSite() { return CurCallSite; } - /// \} }; // End class MachineModuleInfo diff --git a/llvm/lib/CodeGen/MachineFunction.cpp b/llvm/lib/CodeGen/MachineFunction.cpp index 7f6a75208d25..61799251095a 100644 --- a/llvm/lib/CodeGen/MachineFunction.cpp +++ b/llvm/lib/CodeGen/MachineFunction.cpp @@ -654,6 +654,11 @@ void MachineFunction::print(raw_ostream &OS, const SlotIndexes *Indexes) const { /// True if this function needs frame moves for debug or exceptions. bool MachineFunction::needsFrameMoves() const { + // TODO: Ideally, what we'd like is to have a switch that allows emitting + // synchronous (precise at call-sites only) CFA into .eh_frame. However, even + // under this switch, we'd like .debug_frame to be precise when using -g. At + // this moment, there's no way to specify that some CFI directives go into + // .eh_frame only, while others go into .debug_frame only. return getMMI().hasDebugInfo() || getTarget().Options.ForceDwarfFrameSection || F.needsUnwindTableEntry(); diff --git a/llvm/lib/CodeGen/MachineModuleInfo.cpp b/llvm/lib/CodeGen/MachineModuleInfo.cpp index 150ab363c8fc..f382df1d2a6e 100644 --- a/llvm/lib/CodeGen/MachineModuleInfo.cpp +++ b/llvm/lib/CodeGen/MachineModuleInfo.cpp @@ -26,7 +26,6 @@ MachineModuleInfoImpl::~MachineModuleInfoImpl() = default; void MachineModuleInfo::initialize() { ObjFileMMI = nullptr; - CurCallSite = 0; NextFnNum = 0; DbgInfoAvailable = false; } @@ -46,7 +45,6 @@ MachineModuleInfo::MachineModuleInfo(MachineModuleInfo &&MMI) MachineFunctions(std::move(MMI.MachineFunctions)) { Context.setObjectFileInfo(TM.getObjFileLowering()); ObjFileMMI = MMI.ObjFileMMI; - CurCallSite = MMI.CurCallSite; ExternalContext = MMI.ExternalContext; TheModule = MMI.TheModule; } diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 1791f1b50337..c554c0f5b6fd 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -6708,10 +6708,9 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, return; case Intrinsic::eh_sjlj_callsite: { ConstantInt *CI = cast<ConstantInt>(I.getArgOperand(0)); - assert(DAG.getMMI()->getCurrentCallSite() == 0 && - "Overlapping call sites!"); + assert(FuncInfo.getCurrentCallSite() == 0 && "Overlapping call sites!"); - DAG.getMMI()->setCurrentCallSite(CI->getZExtValue()); + FuncInfo.setCurrentCallSite(CI->getZExtValue()); return; } case Intrinsic::eh_sjlj_functioncontext: { @@ -8619,7 +8618,6 @@ SDValue SelectionDAGBuilder::lowerStartEH(SDValue Chain, const BasicBlock *EHPadBB, MCSymbol *&BeginLabel) { MachineFunction &MF = DAG.getMachineFunction(); - MachineModuleInfo &MMI = MF.getMMI(); // Insert a label before the invoke call to mark the try range. This can be // used to detect deletion of the invoke via the MachineModuleInfo. @@ -8627,13 +8625,13 @@ SDValue SelectionDAGBuilder::lowerStartEH(SDValue Chain, // For SjLj, keep track of which landing pads go with which invokes // so as to maintain the ordering of pads in the LSDA. - unsigned CallSiteIndex = MMI.getCurrentCallSite(); + unsigned CallSiteIndex = FuncInfo.getCurrentCallSite(); if (CallSiteIndex) { MF.setCallSiteBeginLabel(BeginLabel, CallSiteIndex); LPadToCallSiteMap[FuncInfo.MBBMap[EHPadBB]].push_back(CallSiteIndex); // Now that the call site is handled, stop tracking it. - MMI.setCurrentCallSite(0); + FuncInfo.setCurrentCallSite(0); } return DAG.getEHLabel(getCurSDLoc(), Chain, BeginLabel); |
