diff options
Diffstat (limited to 'include/llvm/CodeGen/MachineModuleInfo.h')
| -rw-r--r-- | include/llvm/CodeGen/MachineModuleInfo.h | 56 | 
1 files changed, 34 insertions, 22 deletions
| diff --git a/include/llvm/CodeGen/MachineModuleInfo.h b/include/llvm/CodeGen/MachineModuleInfo.h index 6d8d05684c56..f0d0b2dbcdbc 100644 --- a/include/llvm/CodeGen/MachineModuleInfo.h +++ b/include/llvm/CodeGen/MachineModuleInfo.h @@ -66,6 +66,7 @@ struct LandingPadInfo {    MachineBasicBlock *LandingPadBlock;    // Landing pad block.    SmallVector<MCSymbol*, 1> BeginLabels; // Labels prior to invoke.    SmallVector<MCSymbol*, 1> EndLabels;   // Labels after invoke. +  SmallVector<MCSymbol*, 1> ClauseLabels; // Labels for each clause.    MCSymbol *LandingPadLabel;             // Label at beginning of landing pad.    const Function *Personality;           // Personality function.    std::vector<int> TypeIds;              // List of type ids (filters negative) @@ -110,10 +111,6 @@ class MachineModuleInfo : public ImmutablePass {    /// by debug and exception handling consumers.    std::vector<MCCFIInstruction> FrameInstructions; -  /// CompactUnwindEncoding - If the target supports it, this is the compact -  /// unwind encoding. It replaces a function's CIE and FDE. -  uint32_t CompactUnwindEncoding; -    /// LandingPads - List of LandingPadInfo describing the landing pad    /// information in the current function.    std::vector<LandingPadInfo> LandingPads; @@ -131,7 +128,7 @@ class MachineModuleInfo : public ImmutablePass {    unsigned CurCallSite;    /// TypeInfos - List of C++ TypeInfo used in the current function. -  std::vector<const GlobalVariable *> TypeInfos; +  std::vector<const GlobalValue *> TypeInfos;    /// FilterIds - List of typeids encoding filters used in the current function.    std::vector<unsigned> FilterIds; @@ -165,13 +162,24 @@ class MachineModuleInfo : public ImmutablePass {    /// to _fltused on Windows targets.    bool UsesVAFloatArgument; +  /// UsesMorestackAddr - True if the module calls the __morestack function +  /// indirectly, as is required under the large code model on x86. This is used +  /// to emit a definition of a symbol, __morestack_addr, containing the +  /// address. See comments in lib/Target/X86/X86FrameLowering.cpp for more +  /// details. +  bool UsesMorestackAddr; +  public:    static char ID; // Pass identification, replacement for typeid    struct VariableDbgInfo { -    TrackingVH<MDNode> Var; +    TrackingMDNodeRef Var; +    TrackingMDNodeRef Expr;      unsigned Slot;      DebugLoc Loc; + +    VariableDbgInfo(MDNode *Var, MDNode *Expr, unsigned Slot, DebugLoc Loc) +        : Var(Var), Expr(Expr), Slot(Slot), Loc(Loc) {}    };    typedef SmallVector<VariableDbgInfo, 4> VariableDbgInfoMapTy;    VariableDbgInfoMapTy VariableDbgInfos; @@ -234,6 +242,14 @@ public:      UsesVAFloatArgument = b;    } +  bool usesMorestackAddr() const { +    return UsesMorestackAddr; +  } + +  void setUsesMorestackAddr(bool b) { +    UsesMorestackAddr = b; +  } +    /// \brief Returns a reference to a list of cfi instructions in the current    /// function's prologue.  Used to construct frame maps for debug and exception    /// handling comsumers. @@ -247,15 +263,6 @@ public:      return FrameInstructions.size() - 1;    } -  /// getCompactUnwindEncoding - Returns the compact unwind encoding for a -  /// function if the target supports the encoding. This encoding replaces a -  /// function's CIE and FDE. -  uint32_t getCompactUnwindEncoding() const { return CompactUnwindEncoding; } - -  /// setCompactUnwindEncoding - Set the compact unwind encoding for a function -  /// if the target supports the encoding. -  void setCompactUnwindEncoding(uint32_t Enc) { CompactUnwindEncoding = Enc; } -    /// getAddrLabelSymbol - Return the symbol to be used for the specified basic    /// block when its address is taken.  This cannot be its normal LBB label    /// because the block may be accessed outside its containing function. @@ -313,20 +320,25 @@ public:    /// addCatchTypeInfo - Provide the catch typeinfo for a landing pad.    ///    void addCatchTypeInfo(MachineBasicBlock *LandingPad, -                        ArrayRef<const GlobalVariable *> TyInfo); +                        ArrayRef<const GlobalValue *> TyInfo);    /// addFilterTypeInfo - Provide the filter typeinfo for a landing pad.    ///    void addFilterTypeInfo(MachineBasicBlock *LandingPad, -                         ArrayRef<const GlobalVariable *> TyInfo); +                         ArrayRef<const GlobalValue *> TyInfo);    /// addCleanup - Add a cleanup action for a landing pad.    ///    void addCleanup(MachineBasicBlock *LandingPad); +  /// Add a clause for a landing pad. Returns a new label for the clause. This +  /// is used by EH schemes that have more than one landing pad. In this case, +  /// each clause gets its own basic block. +  MCSymbol *addClauseForLandingPad(MachineBasicBlock *LandingPad); +    /// getTypeIDFor - Return the type id for the specified typeinfo.  This is    /// function wide. -  unsigned getTypeIDFor(const GlobalVariable *TI); +  unsigned getTypeIDFor(const GlobalValue *TI);    /// getFilterIDFor - Return the id of the filter encoded by TyIds.  This is    /// function wide. @@ -387,7 +399,7 @@ public:    /// getTypeInfos - Return a reference to the C++ typeinfo for the current    /// function. -  const std::vector<const GlobalVariable *> &getTypeInfos() const { +  const std::vector<const GlobalValue *> &getTypeInfos() const {      return TypeInfos;    } @@ -403,9 +415,9 @@ public:    /// setVariableDbgInfo - Collect information used to emit debugging    /// information of a variable. -  void setVariableDbgInfo(MDNode *N, unsigned Slot, DebugLoc Loc) { -    VariableDbgInfo Info = { N, Slot, Loc }; -    VariableDbgInfos.push_back(std::move(Info)); +  void setVariableDbgInfo(MDNode *Var, MDNode *Expr, unsigned Slot, +                          DebugLoc Loc) { +    VariableDbgInfos.emplace_back(Var, Expr, Slot, Loc);    }    VariableDbgInfoMapTy &getVariableDbgInfo() { return VariableDbgInfos; } | 
