summaryrefslogtreecommitdiffstats
path: root/llvm/include/llvm/IR/ModuleSummaryIndex.h
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/include/llvm/IR/ModuleSummaryIndex.h')
-rw-r--r--llvm/include/llvm/IR/ModuleSummaryIndex.h30
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
OpenPOWER on IntegriCloud