mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 11:02:59 +02:00
Make sure -optimize-regalloc=false is used correctly by user.
Don't allow -optimize-regalloc=false with -regalloc given for anything other than 'fast'. The other register allocators depend on the supporting passes added by addOptimizedRegAlloc(). Reviewers: Quentin Colombet, Matthias Braun https://reviews.llvm.org/D33181 llvm-svn: 303238
This commit is contained in:
parent
9bb8a6b59f
commit
3d4915edd2
@ -564,6 +564,14 @@ void TargetPassConfig::addISelPrepare() {
|
||||
addPass(createVerifierPass());
|
||||
}
|
||||
|
||||
/// -regalloc=... command line option.
|
||||
static FunctionPass *useDefaultRegisterAllocator() { return nullptr; }
|
||||
static cl::opt<RegisterRegAlloc::FunctionPassCtor, false,
|
||||
RegisterPassParser<RegisterRegAlloc> >
|
||||
RegAlloc("regalloc",
|
||||
cl::init(&useDefaultRegisterAllocator),
|
||||
cl::desc("Register allocator to use"));
|
||||
|
||||
/// Add the complete set of target-independent postISel code generator passes.
|
||||
///
|
||||
/// This can be read as the standard order of major LLVM CodeGen stages. Stages
|
||||
@ -625,8 +633,12 @@ void TargetPassConfig::addMachinePasses() {
|
||||
// including phi elimination and scheduling.
|
||||
if (getOptimizeRegAlloc())
|
||||
addOptimizedRegAlloc(createRegAllocPass(true));
|
||||
else
|
||||
else {
|
||||
if (RegAlloc != &useDefaultRegisterAllocator &&
|
||||
RegAlloc != &createFastRegisterAllocator)
|
||||
report_fatal_error("Must use fast (default) register allocator for unoptimized regalloc.");
|
||||
addFastRegAlloc(createRegAllocPass(false));
|
||||
}
|
||||
|
||||
// Run post-ra passes.
|
||||
addPostRegAlloc();
|
||||
@ -759,19 +771,12 @@ MachinePassRegistry RegisterRegAlloc::Registry;
|
||||
/// A dummy default pass factory indicates whether the register allocator is
|
||||
/// overridden on the command line.
|
||||
static llvm::once_flag InitializeDefaultRegisterAllocatorFlag;
|
||||
static FunctionPass *useDefaultRegisterAllocator() { return nullptr; }
|
||||
|
||||
static RegisterRegAlloc
|
||||
defaultRegAlloc("default",
|
||||
"pick register allocator based on -O option",
|
||||
useDefaultRegisterAllocator);
|
||||
|
||||
/// -regalloc=... command line option.
|
||||
static cl::opt<RegisterRegAlloc::FunctionPassCtor, false,
|
||||
RegisterPassParser<RegisterRegAlloc> >
|
||||
RegAlloc("regalloc",
|
||||
cl::init(&useDefaultRegisterAllocator),
|
||||
cl::desc("Register allocator to use"));
|
||||
|
||||
static void initializeDefaultRegisterAllocatorOnce() {
|
||||
RegisterRegAlloc::FunctionPassCtor Ctor = RegisterRegAlloc::getDefault();
|
||||
|
||||
@ -781,7 +786,6 @@ static void initializeDefaultRegisterAllocatorOnce() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// Instantiate the default register allocator pass for this target for either
|
||||
/// the optimized or unoptimized allocation path. This will be added to the pass
|
||||
/// manager by addFastRegAlloc in the unoptimized case or addOptimizedRegAlloc
|
||||
|
Loading…
Reference in New Issue
Block a user