LinkAllCodegenComponents.h revision 344779
1193323Sed//===- llvm/Codegen/LinkAllCodegenComponents.h ------------------*- C++ -*-===//
2193323Sed//
3193323Sed//                      The LLVM Compiler Infrastructure
4193323Sed//
5193323Sed// This file is distributed under the University of Illinois Open Source
6193323Sed// License. See LICENSE.TXT for details.
7193323Sed//
8193323Sed//===----------------------------------------------------------------------===//
9193323Sed//
10193323Sed// This header file pulls in all codegen related passes for tools like lli and
11193323Sed// llc that need this functionality.
12193323Sed//
13193323Sed//===----------------------------------------------------------------------===//
14193323Sed
15193323Sed#ifndef LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H
16193323Sed#define LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H
17193323Sed
18344779Sdim#include "llvm/CodeGen/BuiltinGCs.h"
19193323Sed#include "llvm/CodeGen/Passes.h"
20193323Sed#include "llvm/CodeGen/SchedulerRegistry.h"
21193323Sed#include "llvm/Target/TargetMachine.h"
22200581Srdivacky#include <cstdlib>
23193323Sed
24193323Sednamespace {
25193323Sed  struct ForceCodegenLinking {
26193323Sed    ForceCodegenLinking() {
27193323Sed      // We must reference the passes in such a way that compilers will not
28193323Sed      // delete it all as dead code, even with whole program optimization,
29193323Sed      // yet is effectively a NO-OP. As the compiler isn't smart enough
30193323Sed      // to know that getenv() never returns -1, this will do the job.
31193323Sed      if (std::getenv("bar") != (char*) -1)
32193323Sed        return;
33193323Sed
34207618Srdivacky      (void) llvm::createFastRegisterAllocator();
35218893Sdim      (void) llvm::createBasicRegisterAllocator();
36218893Sdim      (void) llvm::createGreedyRegisterAllocator();
37218893Sdim      (void) llvm::createDefaultPBQPRegisterAllocator();
38193323Sed
39344779Sdim      llvm::linkAllBuiltinGCs();
40234353Sdim
41276479Sdim      (void) llvm::createBURRListDAGScheduler(nullptr,
42276479Sdim                                              llvm::CodeGenOpt::Default);
43276479Sdim      (void) llvm::createSourceListDAGScheduler(nullptr,
44276479Sdim                                                llvm::CodeGenOpt::Default);
45276479Sdim      (void) llvm::createHybridListDAGScheduler(nullptr,
46276479Sdim                                                llvm::CodeGenOpt::Default);
47276479Sdim      (void) llvm::createFastDAGScheduler(nullptr, llvm::CodeGenOpt::Default);
48276479Sdim      (void) llvm::createDefaultScheduler(nullptr, llvm::CodeGenOpt::Default);
49276479Sdim      (void) llvm::createVLIWDAGScheduler(nullptr, llvm::CodeGenOpt::Default);
50193323Sed
51193323Sed    }
52193323Sed  } ForceCodegenLinking; // Force link by creating a global definition.
53193323Sed}
54193323Sed
55193323Sed#endif
56