LinkAllCodegenComponents.h revision 210299
1183567Sstas//===- llvm/Codegen/LinkAllCodegenComponents.h ------------------*- C++ -*-===//
2183567Sstas//
3183567Sstas//                      The LLVM Compiler Infrastructure
4183567Sstas//
5183567Sstas// This file is distributed under the University of Illinois Open Source
6183567Sstas// License. See LICENSE.TXT for details.
7183567Sstas//
8183567Sstas//===----------------------------------------------------------------------===//
9183567Sstas//
10183567Sstas// This header file pulls in all codegen related passes for tools like lli and
11183567Sstas// llc that need this functionality.
12183567Sstas//
13183567Sstas//===----------------------------------------------------------------------===//
14183567Sstas
15183567Sstas#ifndef LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H
16183567Sstas#define LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H
17183567Sstas
18183567Sstas#include "llvm/CodeGen/Passes.h"
19183567Sstas#include "llvm/CodeGen/SchedulerRegistry.h"
20183567Sstas#include "llvm/CodeGen/GCs.h"
21183567Sstas#include "llvm/Target/TargetMachine.h"
22183567Sstas#include <cstdlib>
23183567Sstas
24183567Sstasnamespace {
25183567Sstas  struct ForceCodegenLinking {
26183567Sstas    ForceCodegenLinking() {
27183567Sstas      // We must reference the passes in such a way that compilers will not
28183567Sstas      // delete it all as dead code, even with whole program optimization,
29183567Sstas      // yet is effectively a NO-OP. As the compiler isn't smart enough
30183567Sstas      // to know that getenv() never returns -1, this will do the job.
31183567Sstas      if (std::getenv("bar") != (char*) -1)
32183567Sstas        return;
33183567Sstas
34183567Sstas      (void) llvm::createDeadMachineInstructionElimPass();
35183567Sstas
36183567Sstas      (void) llvm::createFastRegisterAllocator();
37183567Sstas      (void) llvm::createLinearScanRegisterAllocator();
38183567Sstas      (void) llvm::createPBQPRegisterAllocator();
39183567Sstas
40183567Sstas      (void) llvm::createSimpleRegisterCoalescer();
41183567Sstas
42183567Sstas      llvm::linkOcamlGC();
43183567Sstas      llvm::linkShadowStackGC();
44183567Sstas
45183567Sstas      (void) llvm::createBURRListDAGScheduler(NULL, llvm::CodeGenOpt::Default);
46183567Sstas      (void) llvm::createTDRRListDAGScheduler(NULL, llvm::CodeGenOpt::Default);
47183567Sstas      (void) llvm::createSourceListDAGScheduler(NULL,llvm::CodeGenOpt::Default);
48183567Sstas      (void) llvm::createHybridListDAGScheduler(NULL,llvm::CodeGenOpt::Default);
49183567Sstas      (void) llvm::createTDListDAGScheduler(NULL, llvm::CodeGenOpt::Default);
50183567Sstas      (void) llvm::createFastDAGScheduler(NULL, llvm::CodeGenOpt::Default);
51183567Sstas      (void) llvm::createDefaultScheduler(NULL, llvm::CodeGenOpt::Default);
52183567Sstas
53183567Sstas    }
54183567Sstas  } ForceCodegenLinking; // Force link by creating a global definition.
55183567Sstas}
56183567Sstas
57183567Sstas#endif
58183567Sstas