LinkAllCodegenComponents.h revision f70e7cc7a2871d498dbecbec2d1c3beb3da2af33
1c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey//===- llvm/Codegen/LinkAllCodegenComponents.h ------------------*- C++ -*-===//
2c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey//
3c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey//                      The LLVM Compiler Infrastructure
4c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey//
57ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// This file is distributed under the University of Illinois Open Source
67ed47a13356daed2a34cd2209a31f92552e3bdd8Chris Lattner// License. See LICENSE.TXT for details.
7c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey//
8c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey//===----------------------------------------------------------------------===//
9c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey//
10c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey// This header file pulls in all codegen related passes for tools like lli and
11c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey// llc that need this functionality.
12c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey//
13c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey//===----------------------------------------------------------------------===//
14c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey
15c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey#ifndef LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H
16c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey#define LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H
17c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey
18c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey#include "llvm/CodeGen/Passes.h"
19ad38b6e4e51bcda85a0ef3e8dbabde72ca3e008fDan Gohman#include "llvm/CodeGen/SchedulerRegistry.h"
205a29c9eed157af51a8d338b5a225b146881819e8Gordon Henriksen#include "llvm/CodeGen/GCs.h"
2198a366d547772010e94609e4584489b3e5ce0043Bill Wendling#include "llvm/Target/TargetMachine.h"
227896c9f436a4eda5ec15e882a7505ba482a2fcd0Chris Lattner#include <cstdlib>
23c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey
24c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskeynamespace {
25c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey  struct ForceCodegenLinking {
26c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey    ForceCodegenLinking() {
27c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey      // We must reference the passes in such a way that compilers will not
28c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey      // delete it all as dead code, even with whole program optimization,
29c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey      // yet is effectively a NO-OP. As the compiler isn't smart enough
30c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey      // to know that getenv() never returns -1, this will do the job.
31c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey      if (std::getenv("bar") != (char*) -1)
32c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey        return;
33c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey
34d3ead4329eaa46937245f5cc8402e749af2a37dcDan Gohman      (void) llvm::createDeadMachineInstructionElimPass();
35d3ead4329eaa46937245f5cc8402e749af2a37dcDan Gohman
3600207237ddfffe93b275914d086a0c7da1bbf63bJakob Stoklund Olesen      (void) llvm::createFastRegisterAllocator();
37c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey      (void) llvm::createLinearScanRegisterAllocator();
38f70e7cc7a2871d498dbecbec2d1c3beb3da2af33Lang Hames      (void) llvm::createDefaultPBQPRegisterAllocator();
392c17c4d8d9f232f0329786ad9abee976bc0f3d27David Greene
402c17c4d8d9f232f0329786ad9abee976bc0f3d27David Greene      (void) llvm::createSimpleRegisterCoalescer();
41c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey
425eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen      llvm::linkOcamlGC();
435eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen      llvm::linkShadowStackGC();
448fa89291774a29ee30adb9d0fd01655c84eaac13Gordon Henriksen
4598a366d547772010e94609e4584489b3e5ce0043Bill Wendling      (void) llvm::createBURRListDAGScheduler(NULL, llvm::CodeGenOpt::Default);
4698a366d547772010e94609e4584489b3e5ce0043Bill Wendling      (void) llvm::createTDRRListDAGScheduler(NULL, llvm::CodeGenOpt::Default);
47187361b056823df4ff292561fe47468dad956872Bill Wendling      (void) llvm::createSourceListDAGScheduler(NULL,llvm::CodeGenOpt::Default);
4815a16def6e70c8f7df1023da80ceb89887203b40Evan Cheng      (void) llvm::createHybridListDAGScheduler(NULL,llvm::CodeGenOpt::Default);
4998a366d547772010e94609e4584489b3e5ce0043Bill Wendling      (void) llvm::createTDListDAGScheduler(NULL, llvm::CodeGenOpt::Default);
5098a366d547772010e94609e4584489b3e5ce0043Bill Wendling      (void) llvm::createFastDAGScheduler(NULL, llvm::CodeGenOpt::Default);
5198a366d547772010e94609e4584489b3e5ce0043Bill Wendling      (void) llvm::createDefaultScheduler(NULL, llvm::CodeGenOpt::Default);
52c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey
53c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey    }
54c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey  } ForceCodegenLinking; // Force link by creating a global definition.
55c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey}
56c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey
579ff542f2cce5bf7bf3cf9f692cf3ec0690ad2b3bJim Laskey#endif
58