The libcall lowering decisions should be program dependent, depending on the current module's RuntimeLibcallInfo. We need another related analysis derived from that plus the current function's subtarget to provide concrete lowering decisions. This takes on a somewhat unusual form. It's a Module analysis, with a lookup keyed on the subtarget. This is a separate module analysis from RuntimeLibraryAnalysis to avoid that depending on codegen. It's not a function pass to avoid depending on any particular function, to avoid repeated subtarget map lookups in most of the use passes, and to avoid any recomputation in the common case of one subtarget (and keeps it reusable across repeated compilations). This also switches ExpandFp and PreISelIntrinsicLowering as a sample function and module pass. Note this is not yet wired up to SelectionDAG, which is still using the LibcallLoweringInfo constructed inside of TargetLowering.
154 lines
7.1 KiB
C++
154 lines
7.1 KiB
C++
//===-- CodeGen.cpp -------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements the common initialization routines for the
|
|
// CodeGen library.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/InitializePasses.h"
|
|
#include "llvm/PassRegistry.h"
|
|
|
|
using namespace llvm;
|
|
|
|
/// initializeCodeGen - Initialize all passes linked into the CodeGen library.
|
|
void llvm::initializeCodeGen(PassRegistry &Registry) {
|
|
initializeAssignmentTrackingAnalysisPass(Registry);
|
|
initializeAtomicExpandLegacyPass(Registry);
|
|
initializeBasicBlockPathCloningPass(Registry);
|
|
initializeBasicBlockSectionsPass(Registry);
|
|
initializeBranchFolderLegacyPass(Registry);
|
|
initializeBranchRelaxationLegacyPass(Registry);
|
|
initializeBreakFalseDepsPass(Registry);
|
|
initializeCallBrPreparePass(Registry);
|
|
initializeCFGuardLongjmpPass(Registry);
|
|
initializeCFIFixupPass(Registry);
|
|
initializeCFIInstrInserterPass(Registry);
|
|
initializeCheckDebugMachineModulePass(Registry);
|
|
initializeCodeGenPrepareLegacyPassPass(Registry);
|
|
initializeDeadMachineInstructionElimPass(Registry);
|
|
initializeDebugifyMachineModulePass(Registry);
|
|
initializeDetectDeadLanesLegacyPass(Registry);
|
|
initializeDwarfEHPrepareLegacyPassPass(Registry);
|
|
initializeEarlyIfConverterLegacyPass(Registry);
|
|
initializeEarlyIfPredicatorPass(Registry);
|
|
initializeEarlyMachineLICMPass(Registry);
|
|
initializeEarlyTailDuplicateLegacyPass(Registry);
|
|
initializeExpandLargeDivRemLegacyPassPass(Registry);
|
|
initializeExpandFpLegacyPassPass(Registry);
|
|
initializeExpandMemCmpLegacyPassPass(Registry);
|
|
initializeExpandPostRALegacyPass(Registry);
|
|
initializeFEntryInserterLegacyPass(Registry);
|
|
initializeFinalizeISelPass(Registry);
|
|
initializeFixupStatepointCallerSavedLegacyPass(Registry);
|
|
initializeFuncletLayoutPass(Registry);
|
|
initializeGCMachineCodeAnalysisPass(Registry);
|
|
initializeGCModuleInfoPass(Registry);
|
|
initializeHardwareLoopsLegacyPass(Registry);
|
|
initializeIfConverterPass(Registry);
|
|
initializeImplicitNullChecksPass(Registry);
|
|
initializeIndirectBrExpandLegacyPassPass(Registry);
|
|
initializeInitUndefLegacyPass(Registry);
|
|
initializeInterleavedLoadCombinePass(Registry);
|
|
initializeInterleavedAccessPass(Registry);
|
|
initializeJMCInstrumenterPass(Registry);
|
|
initializeLibcallLoweringInfoWrapperPass(Registry);
|
|
initializeLiveDebugValuesLegacyPass(Registry);
|
|
initializeLiveDebugVariablesWrapperLegacyPass(Registry);
|
|
initializeLiveIntervalsWrapperPassPass(Registry);
|
|
initializeLiveRangeShrinkPass(Registry);
|
|
initializeLiveStacksWrapperLegacyPass(Registry);
|
|
initializeLiveVariablesWrapperPassPass(Registry);
|
|
initializeLocalStackSlotPassPass(Registry);
|
|
initializeLowerGlobalDtorsLegacyPassPass(Registry);
|
|
initializeLowerIntrinsicsPass(Registry);
|
|
initializeMIRAddFSDiscriminatorsPass(Registry);
|
|
initializeMIRCanonicalizerPass(Registry);
|
|
initializeMIRNamerPass(Registry);
|
|
initializeMIRProfileLoaderPassPass(Registry);
|
|
initializeMachineBlockFrequencyInfoWrapperPassPass(Registry);
|
|
initializeMachineBlockPlacementLegacyPass(Registry);
|
|
initializeMachineBlockPlacementStatsLegacyPass(Registry);
|
|
initializeMachineCFGPrinterPass(Registry);
|
|
initializeMachineCSELegacyPass(Registry);
|
|
initializeMachineCombinerPass(Registry);
|
|
initializeMachineCopyPropagationLegacyPass(Registry);
|
|
initializeMachineCycleInfoPrinterLegacyPass(Registry);
|
|
initializeMachineCycleInfoWrapperPassPass(Registry);
|
|
initializeMachineDominatorTreeWrapperPassPass(Registry);
|
|
initializeMachineFunctionPrinterPassPass(Registry);
|
|
initializeMachineFunctionSplitterPass(Registry);
|
|
initializeMachineLateInstrsCleanupLegacyPass(Registry);
|
|
initializeMachineLICMPass(Registry);
|
|
initializeMachineLoopInfoWrapperPassPass(Registry);
|
|
initializeMachineModuleInfoWrapperPassPass(Registry);
|
|
initializeMachineOptimizationRemarkEmitterPassPass(Registry);
|
|
initializeMachineOutlinerPass(Registry);
|
|
initializeMachinePipelinerPass(Registry);
|
|
initializeMachineSanitizerBinaryMetadataLegacyPass(Registry);
|
|
initializeModuloScheduleTestPass(Registry);
|
|
initializeMachinePostDominatorTreeWrapperPassPass(Registry);
|
|
initializeMachineRegionInfoPassPass(Registry);
|
|
initializeMachineSchedulerLegacyPass(Registry);
|
|
initializeMachineSinkingLegacyPass(Registry);
|
|
initializeMachineUniformityAnalysisPassPass(Registry);
|
|
initializeMIR2VecVocabLegacyAnalysisPass(Registry);
|
|
initializeMIR2VecVocabPrinterLegacyPassPass(Registry);
|
|
initializeMIR2VecPrinterLegacyPassPass(Registry);
|
|
initializeMachineUniformityInfoPrinterPassPass(Registry);
|
|
initializeMachineVerifierLegacyPassPass(Registry);
|
|
initializeObjCARCContractLegacyPassPass(Registry);
|
|
initializeOptimizePHIsLegacyPass(Registry);
|
|
initializePEILegacyPass(Registry);
|
|
initializePHIEliminationPass(Registry);
|
|
initializePatchableFunctionLegacyPass(Registry);
|
|
initializePeepholeOptimizerLegacyPass(Registry);
|
|
initializePostMachineSchedulerLegacyPass(Registry);
|
|
initializePostRAMachineSinkingLegacyPass(Registry);
|
|
initializePostRAHazardRecognizerLegacyPass(Registry);
|
|
initializePostRASchedulerLegacyPass(Registry);
|
|
initializePreISelIntrinsicLoweringLegacyPassPass(Registry);
|
|
initializeProcessImplicitDefsLegacyPass(Registry);
|
|
initializeRABasicPass(Registry);
|
|
initializeRAGreedyLegacyPass(Registry);
|
|
initializeReachingDefInfoWrapperPassPass(Registry);
|
|
initializeRegAllocFastPass(Registry);
|
|
initializeRegUsageInfoCollectorLegacyPass(Registry);
|
|
initializeRegUsageInfoPropagationLegacyPass(Registry);
|
|
initializeRegisterCoalescerLegacyPass(Registry);
|
|
initializeRemoveLoadsIntoFakeUsesLegacyPass(Registry);
|
|
initializeRemoveRedundantDebugValuesLegacyPass(Registry);
|
|
initializeRenameIndependentSubregsLegacyPass(Registry);
|
|
initializeSafeStackLegacyPassPass(Registry);
|
|
initializeSelectOptimizePass(Registry);
|
|
initializeShadowStackGCLoweringPass(Registry);
|
|
initializeShrinkWrapLegacyPass(Registry);
|
|
initializeSjLjEHPreparePass(Registry);
|
|
initializeSlotIndexesWrapperPassPass(Registry);
|
|
initializeStackColoringLegacyPass(Registry);
|
|
initializeStackFrameLayoutAnalysisLegacyPass(Registry);
|
|
initializeStackMapLivenessPass(Registry);
|
|
initializeStackProtectorPass(Registry);
|
|
initializeStackSlotColoringLegacyPass(Registry);
|
|
initializeStaticDataSplitterPass(Registry);
|
|
initializeStaticDataAnnotatorPass(Registry);
|
|
initializeStripDebugMachineModulePass(Registry);
|
|
initializeTailDuplicateLegacyPass(Registry);
|
|
initializeTargetPassConfigPass(Registry);
|
|
initializeTwoAddressInstructionLegacyPassPass(Registry);
|
|
initializeTypePromotionLegacyPass(Registry);
|
|
initializeUnpackMachineBundlesPass(Registry);
|
|
initializeUnreachableBlockElimLegacyPassPass(Registry);
|
|
initializeUnreachableMachineBlockElimLegacyPass(Registry);
|
|
initializeVirtRegMapWrapperLegacyPass(Registry);
|
|
initializeVirtRegRewriterLegacyPass(Registry);
|
|
initializeWasmEHPreparePass(Registry);
|
|
initializeWinEHPreparePass(Registry);
|
|
initializeXRayInstrumentationLegacyPass(Registry);
|
|
}
|