diff options
Diffstat (limited to 'llvm/include/llvm/IR/ModuleSummaryIndex.h')
-rw-r--r-- | llvm/include/llvm/IR/ModuleSummaryIndex.h | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/llvm/include/llvm/IR/ModuleSummaryIndex.h b/llvm/include/llvm/IR/ModuleSummaryIndex.h index 8f1a1d0e26d..b1579e9a821 100644 --- a/llvm/include/llvm/IR/ModuleSummaryIndex.h +++ b/llvm/include/llvm/IR/ModuleSummaryIndex.h @@ -93,7 +93,7 @@ struct ValueInfo { class GlobalValueSummary { public: /// \brief Sububclass discriminator (for dyn_cast<> et al.) - enum SummaryKind { FunctionKind, GlobalVarKind }; + enum SummaryKind { AliasKind, FunctionKind, GlobalVarKind }; private: /// Kind of summary for use in dyn_cast<> et al. @@ -164,6 +164,32 @@ public: const std::vector<ValueInfo> &refs() const { return RefEdgeList; } }; +/// \brief Alias summary information. +class AliasSummary : public GlobalValueSummary { + GlobalValueSummary *AliaseeSummary; + +public: + /// Summary constructors. + AliasSummary(GlobalValue::LinkageTypes Linkage) + : GlobalValueSummary(AliasKind, Linkage) {} + + /// Check if this is an alias summary. + static bool classof(const GlobalValueSummary *GVS) { + return GVS->getSummaryKind() == AliasKind; + } + + void setAliasee(GlobalValueSummary *Aliasee) { AliaseeSummary = Aliasee; } + + const GlobalValueSummary &getAliasee() const { + return const_cast<AliasSummary *>(this)->getAliasee(); + } + + GlobalValueSummary &getAliasee() { + assert(AliaseeSummary && "Unexpected missing aliasee summary"); + return *AliaseeSummary; + } +}; + /// \brief Function summary information to aid decisions and implementation of /// importing. class FunctionSummary : public GlobalValueSummary { @@ -439,7 +465,7 @@ public: /// (GUID -> Summary). void collectDefinedFunctionsForModule( StringRef ModulePath, - std::map<GlobalValue::GUID, FunctionSummary *> &FunctionInfoMap) const; + std::map<GlobalValue::GUID, GlobalValueSummary *> &FunctionInfoMap) const; }; } // End llvm namespace |