diff options
Diffstat (limited to 'lib/CodeGen/TargetPassConfig.cpp')
| -rw-r--r-- | lib/CodeGen/TargetPassConfig.cpp | 24 | 
1 files changed, 14 insertions, 10 deletions
diff --git a/lib/CodeGen/TargetPassConfig.cpp b/lib/CodeGen/TargetPassConfig.cpp index e6c5d8753b838..9724cb0745841 100644 --- a/lib/CodeGen/TargetPassConfig.cpp +++ b/lib/CodeGen/TargetPassConfig.cpp @@ -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  | 
