LinkAllCodegenComponents.h revision 00207237ddfffe93b275914d086a0c7da1bbf63b
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 36c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey (void) llvm::createLocalRegisterAllocator(); 3700207237ddfffe93b275914d086a0c7da1bbf63bJakob Stoklund Olesen (void) llvm::createFastRegisterAllocator(); 38c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey (void) llvm::createLinearScanRegisterAllocator(); 39b1290a6cc40f7caa0351450ce7021a0d48b5f2c0Evan Cheng (void) llvm::createPBQPRegisterAllocator(); 402c17c4d8d9f232f0329786ad9abee976bc0f3d27David Greene 412c17c4d8d9f232f0329786ad9abee976bc0f3d27David Greene (void) llvm::createSimpleRegisterCoalescer(); 42c6a0a117a63b22ac8f4ae1aaa16a4a4fb57a45f1Jim Laskey 435eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen llvm::linkOcamlGC(); 445eca075b74d62c621b160aa216b4cd50829a2cc7Gordon Henriksen llvm::linkShadowStackGC(); 458fa89291774a29ee30adb9d0fd01655c84eaac13Gordon Henriksen 4698a366d547772010e94609e4584489b3e5ce0043Bill Wendling (void) llvm::createBURRListDAGScheduler(NULL, llvm::CodeGenOpt::Default); 4798a366d547772010e94609e4584489b3e5ce0043Bill Wendling (void) llvm::createTDRRListDAGScheduler(NULL, llvm::CodeGenOpt::Default); 48187361b056823df4ff292561fe47468dad956872Bill Wendling (void) llvm::createSourceListDAGScheduler(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