//===- Transforms/Instrumentation/PGOInstrumentation.h ----------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // /// \file /// This file provides the interface for IR based instrumentation passes ( /// (profile-gen, and profile-use). // //===----------------------------------------------------------------------===// #ifndef LLVM_TRANSFORMS_INSTRUMENTATION_PGOINSTRUMENTATION_H #define LLVM_TRANSFORMS_INSTRUMENTATION_PGOINSTRUMENTATION_H #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/IR/PassManager.h" #include "llvm/Support/CommandLine.h" #include <cstdint> #include <string> namespace llvm { extern cl::opt<bool> DebugInfoCorrelate; class Function; class Instruction; class Module; namespace vfs { class FileSystem; } // namespace vfs /// The instrumentation (profile-instr-gen) pass for IR based PGO. // We use this pass to create COMDAT profile variables for context // sensitive PGO (CSPGO). The reason to have a pass for this is CSPGO // can be run after LTO/ThinLTO linking. Lld linker needs to see // all the COMDAT variables before linking. So we have this pass // always run before linking for CSPGO. class PGOInstrumentationGenCreateVar : public PassInfoMixin<PGOInstrumentationGenCreateVar> { … }; enum class PGOInstrumentationType { … }; /// The instrumentation (profile-instr-gen) pass for IR based PGO. class PGOInstrumentationGen : public PassInfoMixin<PGOInstrumentationGen> { … }; /// The profile annotation (profile-instr-use) pass for IR based PGO. class PGOInstrumentationUse : public PassInfoMixin<PGOInstrumentationUse> { … }; /// The indirect function call promotion pass. class PGOIndirectCallPromotion : public PassInfoMixin<PGOIndirectCallPromotion> { … }; /// The profile size based optimization pass for memory intrinsics. class PGOMemOPSizeOpt : public PassInfoMixin<PGOMemOPSizeOpt> { … }; void setProfMetadata(Module *M, Instruction *TI, ArrayRef<uint64_t> EdgeCounts, uint64_t MaxCount); void setIrrLoopHeaderMetadata(Module *M, Instruction *TI, uint64_t Count); } // end namespace llvm #endif // LLVM_TRANSFORMS_INSTRUMENTATION_PGOINSTRUMENTATION_H