12754fe60SDimitry Andric //===-- CodeGen.cpp -------------------------------------------------------===//
22754fe60SDimitry Andric //
32754fe60SDimitry Andric //                     The LLVM Compiler Infrastructure
42754fe60SDimitry Andric //
52754fe60SDimitry Andric // This file is distributed under the University of Illinois Open Source
62754fe60SDimitry Andric // License. See LICENSE.TXT for details.
72754fe60SDimitry Andric //
82754fe60SDimitry Andric //===----------------------------------------------------------------------===//
92754fe60SDimitry Andric //
102754fe60SDimitry Andric // This file implements the common initialization routines for the
112754fe60SDimitry Andric // CodeGen library.
122754fe60SDimitry Andric //
132754fe60SDimitry Andric //===----------------------------------------------------------------------===//
142754fe60SDimitry Andric 
152754fe60SDimitry Andric #include "llvm/InitializePasses.h"
162754fe60SDimitry Andric #include "llvm-c/Initialization.h"
172754fe60SDimitry Andric 
182754fe60SDimitry Andric using namespace llvm;
192754fe60SDimitry Andric 
202754fe60SDimitry Andric /// initializeCodeGen - Initialize all passes linked into the CodeGen library.
212754fe60SDimitry Andric void llvm::initializeCodeGen(PassRegistry &Registry) {
22139f7f9bSDimitry Andric   initializeBasicTTIPass(Registry);
23dff0c46cSDimitry Andric   initializeBranchFolderPassPass(Registry);
242754fe60SDimitry Andric   initializeCalculateSpillWeightsPass(Registry);
252754fe60SDimitry Andric   initializeDeadMachineInstructionElimPass(Registry);
267ae0e2c9SDimitry Andric   initializeEarlyIfConverterPass(Registry);
27dff0c46cSDimitry Andric   initializeExpandPostRAPass(Registry);
28dff0c46cSDimitry Andric   initializeExpandISelPseudosPass(Registry);
29dff0c46cSDimitry Andric   initializeFinalizeMachineBundlesPass(Registry);
30dff0c46cSDimitry Andric   initializeGCMachineCodeAnalysisPass(Registry);
312754fe60SDimitry Andric   initializeGCModuleInfoPass(Registry);
322754fe60SDimitry Andric   initializeIfConverterPass(Registry);
332754fe60SDimitry Andric   initializeLiveDebugVariablesPass(Registry);
342754fe60SDimitry Andric   initializeLiveIntervalsPass(Registry);
352754fe60SDimitry Andric   initializeLiveStacksPass(Registry);
362754fe60SDimitry Andric   initializeLiveVariablesPass(Registry);
37dff0c46cSDimitry Andric   initializeLocalStackSlotPassPass(Registry);
386122f3e6SDimitry Andric   initializeMachineBlockFrequencyInfoPass(Registry);
39dff0c46cSDimitry Andric   initializeMachineBlockPlacementPass(Registry);
40dff0c46cSDimitry Andric   initializeMachineBlockPlacementStatsPass(Registry);
41dff0c46cSDimitry Andric   initializeMachineCopyPropagationPass(Registry);
422754fe60SDimitry Andric   initializeMachineCSEPass(Registry);
432754fe60SDimitry Andric   initializeMachineDominatorTreePass(Registry);
443861d79fSDimitry Andric   initializeMachinePostDominatorTreePass(Registry);
452754fe60SDimitry Andric   initializeMachineLICMPass(Registry);
462754fe60SDimitry Andric   initializeMachineLoopInfoPass(Registry);
472754fe60SDimitry Andric   initializeMachineModuleInfoPass(Registry);
48dff0c46cSDimitry Andric   initializeMachineSchedulerPass(Registry);
492754fe60SDimitry Andric   initializeMachineSinkingPass(Registry);
502754fe60SDimitry Andric   initializeMachineVerifierPassPass(Registry);
512754fe60SDimitry Andric   initializeOptimizePHIsPass(Registry);
522754fe60SDimitry Andric   initializePHIEliminationPass(Registry);
532754fe60SDimitry Andric   initializePeepholeOptimizerPass(Registry);
54dff0c46cSDimitry Andric   initializePostRASchedulerPass(Registry);
552754fe60SDimitry Andric   initializeProcessImplicitDefsPass(Registry);
562754fe60SDimitry Andric   initializePEIPass(Registry);
5717a519f9SDimitry Andric   initializeRegisterCoalescerPass(Registry);
582754fe60SDimitry Andric   initializeSlotIndexesPass(Registry);
592754fe60SDimitry Andric   initializeStackProtectorPass(Registry);
603861d79fSDimitry Andric   initializeStackColoringPass(Registry);
612754fe60SDimitry Andric   initializeStackSlotColoringPass(Registry);
622754fe60SDimitry Andric   initializeStrongPHIEliminationPass(Registry);
63dff0c46cSDimitry Andric   initializeTailDuplicatePassPass(Registry);
64dff0c46cSDimitry Andric   initializeTargetPassConfigPass(Registry);
652754fe60SDimitry Andric   initializeTwoAddressInstructionPassPass(Registry);
66dff0c46cSDimitry Andric   initializeUnpackMachineBundlesPass(Registry);
672754fe60SDimitry Andric   initializeUnreachableBlockElimPass(Registry);
682754fe60SDimitry Andric   initializeUnreachableMachineBlockElimPass(Registry);
692754fe60SDimitry Andric   initializeVirtRegMapPass(Registry);
707ae0e2c9SDimitry Andric   initializeVirtRegRewriterPass(Registry);
712754fe60SDimitry Andric   initializeLowerIntrinsicsPass(Registry);
727ae0e2c9SDimitry Andric   initializeMachineFunctionPrinterPassPass(Registry);
732754fe60SDimitry Andric }
742754fe60SDimitry Andric 
752754fe60SDimitry Andric void LLVMInitializeCodeGen(LLVMPassRegistryRef R) {
762754fe60SDimitry Andric   initializeCodeGen(*unwrap(R));
772754fe60SDimitry Andric }
78