#pragma once #ifdef __GNUC__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-parameter" #endif //===----- MIRSampleProfile.h: SampleFDO Support in MIR ---*- 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 // //===----------------------------------------------------------------------===// // // This file contains the supoorting functions for machine level Sample FDO // loader. This is used in Flow Sensitive SampelFDO. // //===----------------------------------------------------------------------===// #ifndef LLVM_CODEGEN_MIRSAMPLEPROFILE_H #define LLVM_CODEGEN_MIRSAMPLEPROFILE_H #include "llvm/ADT/StringRef.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/Support/Discriminator.h" #include #include namespace llvm { class AnalysisUsage; class MachineBlockFrequencyInfo; class MachineFunction; class Module; using namespace sampleprof; class MIRProfileLoader; class MIRProfileLoaderPass : public MachineFunctionPass { MachineFunction *MF; std::string ProfileFileName; FSDiscriminatorPass P; unsigned LowBit; unsigned HighBit; public: static char ID; /// FS bits will only use the '1' bits in the Mask. MIRProfileLoaderPass(std::string FileName = "", std::string RemappingFileName = "", FSDiscriminatorPass P = FSDiscriminatorPass::Pass1); /// getMachineFunction - Return the last machine function computed. const MachineFunction *getMachineFunction() const { return MF; } StringRef getPassName() const override { return "SampleFDO loader in MIR"; } private: void init(MachineFunction &MF); bool runOnMachineFunction(MachineFunction &) override; bool doInitialization(Module &M) override; void getAnalysisUsage(AnalysisUsage &AU) const override; std::unique_ptr MIRSampleLoader; /// Hold the information of the basic block frequency. MachineBlockFrequencyInfo *MBFI; }; } // namespace llvm #endif // LLVM_CODEGEN_MIRSAMPLEPROFILE_H #ifdef __GNUC__ #pragma GCC diagnostic pop #endif