1//===- llvm/LinkAllPasses.h ------------ Reference All Passes ---*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This header file pulls in all transformation and analysis passes for tools
10// like opt and bugpoint that need this functionality.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LINKALLPASSES_H
15#define LLVM_LINKALLPASSES_H
16
17#include "llvm/ADT/Statistic.h"
18#include "llvm/Analysis/AliasAnalysisEvaluator.h"
19#include "llvm/Analysis/AliasSetTracker.h"
20#include "llvm/Analysis/BasicAliasAnalysis.h"
21#include "llvm/Analysis/CallPrinter.h"
22#include "llvm/Analysis/DomPrinter.h"
23#include "llvm/Analysis/GlobalsModRef.h"
24#include "llvm/Analysis/IntervalPartition.h"
25#include "llvm/Analysis/Passes.h"
26#include "llvm/Analysis/PostDominators.h"
27#include "llvm/Analysis/RegionPass.h"
28#include "llvm/Analysis/RegionPrinter.h"
29#include "llvm/Analysis/ScalarEvolution.h"
30#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
31#include "llvm/Analysis/ScopedNoAliasAA.h"
32#include "llvm/Analysis/TargetLibraryInfo.h"
33#include "llvm/Analysis/TypeBasedAliasAnalysis.h"
34#include "llvm/CodeGen/Passes.h"
35#include "llvm/IR/Function.h"
36#include "llvm/IR/IRPrintingPasses.h"
37#include "llvm/Support/Valgrind.h"
38#include "llvm/Transforms/IPO.h"
39#include "llvm/Transforms/IPO/AlwaysInliner.h"
40#include "llvm/Transforms/InstCombine/InstCombine.h"
41#include "llvm/Transforms/ObjCARC.h"
42#include "llvm/Transforms/Scalar.h"
43#include "llvm/Transforms/Scalar/GVN.h"
44#include "llvm/Transforms/Scalar/Scalarizer.h"
45#include "llvm/Transforms/Utils.h"
46#include "llvm/Transforms/Utils/SymbolRewriter.h"
47#include "llvm/Transforms/Vectorize/LoadStoreVectorizer.h"
48#include <cstdlib>
49
50namespace {
51 struct ForcePassLinking {
52 ForcePassLinking() {
53 // We must reference the passes in such a way that compilers will not
54 // delete it all as dead code, even with whole program optimization,
55 // yet is effectively a NO-OP. As the compiler isn't smart enough
56 // to know that getenv() never returns -1, this will do the job.
57 // This is so that globals in the translation units where these functions
58 // are defined are forced to be initialized, populating various
59 // registries.
60 if (std::getenv(name: "bar") != (char*) -1)
61 return;
62
63 (void) llvm::createBasicAAWrapperPass();
64 (void) llvm::createSCEVAAWrapperPass();
65 (void) llvm::createTypeBasedAAWrapperPass();
66 (void) llvm::createScopedNoAliasAAWrapperPass();
67 (void) llvm::createBreakCriticalEdgesPass();
68 (void) llvm::createCallGraphDOTPrinterPass();
69 (void) llvm::createCallGraphViewerPass();
70 (void) llvm::createCFGSimplificationPass();
71 (void) llvm::createStructurizeCFGPass();
72 (void) llvm::createDeadArgEliminationPass();
73 (void) llvm::createDeadCodeEliminationPass();
74 (void) llvm::createDependenceAnalysisWrapperPass();
75 (void) llvm::createDomOnlyPrinterWrapperPassPass();
76 (void) llvm::createDomPrinterWrapperPassPass();
77 (void) llvm::createDomOnlyViewerWrapperPassPass();
78 (void) llvm::createDomViewerWrapperPassPass();
79 (void) llvm::createAlwaysInlinerLegacyPass();
80 (void) llvm::createGlobalsAAWrapperPass();
81 (void) llvm::createInstSimplifyLegacyPass();
82 (void) llvm::createInstructionCombiningPass();
83 (void) llvm::createJMCInstrumenterPass();
84 (void) llvm::createKCFIPass();
85 (void) llvm::createLCSSAPass();
86 (void) llvm::createLICMPass();
87 (void) llvm::createLazyValueInfoPass();
88 (void) llvm::createLoopExtractorPass();
89 (void) llvm::createLoopSimplifyPass();
90 (void) llvm::createLoopStrengthReducePass();
91 (void) llvm::createLoopUnrollPass();
92 (void) llvm::createLoopRotatePass();
93 (void) llvm::createLowerConstantIntrinsicsPass();
94 (void) llvm::createLowerGlobalDtorsLegacyPass();
95 (void) llvm::createLowerInvokePass();
96 (void) llvm::createLowerSwitchPass();
97 (void) llvm::createNaryReassociatePass();
98 (void) llvm::createObjCARCContractPass();
99 (void) llvm::createPromoteMemoryToRegisterPass();
100 (void)llvm::createPostDomOnlyPrinterWrapperPassPass();
101 (void)llvm::createPostDomPrinterWrapperPassPass();
102 (void)llvm::createPostDomOnlyViewerWrapperPassPass();
103 (void)llvm::createPostDomViewerWrapperPassPass();
104 (void) llvm::createReassociatePass();
105 (void) llvm::createRegionInfoPass();
106 (void) llvm::createRegionOnlyPrinterPass();
107 (void) llvm::createRegionOnlyViewerPass();
108 (void) llvm::createRegionPrinterPass();
109 (void) llvm::createRegionViewerPass();
110 (void) llvm::createSafeStackPass();
111 (void) llvm::createSROAPass();
112 (void) llvm::createSingleLoopExtractorPass();
113 (void) llvm::createTailCallEliminationPass();
114 (void)llvm::createTLSVariableHoistPass();
115 (void) llvm::createConstantHoistingPass();
116 (void)llvm::createCodeGenPrepareLegacyPass();
117 (void) llvm::createEarlyCSEPass();
118 (void) llvm::createGVNPass();
119 (void) llvm::createPostDomTree();
120 (void) llvm::createMergeICmpsLegacyPass();
121 (void) llvm::createExpandLargeDivRemPass();
122 (void)llvm::createExpandMemCmpLegacyPass();
123 (void) llvm::createExpandVectorPredicationPass();
124 std::string buf;
125 llvm::raw_string_ostream os(buf);
126 (void) llvm::createPrintModulePass(OS&: os);
127 (void) llvm::createPrintFunctionPass(OS&: os);
128 (void) llvm::createSinkingPass();
129 (void) llvm::createLowerAtomicPass();
130 (void) llvm::createLoadStoreVectorizerPass();
131 (void) llvm::createPartiallyInlineLibCallsPass();
132 (void) llvm::createSeparateConstOffsetFromGEPPass();
133 (void) llvm::createSpeculativeExecutionPass();
134 (void) llvm::createSpeculativeExecutionIfHasBranchDivergencePass();
135 (void) llvm::createStraightLineStrengthReducePass();
136 (void)llvm::createScalarizeMaskedMemIntrinLegacyPass();
137 (void) llvm::createHardwareLoopsLegacyPass();
138 (void) llvm::createUnifyLoopExitsPass();
139 (void) llvm::createFixIrreduciblePass();
140 (void)llvm::createSelectOptimizePass();
141
142 (void)new llvm::IntervalPartition();
143 (void)new llvm::ScalarEvolutionWrapperPass();
144 llvm::Function::Create(Ty: nullptr, Linkage: llvm::GlobalValue::ExternalLinkage)->viewCFGOnly();
145 llvm::RGPassManager RGM;
146 llvm::TargetLibraryInfoImpl TLII;
147 llvm::TargetLibraryInfo TLI(TLII);
148 llvm::AliasAnalysis AA(TLI);
149 llvm::BatchAAResults BAA(AA);
150 llvm::AliasSetTracker X(BAA);
151 X.add(Loc: llvm::MemoryLocation()); // for -print-alias-sets
152 (void) llvm::AreStatisticsEnabled();
153 (void) llvm::sys::RunningOnValgrind();
154 }
155 } ForcePassLinking; // Force link by creating a global definition.
156}
157
158#endif
159

source code of llvm/include/llvm/LinkAllPasses.h