File indexing completed on 2026-05-10 08:44:40
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #ifndef LLVM_TRANSFORMS_IPO_MEMPROF_CONTEXT_DISAMBIGUATION_H
0016 #define LLVM_TRANSFORMS_IPO_MEMPROF_CONTEXT_DISAMBIGUATION_H
0017
0018 #include "llvm/Analysis/IndirectCallPromotionAnalysis.h"
0019 #include "llvm/IR/GlobalValue.h"
0020 #include "llvm/IR/ModuleSummaryIndex.h"
0021 #include "llvm/IR/PassManager.h"
0022 #include "llvm/Transforms/Utils/ValueMapper.h"
0023 #include <functional>
0024
0025 namespace llvm {
0026 class GlobalValueSummary;
0027 class Module;
0028 class OptimizationRemarkEmitter;
0029
0030 class MemProfContextDisambiguation
0031 : public PassInfoMixin<MemProfContextDisambiguation> {
0032
0033 bool processModule(
0034 Module &M,
0035 function_ref<OptimizationRemarkEmitter &(Function *)> OREGetter);
0036
0037
0038
0039 bool applyImport(Module &M);
0040
0041
0042 bool initializeIndirectCallPromotionInfo(Module &M);
0043
0044
0045
0046 struct ICallAnalysisData {
0047 CallBase *CB;
0048 std::vector<InstrProfValueData> CandidateProfileData;
0049 uint32_t NumCandidates;
0050 uint64_t TotalCount;
0051 size_t CallsiteInfoStartIndex;
0052 };
0053
0054
0055
0056
0057
0058
0059
0060
0061 unsigned recordICPInfo(CallBase *CB, ArrayRef<CallsiteInfo> AllCallsites,
0062 ArrayRef<CallsiteInfo>::iterator &SI,
0063 SmallVector<ICallAnalysisData> &ICallAnalysisInfo);
0064
0065
0066
0067 void performICP(Module &M, ArrayRef<CallsiteInfo> AllCallsites,
0068 ArrayRef<std::unique_ptr<ValueToValueMapTy>> VMaps,
0069 ArrayRef<ICallAnalysisData> ICallAnalysisInfo,
0070 OptimizationRemarkEmitter &ORE);
0071
0072
0073 const ModuleSummaryIndex *ImportSummary;
0074
0075
0076
0077 std::unique_ptr<ModuleSummaryIndex> ImportSummaryForTesting;
0078
0079
0080
0081 bool isSamplePGO;
0082
0083
0084
0085 std::unique_ptr<InstrProfSymtab> Symtab;
0086 std::unique_ptr<ICallPromotionAnalysis> ICallAnalysis;
0087
0088 public:
0089 MemProfContextDisambiguation(const ModuleSummaryIndex *Summary = nullptr,
0090 bool isSamplePGO = false);
0091
0092 PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
0093
0094 void run(ModuleSummaryIndex &Index,
0095 function_ref<bool(GlobalValue::GUID, const GlobalValueSummary *)>
0096 isPrevailing);
0097 };
0098 }
0099
0100 #endif