LinkAllCodegenComponents.h revision 200581
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
18193323Sed#include "llvm/CodeGen/Passes.h"
19193323Sed#include "llvm/CodeGen/SchedulerRegistry.h"
20193323Sed#include "llvm/CodeGen/GCs.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
34193323Sed      (void) llvm::createDeadMachineInstructionElimPass();
35193323Sed
36193323Sed      (void) llvm::createLocalRegisterAllocator();
37193323Sed      (void) llvm::createLinearScanRegisterAllocator();
38193323Sed      (void) llvm::createPBQPRegisterAllocator();
39193323Sed
40193323Sed      (void) llvm::createSimpleRegisterCoalescer();
41193323Sed
42193323Sed      llvm::linkOcamlGC();
43193323Sed      llvm::linkShadowStackGC();
44193323Sed
45193323Sed      (void) llvm::createBURRListDAGScheduler(NULL, llvm::CodeGenOpt::Default);
46193323Sed      (void) llvm::createTDRRListDAGScheduler(NULL, llvm::CodeGenOpt::Default);
47193323Sed      (void) llvm::createTDListDAGScheduler(NULL, llvm::CodeGenOpt::Default);
48193323Sed      (void) llvm::createFastDAGScheduler(NULL, llvm::CodeGenOpt::Default);
49193323Sed      (void) llvm::createDefaultScheduler(NULL, llvm::CodeGenOpt::Default);
50193323Sed
51193323Sed    }
52193323Sed  } ForceCodegenLinking; // Force link by creating a global definition.
53193323Sed}
54193323Sed
55193323Sed#endif
56