Passes.cpp revision b8edf61fa9f558ccd68b4b5ac970e3d403d870ea
1//===-- Passes.cpp - Target independent code generation passes ------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file was developed by the LLVM research group and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines interfaces to access the target independent code
11// generation passes provided by the LLVM backend.
12//
13//===---------------------------------------------------------------------===//
14
15#include "llvm/CodeGen/Passes.h"
16#include "Support/CommandLine.h"
17#include <iostream>
18using namespace llvm;
19
20namespace {
21  enum RegAllocName { simple, local, linearscan };
22
23  cl::opt<RegAllocName>
24  RegAlloc("regalloc",
25           cl::desc("Register allocator to use: (default = simple)"),
26           cl::Prefix,
27           cl::values(clEnumVal(simple,      "  simple register allocator"),
28                      clEnumVal(local,       "  local register allocator"),
29                      clEnumVal(linearscan,  "  linear scan register allocator (experimental)"),
30                      clEnumValEnd),
31           cl::init(local));
32}
33
34FunctionPass *llvm::createRegisterAllocator() {
35  switch (RegAlloc) {
36  default:
37    std::cerr << "no register allocator selected";
38    abort();
39  case simple:
40    return createSimpleRegisterAllocator();
41  case local:
42    return createLocalRegisterAllocator();
43  case linearscan:
44    return createLinearScanRegisterAllocator();
45  }
46}
47
48