]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm/Transforms/Instrumentation/PGOInstrumentation.h
MFC r343601:
[FreeBSD/FreeBSD.git] / contrib / llvm / include / llvm / Transforms / Instrumentation / PGOInstrumentation.h
1 //===- Transforms/Instrumentation/PGOInstrumentation.h ----------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 /// \file
11 /// This file provides the interface for IR based instrumentation passes (
12 /// (profile-gen, and profile-use).
13 //
14 //===----------------------------------------------------------------------===//
15
16 #ifndef LLVM_TRANSFORMS_PGOINSTRUMENTATION_H
17 #define LLVM_TRANSFORMS_PGOINSTRUMENTATION_H
18
19 #include "llvm/ADT/ArrayRef.h"
20 #include "llvm/IR/PassManager.h"
21 #include <cstdint>
22 #include <string>
23
24 namespace llvm {
25
26 class Function;
27 class Instruction;
28 class Module;
29
30 /// The instrumentation (profile-instr-gen) pass for IR based PGO.
31 class PGOInstrumentationGen : public PassInfoMixin<PGOInstrumentationGen> {
32 public:
33   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
34 };
35
36 /// The profile annotation (profile-instr-use) pass for IR based PGO.
37 class PGOInstrumentationUse : public PassInfoMixin<PGOInstrumentationUse> {
38 public:
39   PGOInstrumentationUse(std::string Filename = "");
40
41   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
42
43 private:
44   std::string ProfileFileName;
45 };
46
47 /// The indirect function call promotion pass.
48 class PGOIndirectCallPromotion : public PassInfoMixin<PGOIndirectCallPromotion> {
49 public:
50   PGOIndirectCallPromotion(bool IsInLTO = false, bool SamplePGO = false)
51       : InLTO(IsInLTO), SamplePGO(SamplePGO) {}
52
53   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
54
55 private:
56   bool InLTO;
57   bool SamplePGO;
58 };
59
60 /// The profile size based optimization pass for memory intrinsics.
61 class PGOMemOPSizeOpt : public PassInfoMixin<PGOMemOPSizeOpt> {
62 public:
63   PGOMemOPSizeOpt() = default;
64
65   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
66 };
67
68 void setProfMetadata(Module *M, Instruction *TI, ArrayRef<uint64_t> EdgeCounts,
69                      uint64_t MaxCount);
70
71 void setIrrLoopHeaderMetadata(Module *M, Instruction *TI, uint64_t Count);
72
73 } // end namespace llvm
74
75 #endif // LLVM_TRANSFORMS_PGOINSTRUMENTATION_H