Fix bugs in finegrainification
[oota-llvm.git] / lib / CodeGen / Passes.cpp
index 86f354eb32f43d066b82aaccec380b5900458f1e..bdcac4c6d12f9cb9fe9f63bc9fa8d1ce1639fae7 100644 (file)
@@ -1,4 +1,11 @@
-//===-- Passes.cpp - Target independent code generation passes -*- C++ -*-===//
+//===-- Passes.cpp - Target independent code generation passes ------------===//
+// 
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by the LLVM research group and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// 
+//===----------------------------------------------------------------------===//
 //
 // This file defines interfaces to access the target independent code
 // generation passes provided by the LLVM backend.
 
 #include "llvm/CodeGen/Passes.h"
 #include "Support/CommandLine.h"
+#include <iostream>
+using namespace llvm;
 
 namespace {
-  enum RegAllocName { simple, local };
+  enum RegAllocName { simple, local, linearscan };
 
   cl::opt<RegAllocName>
   RegAlloc("regalloc",
            cl::desc("Register allocator to use: (default = simple)"),
            cl::Prefix,
-           cl::values(clEnumVal(simple, "  simple register allocator"),
-                      clEnumVal(local,  "  local register allocator"),
+           cl::values(clEnumVal(simple,      "  simple register allocator"),
+                      clEnumVal(local,       "  local register allocator"),
+                      clEnumVal(linearscan,  "  linear-scan global register allocator"),
                       0),
            cl::init(local));
 }
 
-FunctionPass *createRegisterAllocator()
-{
+FunctionPass *llvm::createRegisterAllocator() {
   switch (RegAlloc) {
+  default:
+    std::cerr << "no register allocator selected";
+    abort();
   case simple:
     return createSimpleRegisterAllocator();
   case local:
     return createLocalRegisterAllocator();
-  default:
-    assert(0 && "no register allocator selected");
-    return 0; // not reached
+  case linearscan:
+    return createLinearScanRegisterAllocator();
   }
 }
+