summaryrefslogtreecommitdiff
path: root/include/llvm/IR/FunctionInfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/IR/FunctionInfo.h')
-rw-r--r--include/llvm/IR/FunctionInfo.h241
1 files changed, 0 insertions, 241 deletions
diff --git a/include/llvm/IR/FunctionInfo.h b/include/llvm/IR/FunctionInfo.h
deleted file mode 100644
index eba088a61bc0e..0000000000000
--- a/include/llvm/IR/FunctionInfo.h
+++ /dev/null
@@ -1,241 +0,0 @@
-//===-- llvm/FunctionInfo.h - Function Info Index ---------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-/// @file
-/// FunctionInfo.h This file contains the declarations the classes that hold
-/// the function info index and summary.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_IR_FUNCTIONINFO_H
-#define LLVM_IR_FUNCTIONINFO_H
-
-#include "llvm/ADT/SmallString.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/IR/Module.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/raw_ostream.h"
-
-namespace llvm {
-
-/// \brief Function summary information to aid decisions and implementation of
-/// importing.
-///
-/// This is a separate class from FunctionInfo to enable lazy reading of this
-/// function summary information from the combined index file during imporing.
-class FunctionSummary {
-private:
- /// \brief Path of module containing function IR, used to locate module when
- /// importing this function.
- ///
- /// This is only used during parsing of the combined function index, or when
- /// parsing the per-module index for creation of the combined function index,
- /// not during writing of the per-module index which doesn't contain a
- /// module path string table.
- StringRef ModulePath;
-
- /// \brief Used to flag functions that have local linkage types and need to
- /// have module identifier appended before placing into the combined
- /// index, to disambiguate from other functions with the same name.
- ///
- /// This is only used in the per-module function index, as it is consumed
- /// while creating the combined index.
- bool IsLocalFunction;
-
- // The rest of the information is used to help decide whether importing
- // is likely to be profitable.
- // Other information will be added as the importing is tuned, such
- // as hotness (when profile available), and other function characteristics.
-
- /// Number of instructions (ignoring debug instructions, e.g.) computed
- /// during the initial compile step when the function index is first built.
- unsigned InstCount;
-
-public:
- /// Construct a summary object from summary data expected for all
- /// summary records.
- FunctionSummary(unsigned NumInsts) : InstCount(NumInsts) {}
-
- /// Set the path to the module containing this function, for use in
- /// the combined index.
- void setModulePath(StringRef ModPath) { ModulePath = ModPath; }
-
- /// Get the path to the module containing this function.
- StringRef modulePath() const { return ModulePath; }
-
- /// Record whether this is a local function in the per-module index.
- void setLocalFunction(bool IsLocal) { IsLocalFunction = IsLocal; }
-
- /// Check whether this was a local function, for use in creating
- /// the combined index.
- bool isLocalFunction() const { return IsLocalFunction; }
-
- /// Get the instruction count recorded for this function.
- unsigned instCount() const { return InstCount; }
-};
-
-/// \brief Class to hold pointer to function summary and information required
-/// for parsing it.
-///
-/// For the per-module index, this holds the bitcode offset
-/// of the corresponding function block. For the combined index,
-/// after parsing of the \a ValueSymbolTable, this initially
-/// holds the offset of the corresponding function summary bitcode
-/// record. After parsing the associated summary information from the summary
-/// block the \a FunctionSummary is populated and stored here.
-class FunctionInfo {
-private:
- /// Function summary information used to help make ThinLTO importing
- /// decisions.
- std::unique_ptr<FunctionSummary> Summary;
-
- /// \brief The bitcode offset corresponding to either the associated
- /// function's function body record, or its function summary record,
- /// depending on whether this is a per-module or combined index.
- ///
- /// This bitcode offset is written to or read from the associated
- /// \a ValueSymbolTable entry for the function.
- /// For the per-module index this holds the bitcode offset of the
- /// function's body record within bitcode module block in its module,
- /// which is used during lazy function parsing or ThinLTO importing.
- /// For the combined index this holds the offset of the corresponding
- /// function summary record, to enable associating the combined index
- /// VST records with the summary records.
- uint64_t BitcodeIndex;
-
-public:
- /// Constructor used during parsing of VST entries.
- FunctionInfo(uint64_t FuncOffset)
- : Summary(nullptr), BitcodeIndex(FuncOffset) {}
-
- /// Constructor used for per-module index bitcode writing.
- FunctionInfo(uint64_t FuncOffset,
- std::unique_ptr<FunctionSummary> FuncSummary)
- : Summary(std::move(FuncSummary)), BitcodeIndex(FuncOffset) {}
-
- /// Record the function summary information parsed out of the function
- /// summary block during parsing or combined index creation.
- void setFunctionSummary(std::unique_ptr<FunctionSummary> FuncSummary) {
- Summary = std::move(FuncSummary);
- }
-
- /// Get the function summary recorded for this function.
- FunctionSummary *functionSummary() const { return Summary.get(); }
-
- /// Get the bitcode index recorded for this function, depending on
- /// the index type.
- uint64_t bitcodeIndex() const { return BitcodeIndex; }
-
- /// Record the bitcode index for this function, depending on
- /// the index type.
- void setBitcodeIndex(uint64_t FuncOffset) { BitcodeIndex = FuncOffset; }
-};
-
-/// List of function info structures for a particular function name held
-/// in the FunctionMap. Requires a vector in the case of multiple
-/// COMDAT functions of the same name.
-typedef std::vector<std::unique_ptr<FunctionInfo>> FunctionInfoList;
-
-/// Map from function name to corresponding function info structures.
-typedef StringMap<FunctionInfoList> FunctionInfoMapTy;
-
-/// Type used for iterating through the function info map.
-typedef FunctionInfoMapTy::const_iterator const_funcinfo_iterator;
-typedef FunctionInfoMapTy::iterator funcinfo_iterator;
-
-/// String table to hold/own module path strings, which additionally holds the
-/// module ID assigned to each module during the plugin step. The StringMap
-/// makes a copy of and owns inserted strings.
-typedef StringMap<uint64_t> ModulePathStringTableTy;
-
-/// Class to hold module path string table and function map,
-/// and encapsulate methods for operating on them.
-class FunctionInfoIndex {
-private:
- /// Map from function name to list of function information instances
- /// for functions of that name (may be duplicates in the COMDAT case, e.g.).
- FunctionInfoMapTy FunctionMap;
-
- /// Holds strings for combined index, mapping to the corresponding module ID.
- ModulePathStringTableTy ModulePathStringTable;
-
-public:
- FunctionInfoIndex() = default;
-
- // Disable the copy constructor and assignment operators, so
- // no unexpected copying/moving occurs.
- FunctionInfoIndex(const FunctionInfoIndex &) = delete;
- void operator=(const FunctionInfoIndex &) = delete;
-
- funcinfo_iterator begin() { return FunctionMap.begin(); }
- const_funcinfo_iterator begin() const { return FunctionMap.begin(); }
- funcinfo_iterator end() { return FunctionMap.end(); }
- const_funcinfo_iterator end() const { return FunctionMap.end(); }
-
- /// Get the list of function info objects for a given function.
- const FunctionInfoList &getFunctionInfoList(StringRef FuncName) {
- return FunctionMap[FuncName];
- }
-
- /// Get the list of function info objects for a given function.
- const const_funcinfo_iterator findFunctionInfoList(StringRef FuncName) const {
- return FunctionMap.find(FuncName);
- }
-
- /// Add a function info for a function of the given name.
- void addFunctionInfo(StringRef FuncName, std::unique_ptr<FunctionInfo> Info) {
- FunctionMap[FuncName].push_back(std::move(Info));
- }
-
- /// Iterator to allow writer to walk through table during emission.
- iterator_range<StringMap<uint64_t>::const_iterator>
- modPathStringEntries() const {
- return llvm::make_range(ModulePathStringTable.begin(),
- ModulePathStringTable.end());
- }
-
- /// Get the module ID recorded for the given module path.
- uint64_t getModuleId(const StringRef ModPath) const {
- return ModulePathStringTable.lookup(ModPath);
- }
-
- /// Add the given per-module index into this function index/summary,
- /// assigning it the given module ID. Each module merged in should have
- /// a unique ID, necessary for consistent renaming of promoted
- /// static (local) variables.
- void mergeFrom(std::unique_ptr<FunctionInfoIndex> Other,
- uint64_t NextModuleId);
-
- /// Convenience method for creating a promoted global name
- /// for the given value name of a local, and its original module's ID.
- static std::string getGlobalNameForLocal(StringRef Name, uint64_t ModId) {
- SmallString<256> NewName(Name);
- NewName += ".llvm.";
- raw_svector_ostream(NewName) << ModId;
- return NewName.str();
- }
-
- /// Add a new module path, mapped to the given module Id, and return StringRef
- /// owned by string table map.
- StringRef addModulePath(StringRef ModPath, uint64_t ModId) {
- return ModulePathStringTable.insert(std::make_pair(ModPath, ModId))
- .first->first();
- }
-
- /// Check if the given Module has any functions available for exporting
- /// in the index. We consider any module present in the ModulePathStringTable
- /// to have exported functions.
- bool hasExportedFunctions(const Module &M) const {
- return ModulePathStringTable.count(M.getModuleIdentifier());
- }
-};
-
-} // End llvm namespace
-
-#endif