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