LinkAllCodegenComponents.h revision c69d56f1154342a57c9bdd4c17a10333e3520127
14b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//===- llvm/Codegen/LinkAllCodegenComponents.h ------------------*- C++ -*-===//
24b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//
34b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//                      The LLVM Compiler Infrastructure
44b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//
54b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis// This file is distributed under the University of Illinois Open Source
64b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis// License. See LICENSE.TXT for details.
74b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//
84b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//===----------------------------------------------------------------------===//
94b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//
104b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis// This header file pulls in all codegen related passes for tools like lli and
114b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis// llc that need this functionality.
124b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//
134b562cf889bc59e1914dd2c5d9fbd7e7bfa1ad77Argyrios Kyrtzidis//===----------------------------------------------------------------------===//
140853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
150853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis#ifndef LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H
160853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis#define LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H
1731b87d8006d4863dd9b17e515ac720941efc38e3Daniel Dunbar
180853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis#include "llvm/CodeGen/Passes.h"
1936c4464ba6cfc2a63dc67c493ef2f5ab2aea09ccSteve Naroff#include "llvm/CodeGen/SchedulerRegistry.h"
20f96b524306ccfa623235d375deee79637bd38f29Steve Naroff#include "llvm/CodeGen/GCs.h"
210853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
22f772d1e2a5688572d07f42896a50ac57a4a41fe8Daniel Dunbarnamespace {
23f772d1e2a5688572d07f42896a50ac57a4a41fe8Daniel Dunbar  struct ForceCodegenLinking {
244db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor    ForceCodegenLinking() {
254db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor      // We must reference the passes in such a way that compilers will not
264db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor      // delete it all as dead code, even with whole program optimization,
274db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor      // yet is effectively a NO-OP. As the compiler isn't smart enough
284db64a461cb3442934afe43c83ed3f17f7c11c1dDouglas Gregor      // to know that getenv() never returns -1, this will do the job.
290853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis      if (std::getenv("bar") != (char*) -1)
300853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis        return;
31521bf9c529e653ab28896d027352d3e16e2672d5Daniel Dunbar
32521bf9c529e653ab28896d027352d3e16e2672d5Daniel Dunbar      (void) llvm::createDeadMachineInstructionElimPass();
33521bf9c529e653ab28896d027352d3e16e2672d5Daniel Dunbar
34521bf9c529e653ab28896d027352d3e16e2672d5Daniel Dunbar      (void) llvm::createSimpleRegisterAllocator();
35521bf9c529e653ab28896d027352d3e16e2672d5Daniel Dunbar      (void) llvm::createLocalRegisterAllocator();
36521bf9c529e653ab28896d027352d3e16e2672d5Daniel Dunbar      (void) llvm::createBigBlockRegisterAllocator();
37521bf9c529e653ab28896d027352d3e16e2672d5Daniel Dunbar      (void) llvm::createLinearScanRegisterAllocator();
38521bf9c529e653ab28896d027352d3e16e2672d5Daniel Dunbar      (void) llvm::createPBQPRegisterAllocator();
39521bf9c529e653ab28896d027352d3e16e2672d5Daniel Dunbar
40521bf9c529e653ab28896d027352d3e16e2672d5Daniel Dunbar      (void) llvm::createSimpleRegisterCoalescer();
410853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
42f96b524306ccfa623235d375deee79637bd38f29Steve Naroff      llvm::linkOcamlGC();
43f96b524306ccfa623235d375deee79637bd38f29Steve Naroff      llvm::linkShadowStackGC();
440853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
450853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis      (void) llvm::createBURRListDAGScheduler(NULL, false);
460853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis      (void) llvm::createTDRRListDAGScheduler(NULL, false);
4736c4464ba6cfc2a63dc67c493ef2f5ab2aea09ccSteve Naroff      (void) llvm::createTDListDAGScheduler(NULL, false);
4836c4464ba6cfc2a63dc67c493ef2f5ab2aea09ccSteve Naroff      (void) llvm::createFastDAGScheduler(NULL, false);
4931b87d8006d4863dd9b17e515ac720941efc38e3Daniel Dunbar      (void) llvm::createDefaultScheduler(NULL, false);
500853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis
510853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis    }
520853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis  } ForceCodegenLinking; // Force link by creating a global definition.
530853a02c3b04d96a3c432b883e403175c954cd81Argyrios Kyrtzidis}
54e19944c93961b7618f4f3f3185f698f46369ea54Steve Naroff
55f772d1e2a5688572d07f42896a50ac57a4a41fe8Daniel Dunbar#endif
567d1d49d2971b20a97b3c2a301470b9eaaa130137Douglas Gregor