LLVM  16.0.0git
ReplayInlineAdvisor.h
Go to the documentation of this file.
1 //===- ReplayInlineAdvisor.h - Replay Inline Advisor interface -*- 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 #ifndef LLVM_ANALYSIS_REPLAYINLINEADVISOR_H
10 #define LLVM_ANALYSIS_REPLAYINLINEADVISOR_H
11 
12 #include "llvm/ADT/StringSet.h"
14 
15 namespace llvm {
16 class CallBase;
17 class Function;
18 class LLVMContext;
19 class Module;
20 
22  enum class Format : int {
23  Line,
24  LineColumn,
27  };
28 
29  bool outputColumn() const {
30  return OutputFormat == Format::LineColumn ||
32  }
33 
34  bool outputDiscriminator() const {
37  }
38 
40 };
41 
42 /// Replay Inliner Setup
44  enum class Scope : int { Function, Module };
46 
51 };
52 
53 /// Get call site location as a string with the given format
54 std::string formatCallSiteLocation(DebugLoc DLoc, const CallSiteFormat &Format);
55 
56 std::unique_ptr<InlineAdvisor>
59  std::unique_ptr<InlineAdvisor> OriginalAdvisor,
60  const ReplayInlinerSettings &ReplaySettings,
61  bool EmitRemarks, InlineContext IC);
62 
63 /// Replay inline advisor that uses optimization remarks from inlining of
64 /// previous build to guide current inlining. This is useful for inliner tuning.
66 public:
69  std::unique_ptr<InlineAdvisor> OriginalAdvisor,
70  const ReplayInlinerSettings &ReplaySettings,
71  bool EmitRemarks, InlineContext IC);
72  std::unique_ptr<InlineAdvice> getAdviceImpl(CallBase &CB) override;
73  bool areReplayRemarksLoaded() const { return HasReplayRemarks; }
74 
75 private:
76  bool hasInlineAdvice(Function &F) const {
77  return (ReplaySettings.ReplayScope ==
79  CallersToReplay.contains(F.getName());
80  }
81  std::unique_ptr<InlineAdvisor> OriginalAdvisor;
82  bool HasReplayRemarks = false;
83  const ReplayInlinerSettings ReplaySettings;
84  bool EmitRemarks = false;
85 
86  StringMap<bool> InlineSitesFromRemarks;
87  StringSet<> CallersToReplay;
88 };
89 } // namespace llvm
90 #endif // LLVM_ANALYSIS_REPLAYINLINEADVISOR_H
llvm::ReplayInlinerSettings::Scope
Scope
Definition: ReplayInlineAdvisor.h:44
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
llvm::ReplayInlinerSettings::ReplayFormat
CallSiteFormat ReplayFormat
Definition: ReplayInlineAdvisor.h:50
llvm::InlineAdvisor::M
Module & M
Definition: InlineAdvisor.h:208
llvm::Function
Definition: Function.h:60
llvm::ReplayInlineAdvisor::ReplayInlineAdvisor
ReplayInlineAdvisor(Module &M, FunctionAnalysisManager &FAM, LLVMContext &Context, std::unique_ptr< InlineAdvisor > OriginalAdvisor, const ReplayInlinerSettings &ReplaySettings, bool EmitRemarks, InlineContext IC)
Definition: ReplayInlineAdvisor.cpp:26
FAM
FunctionAnalysisManager FAM
Definition: PassBuilderBindings.cpp:59
llvm::CallSiteFormat::OutputFormat
Format OutputFormat
Definition: ReplayInlineAdvisor.h:39
llvm::CallSiteFormat::Format::LineDiscriminator
@ LineDiscriminator
llvm::ReplayInlinerSettings::Fallback::Original
@ Original
F
#define F(x, y, z)
Definition: MD5.cpp:55
Context
LLVMContext & Context
Definition: NVVMIntrRange.cpp:66
llvm::CallSiteFormat::outputColumn
bool outputColumn() const
Definition: ReplayInlineAdvisor.h:29
int
Clang compiles this i1 i64 store i64 i64 store i64 i64 store i64 i64 store i64 align Which gets codegen d xmm0 movaps rbp movaps rbp movaps rbp movaps rbp rbp rbp rbp rbp It would be better to have movq s of instead of the movaps s LLVM produces ret int
Definition: README.txt:536
llvm::StringSet::contains
bool contains(StringRef key) const
Check if the set contains the given key.
Definition: StringSet.h:51
InlineAdvisor.h
llvm::CallSiteFormat::Format::LineColumnDiscriminator
@ LineColumnDiscriminator
llvm::ReplayInlinerSettings::Fallback::NeverInline
@ NeverInline
llvm::CallSiteFormat::Format::LineColumn
@ LineColumn
llvm::InlineContext
Provides context on when an inline advisor is constructed in the pipeline (e.g., link phase,...
Definition: InlineAdvisor.h:58
llvm::formatCallSiteLocation
std::string formatCallSiteLocation(DebugLoc DLoc, const CallSiteFormat &Format)
Get call site location as a string with the given format.
Definition: InlineAdvisor.cpp:430
llvm::ReplayInlinerSettings::ReplayFile
StringRef ReplayFile
Definition: ReplayInlineAdvisor.h:47
llvm::ReplayInlineAdvisor::areReplayRemarksLoaded
bool areReplayRemarksLoaded() const
Definition: ReplayInlineAdvisor.h:73
llvm::LLVMContext
This is an important class for using LLVM in a threaded context.
Definition: LLVMContext.h:67
llvm::InlineAdvisor::IC
const Optional< InlineContext > IC
Definition: InlineAdvisor.h:210
llvm::ReplayInlinerSettings::ReplayScope
Scope ReplayScope
Definition: ReplayInlineAdvisor.h:48
llvm::ReplayInlinerSettings::Scope::Module
@ Module
llvm::Module
A Module instance is used to store all the information related to an LLVM module.
Definition: Module.h:65
llvm::CallSiteFormat::Format::Line
@ Line
llvm::ReplayInlinerSettings::ReplayFallback
Fallback ReplayFallback
Definition: ReplayInlineAdvisor.h:49
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
llvm::CallSiteFormat
Definition: ReplayInlineAdvisor.h:21
llvm::InlineAdvisor
Interface for deciding whether to inline a call site or not.
Definition: InlineAdvisor.h:163
llvm::ReplayInlineAdvisor
Replay inline advisor that uses optimization remarks from inlining of previous build to guide current...
Definition: ReplayInlineAdvisor.h:65
Module
Machine Check Debug Module
Definition: MachineCheckDebugify.cpp:122
StringSet.h
llvm::InlineAdvisor::FAM
FunctionAnalysisManager & FAM
Definition: InlineAdvisor.h:209
llvm::ReplayInlinerSettings::Scope::Function
@ Function
llvm::ReplayInlineAdvisor::getAdviceImpl
std::unique_ptr< InlineAdvice > getAdviceImpl(CallBase &CB) override
Definition: ReplayInlineAdvisor.cpp:93
llvm::CallBase
Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to callin...
Definition: InstrTypes.h:1174
llvm::AnalysisManager
A container for analyses that lazily runs them and caches their results.
Definition: InstructionSimplify.h:42
llvm::ReplayInlinerSettings::Fallback
Fallback
Definition: ReplayInlineAdvisor.h:45
llvm::DebugLoc
A debug info location.
Definition: DebugLoc.h:33
llvm::CallSiteFormat::Format
Format
Definition: ReplayInlineAdvisor.h:22
llvm::ReplayInlinerSettings::Fallback::AlwaysInline
@ AlwaysInline
llvm::CallSiteFormat::outputDiscriminator
bool outputDiscriminator() const
Definition: ReplayInlineAdvisor.h:34
llvm::ReplayInlinerSettings
Replay Inliner Setup.
Definition: ReplayInlineAdvisor.h:43
llvm::codeview::PublicSymFlags::Function
@ Function
llvm::getReplayInlineAdvisor
std::unique_ptr< InlineAdvisor > getReplayInlineAdvisor(Module &M, FunctionAnalysisManager &FAM, LLVMContext &Context, std::unique_ptr< InlineAdvisor > OriginalAdvisor, const ReplayInlinerSettings &ReplaySettings, bool EmitRemarks, InlineContext IC)
Definition: ReplayInlineAdvisor.cpp:80