1193323Sed//===- llvm/Codegen/LinkAllCodegenComponents.h ------------------*- C++ -*-===//
2193323Sed//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6193323Sed//
7193323Sed//===----------------------------------------------------------------------===//
8193323Sed//
9193323Sed// This header file pulls in all codegen related passes for tools like lli and
10193323Sed// llc that need this functionality.
11193323Sed//
12193323Sed//===----------------------------------------------------------------------===//
13193323Sed
14193323Sed#ifndef LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H
15193323Sed#define LLVM_CODEGEN_LINKALLCODEGENCOMPONENTS_H
16193323Sed
17344779Sdim#include "llvm/CodeGen/BuiltinGCs.h"
18193323Sed#include "llvm/CodeGen/Passes.h"
19193323Sed#include "llvm/CodeGen/SchedulerRegistry.h"
20193323Sed#include "llvm/Target/TargetMachine.h"
21200581Srdivacky#include <cstdlib>
22193323Sed
23193323Sednamespace {
24193323Sed  struct ForceCodegenLinking {
25193323Sed    ForceCodegenLinking() {
26193323Sed      // We must reference the passes in such a way that compilers will not
27193323Sed      // delete it all as dead code, even with whole program optimization,
28193323Sed      // yet is effectively a NO-OP. As the compiler isn't smart enough
29193323Sed      // to know that getenv() never returns -1, this will do the job.
30193323Sed      if (std::getenv("bar") != (char*) -1)
31193323Sed        return;
32193323Sed
33207618Srdivacky      (void) llvm::createFastRegisterAllocator();
34218893Sdim      (void) llvm::createBasicRegisterAllocator();
35218893Sdim      (void) llvm::createGreedyRegisterAllocator();
36218893Sdim      (void) llvm::createDefaultPBQPRegisterAllocator();
37193323Sed
38344779Sdim      llvm::linkAllBuiltinGCs();
39234353Sdim
40276479Sdim      (void) llvm::createBURRListDAGScheduler(nullptr,
41276479Sdim                                              llvm::CodeGenOpt::Default);
42276479Sdim      (void) llvm::createSourceListDAGScheduler(nullptr,
43276479Sdim                                                llvm::CodeGenOpt::Default);
44276479Sdim      (void) llvm::createHybridListDAGScheduler(nullptr,
45276479Sdim                                                llvm::CodeGenOpt::Default);
46276479Sdim      (void) llvm::createFastDAGScheduler(nullptr, llvm::CodeGenOpt::Default);
47276479Sdim      (void) llvm::createDefaultScheduler(nullptr, llvm::CodeGenOpt::Default);
48276479Sdim      (void) llvm::createVLIWDAGScheduler(nullptr, llvm::CodeGenOpt::Default);
49193323Sed
50193323Sed    }
51193323Sed  } ForceCodegenLinking; // Force link by creating a global definition.
52193323Sed}
53193323Sed
54193323Sed#endif
55