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