Passes.cpp revision 221345
1117397Skan//===-- Passes.cpp - Target independent code generation passes ------------===// 2117397Skan// 3117397Skan// The LLVM Compiler Infrastructure 4117397Skan// 5117397Skan// This file is distributed under the University of Illinois Open Source 6117397Skan// License. See LICENSE.TXT for details. 7117397Skan// 8117397Skan//===----------------------------------------------------------------------===// 9117397Skan// 10117397Skan// This file defines interfaces to access the target independent code 11117397Skan// generation passes provided by the LLVM backend. 12117397Skan// 13117397Skan//===---------------------------------------------------------------------===// 14117397Skan 15117397Skan#include "llvm/CodeGen/RegAllocRegistry.h" 16117397Skan#include "llvm/CodeGen/Passes.h" 17117397Skan 18169691Skanusing namespace llvm; 19117397Skan 20117397Skan//===---------------------------------------------------------------------===// 21117397Skan/// 22117397Skan/// RegisterRegAlloc class - Track the registration of register allocators. 23117397Skan/// 24117397Skan//===---------------------------------------------------------------------===// 25117397SkanMachinePassRegistry RegisterRegAlloc::Registry; 26117397Skan 27117397Skanstatic FunctionPass *createDefaultRegisterAllocator() { return 0; } 28117397Skanstatic RegisterRegAlloc 29117397SkandefaultRegAlloc("default", 30169691Skan "pick register allocator based on -O option", 31169691Skan createDefaultRegisterAllocator); 32169691Skan 33169691Skan//===---------------------------------------------------------------------===// 34169691Skan/// 35117397Skan/// RegAlloc command line options. 36117397Skan/// 37117397Skan//===---------------------------------------------------------------------===// 38117397Skanstatic cl::opt<RegisterRegAlloc::FunctionPassCtor, false, 39117397Skan RegisterPassParser<RegisterRegAlloc> > 40117397SkanRegAlloc("regalloc", 41117397Skan cl::init(&createDefaultRegisterAllocator), 42117397Skan cl::desc("Register allocator to use")); 43117397Skan 44117397Skan 45117397Skan//===---------------------------------------------------------------------===// 46117397Skan/// 47132720Skan/// createRegisterAllocator - choose the appropriate register allocator. 48117397Skan/// 49117397Skan//===---------------------------------------------------------------------===// 50132720SkanFunctionPass *llvm::createRegisterAllocator(CodeGenOpt::Level OptLevel) { 51132720Skan RegisterRegAlloc::FunctionPassCtor Ctor = RegisterRegAlloc::getDefault(); 52132720Skan 53132720Skan if (!Ctor) { 54132720Skan Ctor = RegAlloc; 55132720Skan RegisterRegAlloc::setDefault(RegAlloc); 56117397Skan } 57117397Skan 58132720Skan // This forces linking of the linear scan register allocator, 59117397Skan // so -regalloc=linearscan still works in clang. 60117397Skan if (Ctor == createLinearScanRegisterAllocator) 61132720Skan return createLinearScanRegisterAllocator(); 62132720Skan 63132720Skan if (Ctor != createDefaultRegisterAllocator) 64132720Skan return Ctor(); 65132720Skan 66132720Skan // When the 'default' allocator is requested, pick one based on OptLevel. 67117397Skan switch (OptLevel) { 68117397Skan case CodeGenOpt::None: 69117397Skan return createFastRegisterAllocator(); 70117397Skan default: 71117397Skan return createGreedyRegisterAllocator(); 72117397Skan } 73117397Skan} 74117397Skan