LinkAllPasses.h revision 360784
139287Ssos//===- llvm/LinkAllPasses.h ------------ Reference All Passes ---*- C++ -*-===//
239643Syokota//
339287Ssos// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
439287Ssos// See https://llvm.org/LICENSE.txt for license information.
5146736Sdelphij// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6146736Sdelphij//
7146736Sdelphij//===----------------------------------------------------------------------===//
839287Ssos//
939287Ssos// This header file pulls in all transformation and analysis passes for tools
1039287Ssos// like opt and bugpoint that need this functionality.
1139287Ssos//
1239643Syokota//===----------------------------------------------------------------------===//
1339643Syokota
1439287Ssos#ifndef LLVM_LINKALLPASSES_H
1539287Ssos#define LLVM_LINKALLPASSES_H
1639287Ssos
1739287Ssos#include "llvm/ADT/Statistic.h"
1839643Syokota#include "llvm/Analysis/AliasAnalysisEvaluator.h"
1939643Syokota#include "llvm/Analysis/AliasSetTracker.h"
2039643Syokota#include "llvm/Analysis/BasicAliasAnalysis.h"
2139643Syokota#include "llvm/Analysis/CFLAndersAliasAnalysis.h"
2239643Syokota#include "llvm/Analysis/CFLSteensAliasAnalysis.h"
2339643Syokota#include "llvm/Analysis/CallPrinter.h"
2439643Syokota#include "llvm/Analysis/DomPrinter.h"
2539643Syokota#include "llvm/Analysis/GlobalsModRef.h"
2639643Syokota#include "llvm/Analysis/IntervalPartition.h"
2739643Syokota#include "llvm/Analysis/Lint.h"
2839287Ssos#include "llvm/Analysis/Passes.h"
2939287Ssos#include "llvm/Analysis/PostDominators.h"
3039287Ssos#include "llvm/Analysis/RegionPass.h"
31119420Sobrien#include "llvm/Analysis/RegionPrinter.h"
32119420Sobrien#include "llvm/Analysis/ScalarEvolution.h"
33119420Sobrien#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
3442504Syokota#include "llvm/Analysis/ScopedNoAliasAA.h"
3539287Ssos#include "llvm/Analysis/TargetLibraryInfo.h"
3656836Speter#include "llvm/Analysis/TypeBasedAliasAnalysis.h"
3739287Ssos#include "llvm/CodeGen/Passes.h"
3839287Ssos#include "llvm/IR/Function.h"
3939287Ssos#include "llvm/IR/IRPrintingPasses.h"
4039668Syokota#include "llvm/Support/Valgrind.h"
4139287Ssos#include "llvm/Transforms/AggressiveInstCombine/AggressiveInstCombine.h"
4239287Ssos#include "llvm/Transforms/IPO.h"
4366859Sphk#include "llvm/Transforms/IPO/AlwaysInliner.h"
4466859Sphk#include "llvm/Transforms/IPO/Attributor.h"
4539287Ssos#include "llvm/Transforms/IPO/FunctionAttrs.h"
46197025Sdelphij#include "llvm/Transforms/InstCombine/InstCombine.h"
4739287Ssos#include "llvm/Transforms/Instrumentation.h"
4842504Syokota#include "llvm/Transforms/Instrumentation/BoundsChecking.h"
4942504Syokota#include "llvm/Transforms/ObjCARC.h"
5039287Ssos#include "llvm/Transforms/Scalar.h"
51181905Sed#include "llvm/Transforms/Scalar/GVN.h"
5239287Ssos#include "llvm/Transforms/Scalar/InstSimplifyPass.h"
5339667Syokota#include "llvm/Transforms/Scalar/Scalarizer.h"
54181905Sed#include "llvm/Transforms/Utils.h"
5539287Ssos#include "llvm/Transforms/Utils/SymbolRewriter.h"
5639287Ssos#include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h"
5739287Ssos#include "llvm/Transforms/Vectorize.h"
5839287Ssos#include <cstdlib>
59181905Sed
6039287Ssosnamespace {
6139287Ssos  struct ForcePassLinking {
6239287Ssos    ForcePassLinking() {
6339591Syokota      // We must reference the passes in such a way that compilers will not
6439591Syokota      // delete it all as dead code, even with whole program optimization,
6539591Syokota      // yet is effectively a NO-OP. As the compiler isn't smart enough
6639591Syokota      // to know that getenv() never returns -1, this will do the job.
6748104Syokota      if (std::getenv("bar") != (char*) -1)
6839591Syokota        return;
69149640Srodrigc
7039591Syokota      (void) llvm::createAAEvalPass();
7139287Ssos      (void) llvm::createAggressiveDCEPass();
7239287Ssos      (void) llvm::createAggressiveInstCombinerPass();
7339287Ssos      (void) llvm::createBitTrackingDCEPass();
7439287Ssos      (void) llvm::createArgumentPromotionPass();
7539287Ssos      (void) llvm::createAlignmentFromAssumptionsPass();
7639287Ssos      (void) llvm::createBasicAAWrapperPass();
7748104Syokota      (void) llvm::createSCEVAAWrapperPass();
7839287Ssos      (void) llvm::createTypeBasedAAWrapperPass();
7939287Ssos      (void) llvm::createScopedNoAliasAAWrapperPass();
80149640Srodrigc      (void) llvm::createBoundsCheckingLegacyPass();
8139287Ssos      (void) llvm::createBreakCriticalEdgesPass();
8239287Ssos      (void) llvm::createCallGraphDOTPrinterPass();
8339287Ssos      (void) llvm::createCallGraphViewerPass();
8439287Ssos      (void) llvm::createCFGSimplificationPass();
8539287Ssos      (void) llvm::createCFLAndersAAWrapperPass();
8639287Ssos      (void) llvm::createCFLSteensAAWrapperPass();
8739287Ssos      (void) llvm::createStructurizeCFGPass();
8839287Ssos      (void) llvm::createLibCallsShrinkWrapPass();
8939287Ssos      (void) llvm::createCalledValuePropagationPass();
9039287Ssos      (void) llvm::createConstantMergePass();
9139287Ssos      (void) llvm::createConstantPropagationPass();
9239287Ssos      (void) llvm::createControlHeightReductionLegacyPass();
9339287Ssos      (void) llvm::createCostModelAnalysisPass();
9439287Ssos      (void) llvm::createDeadArgEliminationPass();
9539287Ssos      (void) llvm::createDeadCodeEliminationPass();
9639287Ssos      (void) llvm::createDeadInstEliminationPass();
9739287Ssos      (void) llvm::createDeadStoreEliminationPass();
9839287Ssos      (void) llvm::createDependenceAnalysisWrapperPass();
9939287Ssos      (void) llvm::createDomOnlyPrinterPass();
10039287Ssos      (void) llvm::createDomPrinterPass();
10139287Ssos      (void) llvm::createDomOnlyViewerPass();
10239287Ssos      (void) llvm::createDomViewerPass();
10348104Syokota      (void) llvm::createGCOVProfilerPass();
10439287Ssos      (void) llvm::createPGOInstrumentationGenLegacyPass();
10539287Ssos      (void) llvm::createPGOInstrumentationUseLegacyPass();
10639287Ssos      (void) llvm::createPGOInstrumentationGenCreateVarLegacyPass();
107146736Sdelphij      (void) llvm::createPGOIndirectCallPromotionLegacyPass();
108146736Sdelphij      (void) llvm::createPGOMemOPSizeOptLegacyPass();
109146736Sdelphij      (void) llvm::createInstrProfilingLegacyPass();
110146736Sdelphij      (void) llvm::createFunctionImportPass();
111146736Sdelphij      (void) llvm::createFunctionInliningPass();
112146736Sdelphij      (void) llvm::createAlwaysInlinerLegacyPass();
113146736Sdelphij      (void) llvm::createGlobalDCEPass();
114147224Sdelphij      (void) llvm::createGlobalOptimizerPass();
115147224Sdelphij      (void) llvm::createGlobalsAAWrapperPass();
116146736Sdelphij      (void) llvm::createGuardWideningPass();
117146736Sdelphij      (void) llvm::createLoopGuardWideningPass();
118146736Sdelphij      (void) llvm::createIPConstantPropagationPass();
11939287Ssos      (void) llvm::createIPSCCPPass();
12039287Ssos      (void) llvm::createInductiveRangeCheckEliminationPass();
12139287Ssos      (void) llvm::createIndVarSimplifyPass();
122181905Sed      (void) llvm::createInstSimplifyLegacyPass();
12339287Ssos      (void) llvm::createInstructionCombiningPass();
12439287Ssos      (void) llvm::createInternalizePass();
12539287Ssos      (void) llvm::createLCSSAPass();
12639287Ssos      (void) llvm::createLegacyDivergenceAnalysisPass();
12739287Ssos      (void) llvm::createLICMPass();
12839287Ssos      (void) llvm::createLoopSinkPass();
12939287Ssos      (void) llvm::createLazyValueInfoPass();
13039287Ssos      (void) llvm::createLoopExtractorPass();
13139287Ssos      (void) llvm::createLoopInterchangePass();
13239287Ssos      (void) llvm::createLoopPredicationPass();
13339287Ssos      (void) llvm::createLoopSimplifyPass();
13439287Ssos      (void) llvm::createLoopSimplifyCFGPass();
13539287Ssos      (void) llvm::createLoopStrengthReducePass();
13639287Ssos      (void) llvm::createLoopRerollPass();
13739287Ssos      (void) llvm::createLoopUnrollPass();
13839287Ssos      (void) llvm::createLoopUnrollAndJamPass();
13939287Ssos      (void) llvm::createLoopUnswitchPass();
14039287Ssos      (void) llvm::createLoopVersioningLICMPass();
14139287Ssos      (void) llvm::createLoopIdiomPass();
14239287Ssos      (void) llvm::createLoopRotatePass();
14339287Ssos      (void) llvm::createLowerConstantIntrinsicsPass();
14439287Ssos      (void) llvm::createLowerExpectIntrinsicPass();
14539287Ssos      (void) llvm::createLowerInvokePass();
14639287Ssos      (void) llvm::createLowerSwitchPass();
147165927Smarius      (void) llvm::createNaryReassociatePass();
148      (void) llvm::createObjCARCAAWrapperPass();
149      (void) llvm::createObjCARCAPElimPass();
150      (void) llvm::createObjCARCExpandPass();
151      (void) llvm::createObjCARCContractPass();
152      (void) llvm::createObjCARCOptPass();
153      (void) llvm::createPAEvalPass();
154      (void) llvm::createPromoteMemoryToRegisterPass();
155      (void) llvm::createDemoteRegisterToMemoryPass();
156      (void) llvm::createPruneEHPass();
157      (void) llvm::createPostDomOnlyPrinterPass();
158      (void) llvm::createPostDomPrinterPass();
159      (void) llvm::createPostDomOnlyViewerPass();
160      (void) llvm::createPostDomViewerPass();
161      (void) llvm::createReassociatePass();
162      (void) llvm::createRedundantDbgInstEliminationPass();
163      (void) llvm::createRegionInfoPass();
164      (void) llvm::createRegionOnlyPrinterPass();
165      (void) llvm::createRegionOnlyViewerPass();
166      (void) llvm::createRegionPrinterPass();
167      (void) llvm::createRegionViewerPass();
168      (void) llvm::createSCCPPass();
169      (void) llvm::createSafeStackPass();
170      (void) llvm::createSROAPass();
171      (void) llvm::createSingleLoopExtractorPass();
172      (void) llvm::createStripSymbolsPass();
173      (void) llvm::createStripNonDebugSymbolsPass();
174      (void) llvm::createStripDeadDebugInfoPass();
175      (void) llvm::createStripDeadPrototypesPass();
176      (void) llvm::createTailCallEliminationPass();
177      (void) llvm::createJumpThreadingPass();
178      (void) llvm::createUnifyFunctionExitNodesPass();
179      (void) llvm::createInstCountPass();
180      (void) llvm::createConstantHoistingPass();
181      (void) llvm::createCodeGenPreparePass();
182      (void) llvm::createEntryExitInstrumenterPass();
183      (void) llvm::createPostInlineEntryExitInstrumenterPass();
184      (void) llvm::createEarlyCSEPass();
185      (void) llvm::createGVNHoistPass();
186      (void) llvm::createMergedLoadStoreMotionPass();
187      (void) llvm::createGVNPass();
188      (void) llvm::createNewGVNPass();
189      (void) llvm::createMemCpyOptPass();
190      (void) llvm::createLoopDeletionPass();
191      (void) llvm::createPostDomTree();
192      (void) llvm::createInstructionNamerPass();
193      (void) llvm::createMetaRenamerPass();
194      (void) llvm::createAttributorLegacyPass();
195      (void) llvm::createPostOrderFunctionAttrsLegacyPass();
196      (void) llvm::createReversePostOrderFunctionAttrsPass();
197      (void) llvm::createMergeFunctionsPass();
198      (void) llvm::createMergeICmpsLegacyPass();
199      (void) llvm::createExpandMemCmpPass();
200      std::string buf;
201      llvm::raw_string_ostream os(buf);
202      (void) llvm::createPrintModulePass(os);
203      (void) llvm::createPrintFunctionPass(os);
204      (void) llvm::createModuleDebugInfoPrinterPass();
205      (void) llvm::createPartialInliningPass();
206      (void) llvm::createLintPass();
207      (void) llvm::createSinkingPass();
208      (void) llvm::createLowerAtomicPass();
209      (void) llvm::createCorrelatedValuePropagationPass();
210      (void) llvm::createMemDepPrinter();
211      (void) llvm::createLoopVectorizePass();
212      (void) llvm::createSLPVectorizerPass();
213      (void) llvm::createLoadStoreVectorizerPass();
214      (void) llvm::createPartiallyInlineLibCallsPass();
215      (void) llvm::createScalarizerPass();
216      (void) llvm::createSeparateConstOffsetFromGEPPass();
217      (void) llvm::createSpeculativeExecutionPass();
218      (void) llvm::createSpeculativeExecutionIfHasBranchDivergencePass();
219      (void) llvm::createRewriteSymbolsPass();
220      (void) llvm::createStraightLineStrengthReducePass();
221      (void) llvm::createMemDerefPrinter();
222      (void) llvm::createMustExecutePrinter();
223      (void) llvm::createMustBeExecutedContextPrinter();
224      (void) llvm::createFloat2IntPass();
225      (void) llvm::createEliminateAvailableExternallyPass();
226      (void) llvm::createScalarizeMaskedMemIntrinPass();
227      (void) llvm::createWarnMissedTransformationsPass();
228      (void) llvm::createHardwareLoopsPass();
229      (void)llvm::createInjectTLIMappingsLegacyPass();
230
231      (void)new llvm::IntervalPartition();
232      (void)new llvm::ScalarEvolutionWrapperPass();
233      llvm::Function::Create(nullptr, llvm::GlobalValue::ExternalLinkage)->viewCFGOnly();
234      llvm::RGPassManager RGM;
235      llvm::TargetLibraryInfoImpl TLII;
236      llvm::TargetLibraryInfo TLI(TLII);
237      llvm::AliasAnalysis AA(TLI);
238      llvm::AliasSetTracker X(AA);
239      X.add(nullptr, llvm::LocationSize::unknown(),
240            llvm::AAMDNodes()); // for -print-alias-sets
241      (void) llvm::AreStatisticsEnabled();
242      (void) llvm::sys::RunningOnValgrind();
243    }
244  } ForcePassLinking; // Force link by creating a global definition.
245}
246
247#endif
248