diff options
Diffstat (limited to 'include/llvm/Transforms/IPO/WholeProgramDevirt.h')
| -rw-r--r-- | include/llvm/Transforms/IPO/WholeProgramDevirt.h | 26 | 
1 files changed, 26 insertions, 0 deletions
| diff --git a/include/llvm/Transforms/IPO/WholeProgramDevirt.h b/include/llvm/Transforms/IPO/WholeProgramDevirt.h index 509fcc867060..22435e4ed1e5 100644 --- a/include/llvm/Transforms/IPO/WholeProgramDevirt.h +++ b/include/llvm/Transforms/IPO/WholeProgramDevirt.h @@ -16,8 +16,10 @@  #include "llvm/IR/Module.h"  #include "llvm/IR/PassManager.h" +#include "llvm/Transforms/IPO/FunctionImport.h"  #include <cassert>  #include <cstdint> +#include <set>  #include <utility>  #include <vector> @@ -28,6 +30,7 @@ template <typename T> class MutableArrayRef;  class Function;  class GlobalVariable;  class ModuleSummaryIndex; +struct ValueInfo;  namespace wholeprogramdevirt { @@ -228,6 +231,29 @@ struct WholeProgramDevirtPass : public PassInfoMixin<WholeProgramDevirtPass> {    PreservedAnalyses run(Module &M, ModuleAnalysisManager &);  }; +struct VTableSlotSummary { +  StringRef TypeID; +  uint64_t ByteOffset; +}; + +/// Perform index-based whole program devirtualization on the \p Summary +/// index. Any devirtualized targets used by a type test in another module +/// are added to the \p ExportedGUIDs set. For any local devirtualized targets +/// only used within the defining module, the information necessary for +/// locating the corresponding WPD resolution is recorded for the ValueInfo +/// in case it is exported by cross module importing (in which case the +/// devirtualized target name will need adjustment). +void runWholeProgramDevirtOnIndex( +    ModuleSummaryIndex &Summary, std::set<GlobalValue::GUID> &ExportedGUIDs, +    std::map<ValueInfo, std::vector<VTableSlotSummary>> &LocalWPDTargetsMap); + +/// Call after cross-module importing to update the recorded single impl +/// devirt target names for any locals that were exported. +void updateIndexWPDForExports( +    ModuleSummaryIndex &Summary, +    function_ref<bool(StringRef, GlobalValue::GUID)> isExported, +    std::map<ValueInfo, std::vector<VTableSlotSummary>> &LocalWPDTargetsMap); +  } // end namespace llvm  #endif // LLVM_TRANSFORMS_IPO_WHOLEPROGRAMDEVIRT_H | 
