LinkAllCodegenComponents.h revision 193323
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"
22193323Sed
23193323Sednamespace {
24193323Sed  struct ForceCodegenLinking {
25193323Sed    ForceCodegenLinking() {
26193323Sed      // We must reference the passes in such a way that compilers will not
27193323Sed      // delete it all as dead code, even with whole program optimization,
28193323Sed      // yet is effectively a NO-OP. As the compiler isn't smart enough
29193323Sed      // to know that getenv() never returns -1, this will do the job.
30193323Sed      if (std::getenv("bar") != (char*) -1)
31193323Sed        return;
32193323Sed
33193323Sed      (void) llvm::createDeadMachineInstructionElimPass();
34193323Sed
35193323Sed      (void) llvm::createSimpleRegisterAllocator();
36193323Sed      (void) llvm::createLocalRegisterAllocator();
37193323Sed      (void) llvm::createBigBlockRegisterAllocator();
38193323Sed      (void) llvm::createLinearScanRegisterAllocator();
39193323Sed      (void) llvm::createPBQPRegisterAllocator();
40193323Sed
41193323Sed      (void) llvm::createSimpleRegisterCoalescer();
42193323Sed
43193323Sed      llvm::linkOcamlGC();
44193323Sed      llvm::linkShadowStackGC();
45193323Sed
46193323Sed      (void) llvm::createBURRListDAGScheduler(NULL, llvm::CodeGenOpt::Default);
47193323Sed      (void) llvm::createTDRRListDAGScheduler(NULL, llvm::CodeGenOpt::Default);
48193323Sed      (void) llvm::createTDListDAGScheduler(NULL, llvm::CodeGenOpt::Default);
49193323Sed      (void) llvm::createFastDAGScheduler(NULL, llvm::CodeGenOpt::Default);
50193323Sed      (void) llvm::createDefaultScheduler(NULL, llvm::CodeGenOpt::Default);
51193323Sed
52193323Sed    }
53193323Sed  } ForceCodegenLinking; // Force link by creating a global definition.
54193323Sed}
55193323Sed
56193323Sed#endif
57