24 "regalloc-enable-priority-advisor",
cl::Hidden,
25 cl::init(RegAllocPriorityAdvisorAnalysis::AdvisorMode::Default),
26 cl::desc(
"Enable regalloc advisor mode"),
28 clEnumValN(RegAllocPriorityAdvisorAnalysis::AdvisorMode::Default,
29 "default",
"Default"),
30 clEnumValN(RegAllocPriorityAdvisorAnalysis::AdvisorMode::Release,
31 "release",
"precompiled"),
32 clEnumValN(RegAllocPriorityAdvisorAnalysis::AdvisorMode::Development,
33 "development",
"for training"),
35 RegAllocPriorityAdvisorAnalysis::AdvisorMode::Dummy,
"dummy",
36 "prioritize low virtual register numbers for test and debug")));
40 "Regalloc priority policy",
false,
true)
43class DefaultPriorityAdvisorAnalysis final
46 DefaultPriorityAdvisorAnalysis(
bool NotAsRequested)
48 NotAsRequested(NotAsRequested) {}
60 std::unique_ptr<RegAllocPriorityAdvisor>
62 return std::make_unique<DefaultPriorityAdvisor>(
63 MF,
RA, &getAnalysis<SlotIndexesWrapperPass>().getSI());
67 M.getContext().emitError(
"Requested regalloc priority advisor analysis "
68 "could be created. Using default");
71 const bool NotAsRequested;
74class DummyPriorityAdvisorAnalysis final
77 DummyPriorityAdvisorAnalysis()
91 std::unique_ptr<RegAllocPriorityAdvisor>
93 return std::make_unique<DummyPriorityAdvisor>(
94 MF,
RA, &getAnalysis<SlotIndexesWrapperPass>().getSI());
103 case RegAllocPriorityAdvisorAnalysis::AdvisorMode::Default:
104 Ret =
new DefaultPriorityAdvisorAnalysis(
false);
106 case RegAllocPriorityAdvisorAnalysis::AdvisorMode::Dummy:
107 Ret =
new DummyPriorityAdvisorAnalysis();
109 case RegAllocPriorityAdvisorAnalysis::AdvisorMode::Development:
110#if defined(LLVM_HAVE_TFLITE)
114 case RegAllocPriorityAdvisorAnalysis::AdvisorMode::Release:
120 return new DefaultPriorityAdvisorAnalysis(
true);
123StringRef RegAllocPriorityAdvisorAnalysis::getPassName()
const {
126 return "Default Regalloc Priority Advisor";
128 return "Release mode Regalloc Priority Advisor";
130 return "Development mode Regalloc Priority Advisor";
132 return "Dummy Regalloc Priority Advisor";
140 :
RA(
RA), LIS(
RA.getLiveIntervals()), VRM(
RA.getVirtRegMap()),
141 MRI(&VRM->getRegInfo()),
TRI(MF.getSubtarget().getRegisterInfo()),
142 RegClassInfo(
RA.getRegClassInfo()), Indexes(Indexes),
143 RegClassPriorityTrumpsGlobalness(
144 RA.getRegClassPriorityTrumpsGlobalness()),
145 ReverseLocalAssignment(
RA.getReverseLocalAssignment()) {}
unsigned const MachineRegisterInfo * MRI
#define clEnumValN(ENUMVAL, FLAGNAME, DESC)
Module.h This file contains the declarations for the Module class.
unsigned const TargetRegisterInfo * TRI
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
static cl::opt< RegAllocPriorityAdvisorAnalysis::AdvisorMode > Mode("regalloc-enable-priority-advisor", cl::Hidden, cl::init(RegAllocPriorityAdvisorAnalysis::AdvisorMode::Default), cl::desc("Enable regalloc advisor mode"), cl::values(clEnumValN(RegAllocPriorityAdvisorAnalysis::AdvisorMode::Default, "default", "Default"), clEnumValN(RegAllocPriorityAdvisorAnalysis::AdvisorMode::Release, "release", "precompiled"), clEnumValN(RegAllocPriorityAdvisorAnalysis::AdvisorMode::Development, "development", "for training"), clEnumValN(RegAllocPriorityAdvisorAnalysis::AdvisorMode::Dummy, "dummy", "prioritize low virtual register numbers for test and debug")))
SI optimize exec mask operations pre RA
Represent the analysis usage information of a pass.
AnalysisUsage & addRequired()
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 ...
AdvisorMode getAdvisorMode() const
virtual std::unique_ptr< RegAllocPriorityAdvisor > getAdvisor(const MachineFunction &MF, const RAGreedy &RA)=0
Get an advisor for the given context (i.e. machine function, etc)
void getAnalysisUsage(AnalysisUsage &AU) const override
getAnalysisUsage - This function should be overriden by passes that need analysis information to do t...
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.
RegAllocPriorityAdvisorAnalysis * createReleaseModePriorityAdvisor()
RegAllocPriorityAdvisorAnalysis * createDevelopmentModePriorityAdvisor()
Pass * callDefaultCtor< RegAllocPriorityAdvisorAnalysis >()
Specialization for the API used by the analysis infrastructure to create an instance of the priority ...