mirror of
https://github.com/opnsense/src.git
synced 2026-05-15 02:30:35 -04:00
This commit merges the latest LLVM sources from the vendor space. It also updates the build glue to match the new sources. Clang's version number is changed to match LLVM's, which means /usr/include/clang/2.0 has been renamed to /usr/include/clang/2.8. Obtained from: projects/clangbsd
68 lines
2.3 KiB
C++
68 lines
2.3 KiB
C++
//===-- Passes.cpp - Target independent code generation passes ------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file 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/RegAllocRegistry.h"
|
|
#include "llvm/CodeGen/Passes.h"
|
|
|
|
using namespace llvm;
|
|
|
|
//===---------------------------------------------------------------------===//
|
|
///
|
|
/// RegisterRegAlloc class - Track the registration of register allocators.
|
|
///
|
|
//===---------------------------------------------------------------------===//
|
|
MachinePassRegistry RegisterRegAlloc::Registry;
|
|
|
|
static FunctionPass *createDefaultRegisterAllocator() { return 0; }
|
|
static RegisterRegAlloc
|
|
defaultRegAlloc("default",
|
|
"pick register allocator based on -O option",
|
|
createDefaultRegisterAllocator);
|
|
|
|
//===---------------------------------------------------------------------===//
|
|
///
|
|
/// RegAlloc command line options.
|
|
///
|
|
//===---------------------------------------------------------------------===//
|
|
static cl::opt<RegisterRegAlloc::FunctionPassCtor, false,
|
|
RegisterPassParser<RegisterRegAlloc> >
|
|
RegAlloc("regalloc",
|
|
cl::init(&createDefaultRegisterAllocator),
|
|
cl::desc("Register allocator to use"));
|
|
|
|
|
|
//===---------------------------------------------------------------------===//
|
|
///
|
|
/// createRegisterAllocator - choose the appropriate register allocator.
|
|
///
|
|
//===---------------------------------------------------------------------===//
|
|
FunctionPass *llvm::createRegisterAllocator(CodeGenOpt::Level OptLevel) {
|
|
RegisterRegAlloc::FunctionPassCtor Ctor = RegisterRegAlloc::getDefault();
|
|
|
|
if (!Ctor) {
|
|
Ctor = RegAlloc;
|
|
RegisterRegAlloc::setDefault(RegAlloc);
|
|
}
|
|
|
|
if (Ctor != createDefaultRegisterAllocator)
|
|
return Ctor();
|
|
|
|
// When the 'default' allocator is requested, pick one based on OptLevel.
|
|
switch (OptLevel) {
|
|
case CodeGenOpt::None:
|
|
return createFastRegisterAllocator();
|
|
default:
|
|
return createLinearScanRegisterAllocator();
|
|
}
|
|
}
|