LinkAllCodegenComponents.h revision be8cc2a3dedeb7685f07e68cdc4b9502eb97eb2b
1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//===- llvm/Codegen/LinkAllCodegenComponents.h ------------------*- C++ -*-===// 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// The LLVM Compiler Infrastructure 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// This file is distributed under the University of Illinois Open Source 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// License. See LICENSE.TXT for details. 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//===----------------------------------------------------------------------===// 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// This header file pulls in all codegen related passes for tools like lli and 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// llc that need this functionality. 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//===----------------------------------------------------------------------===// 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifndef LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "llvm/CodeGen/Passes.h" 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "llvm/CodeGen/SchedulerRegistry.h" 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "llvm/CodeGen/GCs.h" 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace { 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver struct ForceCodegenLinking { 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ForceCodegenLinking() { 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // We must reference the passes in such a way that compilers will not 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // delete it all as dead code, even with whole program optimization, 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // yet is effectively a NO-OP. As the compiler isn't smart enough 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // to know that getenv() never returns -1, this will do the job. 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (std::getenv("bar") != (char*) -1) 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return; 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (void) llvm::createDeadMachineInstructionElimPass(); 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (void) llvm::createSimpleRegisterAllocator(); 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (void) llvm::createLocalRegisterAllocator(); 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (void) llvm::createBigBlockRegisterAllocator(); 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (void) llvm::createLinearScanRegisterAllocator(); 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (void) llvm::createPBQPRegisterAllocator(); 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (void) llvm::createSimpleRegisterCoalescer(); 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver llvm::linkOcamlGC(); 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver llvm::linkShadowStackGC(); 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (void) llvm::createBURRListDAGScheduler(NULL, 3); 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (void) llvm::createTDRRListDAGScheduler(NULL, 3); 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (void) llvm::createTDListDAGScheduler(NULL, 3); 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (void) llvm::createFastDAGScheduler(NULL, 3); 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver (void) llvm::createDefaultScheduler(NULL, 3); 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } ForceCodegenLinking; // Force link by creating a global definition. 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver