xref: /llvm-project/llvm/include/llvm/LinkAllPasses.h (revision 3eca15cbb9888a992749ddd24f0fb666dad733bf)
1e2024d72SArthur Eubanks //===- llvm/LinkAllPasses.h ------------ Reference All Passes ---*- C++ -*-===//
2e2024d72SArthur Eubanks //
3e2024d72SArthur Eubanks // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e2024d72SArthur Eubanks // See https://llvm.org/LICENSE.txt for license information.
5e2024d72SArthur Eubanks // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e2024d72SArthur Eubanks //
7e2024d72SArthur Eubanks //===----------------------------------------------------------------------===//
8e2024d72SArthur Eubanks //
9e2024d72SArthur Eubanks // This header file pulls in all transformation and analysis passes for tools
10e2024d72SArthur Eubanks // like opt and bugpoint that need this functionality.
11e2024d72SArthur Eubanks //
12e2024d72SArthur Eubanks //===----------------------------------------------------------------------===//
13e2024d72SArthur Eubanks 
14e2024d72SArthur Eubanks #ifndef LLVM_LINKALLPASSES_H
15e2024d72SArthur Eubanks #define LLVM_LINKALLPASSES_H
16e2024d72SArthur Eubanks 
17e2024d72SArthur Eubanks #include "llvm/ADT/Statistic.h"
18e2024d72SArthur Eubanks #include "llvm/Analysis/AliasAnalysisEvaluator.h"
19e2024d72SArthur Eubanks #include "llvm/Analysis/AliasSetTracker.h"
20e2024d72SArthur Eubanks #include "llvm/Analysis/BasicAliasAnalysis.h"
21e2024d72SArthur Eubanks #include "llvm/Analysis/CallPrinter.h"
22372ddcd1SJustin Bogner #include "llvm/Analysis/DXILResource.h"
23e2024d72SArthur Eubanks #include "llvm/Analysis/DomPrinter.h"
24e2024d72SArthur Eubanks #include "llvm/Analysis/GlobalsModRef.h"
25e2024d72SArthur Eubanks #include "llvm/Analysis/Passes.h"
26e2024d72SArthur Eubanks #include "llvm/Analysis/PostDominators.h"
27e2024d72SArthur Eubanks #include "llvm/Analysis/RegionPass.h"
28e2024d72SArthur Eubanks #include "llvm/Analysis/RegionPrinter.h"
29e2024d72SArthur Eubanks #include "llvm/Analysis/ScalarEvolution.h"
30e2024d72SArthur Eubanks #include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
31e2024d72SArthur Eubanks #include "llvm/Analysis/ScopedNoAliasAA.h"
32e2024d72SArthur Eubanks #include "llvm/Analysis/TargetLibraryInfo.h"
33e2024d72SArthur Eubanks #include "llvm/Analysis/TypeBasedAliasAnalysis.h"
34e2024d72SArthur Eubanks #include "llvm/CodeGen/Passes.h"
35e2024d72SArthur Eubanks #include "llvm/IR/Function.h"
36e2024d72SArthur Eubanks #include "llvm/IR/IRPrintingPasses.h"
37e2024d72SArthur Eubanks #include "llvm/Support/Valgrind.h"
38e2024d72SArthur Eubanks #include "llvm/Transforms/IPO.h"
39e2024d72SArthur Eubanks #include "llvm/Transforms/IPO/AlwaysInliner.h"
40e2024d72SArthur Eubanks #include "llvm/Transforms/InstCombine/InstCombine.h"
41e2024d72SArthur Eubanks #include "llvm/Transforms/ObjCARC.h"
42e2024d72SArthur Eubanks #include "llvm/Transforms/Scalar.h"
43e2024d72SArthur Eubanks #include "llvm/Transforms/Scalar/GVN.h"
44e2024d72SArthur Eubanks #include "llvm/Transforms/Scalar/Scalarizer.h"
45e2024d72SArthur Eubanks #include "llvm/Transforms/Utils.h"
46e2024d72SArthur Eubanks #include "llvm/Transforms/Utils/SymbolRewriter.h"
472400c54cSTom Stellard #include "llvm/Transforms/Vectorize/LoadStoreVectorizer.h"
48e2024d72SArthur Eubanks #include <cstdlib>
49e2024d72SArthur Eubanks 
50e2024d72SArthur Eubanks namespace {
51e2024d72SArthur Eubanks struct ForcePassLinking {
52e2024d72SArthur Eubanks   ForcePassLinking() {
53e2024d72SArthur Eubanks     // We must reference the passes in such a way that compilers will not
54e2024d72SArthur Eubanks     // delete it all as dead code, even with whole program optimization,
55e2024d72SArthur Eubanks     // yet is effectively a NO-OP. As the compiler isn't smart enough
56e2024d72SArthur Eubanks     // to know that getenv() never returns -1, this will do the job.
570ef7ad37SArthur Eubanks     // This is so that globals in the translation units where these functions
580ef7ad37SArthur Eubanks     // are defined are forced to be initialized, populating various
590ef7ad37SArthur Eubanks     // registries.
60e2024d72SArthur Eubanks     if (std::getenv("bar") != (char *)-1)
61e2024d72SArthur Eubanks       return;
62e2024d72SArthur Eubanks 
63fe42e72dSRishabh Bali     (void)llvm::createAtomicExpandLegacyPass();
64e2024d72SArthur Eubanks     (void)llvm::createBasicAAWrapperPass();
65e2024d72SArthur Eubanks     (void)llvm::createSCEVAAWrapperPass();
66e2024d72SArthur Eubanks     (void)llvm::createTypeBasedAAWrapperPass();
67e2024d72SArthur Eubanks     (void)llvm::createScopedNoAliasAAWrapperPass();
68e2024d72SArthur Eubanks     (void)llvm::createBreakCriticalEdgesPass();
69e2024d72SArthur Eubanks     (void)llvm::createCallGraphDOTPrinterPass();
70e2024d72SArthur Eubanks     (void)llvm::createCallGraphViewerPass();
71e2024d72SArthur Eubanks     (void)llvm::createCFGSimplificationPass();
72e2024d72SArthur Eubanks     (void)llvm::createStructurizeCFGPass();
73*3eca15cbSJustin Bogner     (void)llvm::createDXILResourceBindingWrapperPassPass();
74*3eca15cbSJustin Bogner     (void)llvm::createDXILResourceTypeWrapperPassPass();
75e2024d72SArthur Eubanks     (void)llvm::createDeadArgEliminationPass();
76e2024d72SArthur Eubanks     (void)llvm::createDeadCodeEliminationPass();
77e2024d72SArthur Eubanks     (void)llvm::createDependenceAnalysisWrapperPass();
787dce9eb6SYang Keao     (void)llvm::createDomOnlyPrinterWrapperPassPass();
797dce9eb6SYang Keao     (void)llvm::createDomPrinterWrapperPassPass();
807dce9eb6SYang Keao     (void)llvm::createDomOnlyViewerWrapperPassPass();
817dce9eb6SYang Keao     (void)llvm::createDomViewerWrapperPassPass();
82e2024d72SArthur Eubanks     (void)llvm::createAlwaysInlinerLegacyPass();
83d23c5c2dSKyungwoo Lee     (void)llvm::createGlobalMergeFuncPass();
84e2024d72SArthur Eubanks     (void)llvm::createGlobalsAAWrapperPass();
85e2024d72SArthur Eubanks     (void)llvm::createInstSimplifyLegacyPass();
86e2024d72SArthur Eubanks     (void)llvm::createInstructionCombiningPass();
87f9270214SYuanfang Chen     (void)llvm::createJMCInstrumenterPass();
88e9569748SSami Tolvanen     (void)llvm::createKCFIPass();
89e2024d72SArthur Eubanks     (void)llvm::createLCSSAPass();
90e2024d72SArthur Eubanks     (void)llvm::createLICMPass();
91e2024d72SArthur Eubanks     (void)llvm::createLazyValueInfoPass();
92e2024d72SArthur Eubanks     (void)llvm::createLoopExtractorPass();
93e2024d72SArthur Eubanks     (void)llvm::createLoopSimplifyPass();
94e2024d72SArthur Eubanks     (void)llvm::createLoopStrengthReducePass();
9527a62ec7SPhilip Reames     (void)llvm::createLoopTermFoldPass();
96e2024d72SArthur Eubanks     (void)llvm::createLoopUnrollPass();
9764902d33SJulian Lettner     (void)llvm::createLowerGlobalDtorsLegacyPass();
98e2024d72SArthur Eubanks     (void)llvm::createLowerInvokePass();
99e2024d72SArthur Eubanks     (void)llvm::createLowerSwitchPass();
100e2024d72SArthur Eubanks     (void)llvm::createNaryReassociatePass();
101e2024d72SArthur Eubanks     (void)llvm::createObjCARCContractPass();
102e2024d72SArthur Eubanks     (void)llvm::createPromoteMemoryToRegisterPass();
103e26d9070SNathan Gauër     (void)llvm::createRegToMemWrapperPass();
1047dce9eb6SYang Keao     (void)llvm::createPostDomOnlyPrinterWrapperPassPass();
1057dce9eb6SYang Keao     (void)llvm::createPostDomPrinterWrapperPassPass();
1067dce9eb6SYang Keao     (void)llvm::createPostDomOnlyViewerWrapperPassPass();
1077dce9eb6SYang Keao     (void)llvm::createPostDomViewerWrapperPassPass();
108e2024d72SArthur Eubanks     (void)llvm::createReassociatePass();
109e2024d72SArthur Eubanks     (void)llvm::createRegionInfoPass();
110e2024d72SArthur Eubanks     (void)llvm::createRegionOnlyPrinterPass();
111e2024d72SArthur Eubanks     (void)llvm::createRegionOnlyViewerPass();
112e2024d72SArthur Eubanks     (void)llvm::createRegionPrinterPass();
113e2024d72SArthur Eubanks     (void)llvm::createRegionViewerPass();
114e2024d72SArthur Eubanks     (void)llvm::createSafeStackPass();
115e2024d72SArthur Eubanks     (void)llvm::createSROAPass();
116e2024d72SArthur Eubanks     (void)llvm::createSingleLoopExtractorPass();
117e2024d72SArthur Eubanks     (void)llvm::createTailCallEliminationPass();
118e2024d72SArthur Eubanks     (void)llvm::createConstantHoistingPass();
119f1ec0d12SNick Anderson     (void)llvm::createCodeGenPrepareLegacyPass();
120cab81dd0SEgor Pasko     (void)llvm::createPostInlineEntryExitInstrumenterPass();
121e2024d72SArthur Eubanks     (void)llvm::createEarlyCSEPass();
122e2024d72SArthur Eubanks     (void)llvm::createGVNPass();
123e2024d72SArthur Eubanks     (void)llvm::createPostDomTree();
124e2024d72SArthur Eubanks     (void)llvm::createMergeICmpsLegacyPass();
1253e39b271SMatthias Gehre     (void)llvm::createExpandLargeDivRemPass();
12660eca674Spaperchalice     (void)llvm::createExpandMemCmpLegacyPass();
127e2024d72SArthur Eubanks     std::string buf;
128e2024d72SArthur Eubanks     llvm::raw_string_ostream os(buf);
129e2024d72SArthur Eubanks     (void)llvm::createPrintModulePass(os);
130e2024d72SArthur Eubanks     (void)llvm::createPrintFunctionPass(os);
131e2024d72SArthur Eubanks     (void)llvm::createSinkingPass();
132e2024d72SArthur Eubanks     (void)llvm::createLowerAtomicPass();
133e2024d72SArthur Eubanks     (void)llvm::createLoadStoreVectorizerPass();
134e2024d72SArthur Eubanks     (void)llvm::createPartiallyInlineLibCallsPass();
135c05e29bfSFarzon Lotfi     (void)llvm::createScalarizerPass();
136e2024d72SArthur Eubanks     (void)llvm::createSeparateConstOffsetFromGEPPass();
137e2024d72SArthur Eubanks     (void)llvm::createSpeculativeExecutionPass();
138e2024d72SArthur Eubanks     (void)llvm::createSpeculativeExecutionIfHasBranchDivergencePass();
139e2024d72SArthur Eubanks     (void)llvm::createStraightLineStrengthReducePass();
140e2024d72SArthur Eubanks     (void)llvm::createScalarizeMaskedMemIntrinLegacyPass();
1412a58be42SSamuel Parker     (void)llvm::createHardwareLoopsLegacyPass();
142e2024d72SArthur Eubanks     (void)llvm::createUnifyLoopExitsPass();
143e2024d72SArthur Eubanks     (void)llvm::createFixIrreduciblePass();
144ca7c307dSSotiris Apostolakis     (void)llvm::createSelectOptimizePass();
145e2024d72SArthur Eubanks 
146e2024d72SArthur Eubanks     (void)new llvm::ScalarEvolutionWrapperPass();
147bbc89fafSNikita Popov     llvm::Function::Create(nullptr, llvm::GlobalValue::ExternalLinkage)
148bbc89fafSNikita Popov         ->viewCFGOnly();
149e2024d72SArthur Eubanks     llvm::RGPassManager RGM;
150e2024d72SArthur Eubanks     llvm::TargetLibraryInfoImpl TLII;
151e2024d72SArthur Eubanks     llvm::TargetLibraryInfo TLI(TLII);
152e2024d72SArthur Eubanks     llvm::AliasAnalysis AA(TLI);
153e95ca5bbSNikita Popov     llvm::BatchAAResults BAA(AA);
154e95ca5bbSNikita Popov     llvm::AliasSetTracker X(BAA);
155c0307789SBruno De Fraine     X.add(llvm::MemoryLocation()); // for -print-alias-sets
156e2024d72SArthur Eubanks     (void)llvm::AreStatisticsEnabled();
157e2024d72SArthur Eubanks     (void)llvm::sys::RunningOnValgrind();
158e2024d72SArthur Eubanks   }
159e2024d72SArthur Eubanks } ForcePassLinking; // Force link by creating a global definition.
160bbc89fafSNikita Popov } // namespace
161e2024d72SArthur Eubanks 
162e2024d72SArthur Eubanks #endif
163