1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===- llvm/Codegen/LinkAllCodegenComponents.h ------------------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This header file pulls in all codegen related passes for tools like lli and
- // llc that need this functionality.
- //
- //===----------------------------------------------------------------------===//
- #ifndef LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H
- #define LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H
- #include "llvm/IR/BuiltinGCs.h"
- #include "llvm/CodeGen/Passes.h"
- #include "llvm/CodeGen/SchedulerRegistry.h"
- #include "llvm/Target/TargetMachine.h"
- #include <cstdlib>
- namespace {
- struct ForceCodegenLinking {
- ForceCodegenLinking() {
- // We must reference the passes in such a way that compilers will not
- // delete it all as dead code, even with whole program optimization,
- // yet is effectively a NO-OP. As the compiler isn't smart enough
- // to know that getenv() never returns -1, this will do the job.
- // This is so that globals in the translation units where these functions
- // are defined are forced to be initialized, populating various
- // registries.
- if (std::getenv("bar") != (char*) -1)
- return;
- (void) llvm::createFastRegisterAllocator();
- (void) llvm::createBasicRegisterAllocator();
- (void) llvm::createGreedyRegisterAllocator();
- (void) llvm::createDefaultPBQPRegisterAllocator();
- llvm::linkAllBuiltinGCs();
- (void) llvm::createBURRListDAGScheduler(nullptr,
- llvm::CodeGenOpt::Default);
- (void) llvm::createSourceListDAGScheduler(nullptr,
- llvm::CodeGenOpt::Default);
- (void) llvm::createHybridListDAGScheduler(nullptr,
- llvm::CodeGenOpt::Default);
- (void) llvm::createFastDAGScheduler(nullptr, llvm::CodeGenOpt::Default);
- (void) llvm::createDefaultScheduler(nullptr, llvm::CodeGenOpt::Default);
- (void) llvm::createVLIWDAGScheduler(nullptr, llvm::CodeGenOpt::Default);
- }
- } ForceCodegenLinking; // Force link by creating a global definition.
- }
- #endif
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|