Viewing file: ReplayInlineAdvisor.h (2.93 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
//===- ReplayInlineAdvisor.h - Replay Inline Advisor interface -*- 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 // //===----------------------------------------------------------------------===// // #ifndef LLVM_ANALYSIS_REPLAYINLINEADVISOR_H #define LLVM_ANALYSIS_REPLAYINLINEADVISOR_H
#include "llvm/ADT/StringSet.h" #include "llvm/Analysis/InlineAdvisor.h"
namespace llvm { class CallBase; class Function; class LLVMContext; class Module;
struct CallSiteFormat { enum class Format : int { Line, LineColumn, LineDiscriminator, LineColumnDiscriminator };
bool outputColumn() const { return OutputFormat == Format::LineColumn || OutputFormat == Format::LineColumnDiscriminator; }
bool outputDiscriminator() const { return OutputFormat == Format::LineDiscriminator || OutputFormat == Format::LineColumnDiscriminator; }
Format OutputFormat; };
/// Replay Inliner Setup struct ReplayInlinerSettings { enum class Scope : int { Function, Module }; enum class Fallback : int { Original, AlwaysInline, NeverInline };
StringRef ReplayFile; Scope ReplayScope; Fallback ReplayFallback; CallSiteFormat ReplayFormat; };
/// Get call site location as a string with the given format std::string formatCallSiteLocation(DebugLoc DLoc, const CallSiteFormat &Format);
std::unique_ptr<InlineAdvisor> getReplayInlineAdvisor(Module &M, FunctionAnalysisManager &FAM, LLVMContext &Context, std::unique_ptr<InlineAdvisor> OriginalAdvisor, const ReplayInlinerSettings &ReplaySettings, bool EmitRemarks, InlineContext IC);
/// Replay inline advisor that uses optimization remarks from inlining of /// previous build to guide current inlining. This is useful for inliner tuning. class ReplayInlineAdvisor : public InlineAdvisor { public: ReplayInlineAdvisor(Module &M, FunctionAnalysisManager &FAM, LLVMContext &Context, std::unique_ptr<InlineAdvisor> OriginalAdvisor, const ReplayInlinerSettings &ReplaySettings, bool EmitRemarks, InlineContext IC); std::unique_ptr<InlineAdvice> getAdviceImpl(CallBase &CB) override; bool areReplayRemarksLoaded() const { return HasReplayRemarks; }
private: bool hasInlineAdvice(Function &F) const { return (ReplaySettings.ReplayScope == ReplayInlinerSettings::Scope::Module) || CallersToReplay.contains(F.getName()); } std::unique_ptr<InlineAdvisor> OriginalAdvisor; bool HasReplayRemarks = false; const ReplayInlinerSettings ReplaySettings; bool EmitRemarks = false;
StringMap<bool> InlineSitesFromRemarks; StringSet<> CallersToReplay; }; } // namespace llvm #endif // LLVM_ANALYSIS_REPLAYINLINEADVISOR_H
|