24 "regalloc-enable-priority-advisor",
cl::Hidden,
25 cl::init(RegAllocPriorityAdvisorProvider::AdvisorMode::Default),
26 cl::desc(
"Enable regalloc advisor mode"),
28 clEnumValN(RegAllocPriorityAdvisorProvider::AdvisorMode::Default,
29 "default",
"Default"),
30 clEnumValN(RegAllocPriorityAdvisorProvider::AdvisorMode::Release,
31 "release",
"precompiled"),
32 clEnumValN(RegAllocPriorityAdvisorProvider::AdvisorMode::Development,
33 "development",
"for training"),
35 RegAllocPriorityAdvisorProvider::AdvisorMode::Dummy,
"dummy",
36 "prioritize low virtual register numbers for test and debug")));
40 "Regalloc priority policy",
false,
true)
44class DefaultPriorityAdvisorProvider final
47 DefaultPriorityAdvisorProvider(
bool NotAsRequested,
LLVMContext &Ctx)
50 Ctx.
emitError(
"Requested regalloc priority advisor analysis "
51 "could be created. Using default");
59 std::unique_ptr<RegAllocPriorityAdvisor>
62 return std::make_unique<DefaultPriorityAdvisor>(MF,
RA, &SI);
66class DummyPriorityAdvisorProvider final
69 DummyPriorityAdvisorProvider()
76 std::unique_ptr<RegAllocPriorityAdvisor>
79 return std::make_unique<DummyPriorityAdvisor>(MF,
RA, &SI);
83class DefaultPriorityAdvisorAnalysisLegacy final
86 DefaultPriorityAdvisorAnalysisLegacy(
bool NotAsRequested)
88 NotAsRequested(NotAsRequested) {}
92 return R->getAdvisorMode() == AdvisorMode::Default;
103 new DefaultPriorityAdvisorProvider(NotAsRequested, M.getContext()));
107 const bool NotAsRequested;
110class DummyPriorityAdvisorAnalysis final
114 DummyPriorityAdvisorAnalysis()
119 return R->getAdvisorMode() == AdvisorMode::Dummy;
129 Provider.reset(
new DummyPriorityAdvisorProvider());
136void RegAllocPriorityAdvisorAnalysis::initializeProvider(
LLVMContext &Ctx) {
141 Provider.reset(
new DummyPriorityAdvisorProvider());
145 new DefaultPriorityAdvisorProvider(
false, Ctx));
148#if defined(LLVM_HAVE_TFLITE)
152 new DefaultPriorityAdvisorProvider(
true, Ctx));
169 return Result{Provider.get()};
177 Ret =
new DefaultPriorityAdvisorAnalysisLegacy(
false);
180#if defined(LLVM_HAVE_TFLITE)
188 Ret =
new DummyPriorityAdvisorAnalysis();
193 return new DefaultPriorityAdvisorAnalysisLegacy(
true);
196StringRef RegAllocPriorityAdvisorAnalysisLegacy::getPassName()
const {
198 case AdvisorMode::Default:
199 return "Default Regalloc Priority Advisor";
200 case AdvisorMode::Release:
201 return "Release mode Regalloc Priority Advisor";
202 case AdvisorMode::Development:
203 return "Development mode Regalloc Priority Advisor";
204 case AdvisorMode::Dummy:
205 return "Dummy Regalloc Priority Advisor";
213 :
RA(
RA), LIS(
RA.getLiveIntervals()), VRM(
RA.getVirtRegMap()),
214 MRI(&VRM->getRegInfo()),
TRI(MF.getSubtarget().getRegisterInfo()),
215 RegClassInfo(
RA.getRegClassInfo()), Indexes(Indexes),
216 RegClassPriorityTrumpsGlobalness(
217 RA.getRegClassPriorityTrumpsGlobalness()),
218 ReverseLocalAssignment(
RA.getReverseLocalAssignment()) {}
unsigned const MachineRegisterInfo * MRI
#define clEnumValN(ENUMVAL, FLAGNAME, DESC)
Module.h This file contains the declarations for the Module class.
Register const TargetRegisterInfo * TRI
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
static cl::opt< RegAllocPriorityAdvisorProvider::AdvisorMode > Mode("regalloc-enable-priority-advisor", cl::Hidden, cl::init(RegAllocPriorityAdvisorProvider::AdvisorMode::Default), cl::desc("Enable regalloc advisor mode"), cl::values(clEnumValN(RegAllocPriorityAdvisorProvider::AdvisorMode::Default, "default", "Default"), clEnumValN(RegAllocPriorityAdvisorProvider::AdvisorMode::Release, "release", "precompiled"), clEnumValN(RegAllocPriorityAdvisorProvider::AdvisorMode::Development, "development", "for training"), clEnumValN(RegAllocPriorityAdvisorProvider::AdvisorMode::Dummy, "dummy", "prioritize low virtual register numbers for test and debug")))
SI optimize exec mask operations pre RA
A container for analyses that lazily runs them and caches their results.
Represent the analysis usage information of a pass.
AnalysisUsage & addRequired()
LLVMContext & getContext() const
getContext - Return a reference to the LLVMContext associated with this function.
This is an important class for using LLVM in a threaded context.
LLVM_ABI void emitError(const Instruction *I, const Twine &ErrorStr)
emitError - Emit an error message to the currently installed error handler with optional location inf...
Function & getFunction()
Return the LLVM function that this machine code represents.
A Module instance is used to store all the information related to an LLVM module.
Pass interface - Implemented by all 'passes'.
virtual bool doInitialization(Module &)
doInitialization - Virtual method overridden by subclasses to do any necessary initialization before ...
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - This function should be overriden by passes that need analysis information to do t...
AdvisorMode getAdvisorMode() const
Result run(MachineFunction &MF, MachineFunctionAnalysisManager &MFAM)
Common provider for getting the priority advisor and logging rewards.
virtual std::unique_ptr< RegAllocPriorityAdvisor > getAdvisor(const MachineFunction &MF, const RAGreedy &RA, SlotIndexes &SI)=0
RegAllocPriorityAdvisor(const RegAllocPriorityAdvisor &)=delete
StringRef - Represent a constant reference to a string, i.e.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
ValuesClass values(OptsTy... Options)
Helper to build a ValuesClass by forwarding a variable number of arguments as an initializer list to ...
initializer< Ty > init(const Ty &Val)
This is an optimization pass for GlobalISel generic memory operations.
RegAllocPriorityAdvisorAnalysisLegacy * createReleaseModePriorityAdvisorAnalysis()
RegAllocPriorityAdvisorAnalysisLegacy * createDevelopmentModePriorityAdvisorAnalysis()
Pass * callDefaultCtor< RegAllocPriorityAdvisorAnalysisLegacy >()
Specialization for the API used by the analysis infrastructure to create an instance of the priority ...
LLVM_ATTRIBUTE_RETURNS_NONNULL RegAllocPriorityAdvisorProvider * createDevelopmentModePriorityAdvisorProvider(LLVMContext &Ctx)
LLVM_ATTRIBUTE_RETURNS_NONNULL RegAllocPriorityAdvisorProvider * createReleaseModePriorityAdvisorProvider()
A special type used by analysis passes to provide an address that identifies that particular analysis...