LLVM 24.0.0git
PGOInstrumentation.h
Go to the documentation of this file.
1//===- Transforms/Instrumentation/PGOInstrumentation.h ----------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9/// \file
10/// This file provides the interface for IR based instrumentation passes (
11/// (profile-gen, and profile-use).
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_TRANSFORMS_INSTRUMENTATION_PGOINSTRUMENTATION_H
16#define LLVM_TRANSFORMS_INSTRUMENTATION_PGOINSTRUMENTATION_H
17
18#include "llvm/ADT/ArrayRef.h"
20#include "llvm/IR/PassManager.h"
24#include <cstdint>
25#include <string>
26
27namespace llvm {
28
29class Function;
30class Instruction;
31class Module;
33
34/// The instrumentation (profile-instr-gen) pass for IR based PGO.
35// We use this pass to create COMDAT profile variables for context
36// sensitive PGO (CSPGO). The reason to have a pass for this is CSPGO
37// can be run after LTO/ThinLTO linking. Lld linker needs to see
38// all the COMDAT variables before linking. So we have this pass
39// always run before linking for CSPGO.
41 : public OptionalPassInfoMixin<PGOInstrumentationGenCreateVar> {
42public:
43 PGOInstrumentationGenCreateVar(std::string CSInstrName = "",
44 bool Sampling = false)
45 : CSInstrName(CSInstrName), ProfileSampling(Sampling) {}
47
48private:
49 std::string CSInstrName;
50 bool ProfileSampling;
51};
52
54/// The instrumentation (profile-instr-gen) pass for IR based PGO.
56 : public OptionalPassInfoMixin<PGOInstrumentationGen> {
57public:
59 PGOInstrumentationType InstrumentationType = PGOInstrumentationType ::FDO)
60 : InstrumentationType(InstrumentationType) {}
62
63private:
64 // If this is a context sensitive instrumentation.
65 const PGOInstrumentationType InstrumentationType;
66};
67
68/// The profile annotation (profile-instr-use) pass for IR based PGO.
70 : public OptionalPassInfoMixin<PGOInstrumentationUse> {
71public:
73 PGOInstrumentationUse(std::string Filename = "",
74 std::string RemappingFilename = "", bool IsCS = false,
76
78
79private:
80 std::string ProfileFileName;
81 std::string ProfileRemappingFileName;
82 // If this is a context sensitive instrumentation.
83 bool IsCS;
85};
86
87/// The indirect function call promotion pass.
89 : public OptionalPassInfoMixin<PGOIndirectCallPromotion> {
90public:
91 /// \p ImportSummary is the combined summary index of a ThinLTO backend
92 /// compile, if any. When present, promotion to a function that is only
93 /// declared in the module requires a summary for the target in the index
94 /// that indicates it is live (see -icp-allow-decls).
95 PGOIndirectCallPromotion(bool IsInLTO = false, bool SamplePGO = false,
96 const ModuleSummaryIndex *ImportSummary = nullptr)
97 : InLTO(IsInLTO), SamplePGO(SamplePGO), ImportSummary(ImportSummary) {}
98
100
101private:
102 bool InLTO;
103 bool SamplePGO;
104 const ModuleSummaryIndex *ImportSummary;
105};
106
107/// The profile size based optimization pass for memory intrinsics.
108class PGOMemOPSizeOpt : public OptionalPassInfoMixin<PGOMemOPSizeOpt> {
109public:
110 PGOMemOPSizeOpt() = default;
111
113};
114
116 uint64_t MaxCount);
117
120
121/// Return the value of -pgo-instrument-cold-function-only in LibraryOptions.
123 const cl::LibraryOptionsContext &LibraryOptions);
124
125} // end namespace llvm
126
127#endif // LLVM_TRANSFORMS_INSTRUMENTATION_PGOINSTRUMENTATION_H
uint64_t uint64_t
#define LLVM_ABI
Definition Compiler.h:211
This header defines various interfaces for pass management in LLVM.
This file defines the RefCountedBase, ThreadSafeRefCountedBase, and IntrusiveRefCntPtr classes.
#define F(x, y, z)
Definition MD5.cpp:54
static constexpr StringLiteral Filename
ModuleAnalysisManager MAM
Defines the virtual file system interface vfs::FileSystem.
Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
A smart pointer to a reference-counted object that inherits from RefCountedBase or ThreadSafeRefCount...
Class to hold module path string table and global value map, and encapsulate methods for operating on...
A Module instance is used to store all the information related to an LLVM module.
Definition Module.h:68
LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
PGOIndirectCallPromotion(bool IsInLTO=false, bool SamplePGO=false, const ModuleSummaryIndex *ImportSummary=nullptr)
ImportSummary is the combined summary index of a ThinLTO backend compile, if any.
PGOInstrumentationGenCreateVar(std::string CSInstrName="", bool Sampling=false)
LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
PGOInstrumentationGen(PGOInstrumentationType InstrumentationType=PGOInstrumentationType ::FDO)
LLVM_ABI PGOInstrumentationUse(std::string Filename="", std::string RemappingFilename="", bool IsCS=false, IntrusiveRefCntPtr< vfs::FileSystem > FS=nullptr)
LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
LLVM_ABI PreservedAnalyses run(Function &F, FunctionAnalysisManager &MAM)
A set of analyses that are preserved following a run of a transformation pass.
Definition Analysis.h:112
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI void setIrrLoopHeaderMetadata(Module *M, Instruction *TI, uint64_t Count)
LLVM_ABI void setProfMetadata(Instruction *TI, ArrayRef< uint64_t > EdgeCounts, uint64_t MaxCount)
RelativeUniformCounterPtr ValuesPtrExpr VTableAddr Count
Definition InstrProf.h:145
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
LLVM_ABI bool isPGOInstrumentColdFunctionOnly(const cl::LibraryOptionsContext &LibraryOptions)
Return the value of -pgo-instrument-cold-function-only in LibraryOptions.
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Definition MIRParser.h:39
A CRTP mix-in for passes that can be skipped.