diff options
Diffstat (limited to 'src/rustllvm')
| -rw-r--r-- | src/rustllvm/PassWrapper.cpp | 141 | ||||
| -rw-r--r-- | src/rustllvm/rustllvm.def.in | 100 |
2 files changed, 25 insertions, 216 deletions
diff --git a/src/rustllvm/PassWrapper.cpp b/src/rustllvm/PassWrapper.cpp index fd17dfb4cf8..53b291ff470 100644 --- a/src/rustllvm/PassWrapper.cpp +++ b/src/rustllvm/PassWrapper.cpp @@ -30,10 +30,20 @@ inline T *unwrap(LLVMPassRef P) { return Q; } -#define WRAP_PASS(name) \ - extern "C" LLVMPassRef LLVMCreate##name##Pass() { \ - return wrap(llvm::create##name##Pass()); \ - } +extern "C" void LLVMInitializePasses() { + PassRegistry &Registry = *PassRegistry::getPassRegistry(); + initializeCore(Registry); + initializeCodeGen(Registry); + initializeScalarOpts(Registry); + initializeVectorization(Registry); + initializeIPO(Registry); + initializeAnalysis(Registry); + initializeIPA(Registry); + initializeTransformUtils(Registry); + initializeInstCombine(Registry); + initializeInstrumentation(Registry); + initializeTarget(Registry); +} extern "C" void LLVMAddPass(LLVMPassManagerRef PM, LLVMPassRef P) { PassManagerBase * pm = unwrap(PM); @@ -42,119 +52,14 @@ extern "C" void LLVMAddPass(LLVMPassManagerRef PM, LLVMPassRef P) { pm->add(p); } -//////////////// -// Transforms // -// ///////////// - -// IPO Passes -WRAP_PASS(StripSymbols) -WRAP_PASS(StripNonDebugSymbols) -WRAP_PASS(StripDebugDeclare) -WRAP_PASS(StripDeadDebugInfo) -WRAP_PASS(ConstantMerge) -WRAP_PASS(GlobalOptimizer) -WRAP_PASS(GlobalDCE) -WRAP_PASS(AlwaysInliner) -WRAP_PASS(PruneEH) -WRAP_PASS(Internalize) -WRAP_PASS(DeadArgElimination) -WRAP_PASS(DeadArgHacking) -WRAP_PASS(ArgumentPromotion) -WRAP_PASS(IPConstantPropagation) -WRAP_PASS(IPSCCP) -WRAP_PASS(LoopExtractor) -WRAP_PASS(SingleLoopExtractor) -WRAP_PASS(BlockExtractor) -WRAP_PASS(StripDeadPrototypes) -WRAP_PASS(FunctionAttrs) -WRAP_PASS(MergeFunctions) -WRAP_PASS(PartialInlining) -WRAP_PASS(MetaRenamer) -WRAP_PASS(BarrierNoop) +extern "C" LLVMPassRef LLVMCreatePass(const char * PassName) { + StringRef SR(PassName); + PassRegistry * PR = PassRegistry::getPassRegistry(); -extern "C" LLVMPassRef LLVMCreateFunctionInliningPass(int Threshold) { - return wrap(llvm::createFunctionInliningPass(Threshold)); + const PassInfo * PI = PR->getPassInfo(SR); + if (PI) { + return wrap(PI->createPass()); + } else { + return (LLVMPassRef)0; + } } - -// Instrumentation Passes -WRAP_PASS(EdgeProfiler) -WRAP_PASS(OptimalEdgeProfiler) -WRAP_PASS(PathProfiler) -WRAP_PASS(GCOVProfiler) -WRAP_PASS(BoundsChecking) - -// Scalar Passes -WRAP_PASS(ConstantPropagation) -WRAP_PASS(SCCP) -WRAP_PASS(DeadInstElimination) -WRAP_PASS(DeadCodeElimination) -WRAP_PASS(DeadStoreElimination) -WRAP_PASS(AggressiveDCE) -WRAP_PASS(SROA) -WRAP_PASS(ScalarReplAggregates) -WRAP_PASS(IndVarSimplify) -WRAP_PASS(InstructionCombining) -WRAP_PASS(LICM) -WRAP_PASS(LoopStrengthReduce) -WRAP_PASS(GlobalMerge) -WRAP_PASS(LoopUnswitch) -WRAP_PASS(LoopInstSimplify) -WRAP_PASS(LoopUnroll) -WRAP_PASS(LoopRotate) -WRAP_PASS(LoopIdiom) -WRAP_PASS(PromoteMemoryToRegister) -WRAP_PASS(DemoteRegisterToMemory) -WRAP_PASS(Reassociate) -WRAP_PASS(JumpThreading) -WRAP_PASS(CFGSimplification) -WRAP_PASS(BreakCriticalEdges) -WRAP_PASS(LoopSimplify) -WRAP_PASS(TailCallElimination) -WRAP_PASS(LowerSwitch) -WRAP_PASS(LowerInvoke) -WRAP_PASS(BlockPlacement) -WRAP_PASS(LCSSA) -WRAP_PASS(EarlyCSE) -WRAP_PASS(GVN) -WRAP_PASS(MemCpyOpt) -WRAP_PASS(LoopDeletion) -WRAP_PASS(SimplifyLibCalls) -WRAP_PASS(CodeGenPrepare) -WRAP_PASS(InstructionNamer) -WRAP_PASS(Sinking) -WRAP_PASS(LowerAtomic) -WRAP_PASS(CorrelatedValuePropagation) -WRAP_PASS(InstructionSimplifier) -WRAP_PASS(LowerExpectIntrinsic) - -// Vectorize Passes -WRAP_PASS(BBVectorize) -WRAP_PASS(LoopVectorize) - -////////////// -// Analyses // -////////////// - -WRAP_PASS(GlobalsModRef) -WRAP_PASS(AliasAnalysisCounter) -WRAP_PASS(AAEval) -WRAP_PASS(NoAA) -WRAP_PASS(BasicAliasAnalysis) -WRAP_PASS(ScalarEvolutionAliasAnalysis) -WRAP_PASS(TypeBasedAliasAnalysis) -WRAP_PASS(ProfileLoader) -WRAP_PASS(ProfileMetadataLoader) -WRAP_PASS(NoProfileInfo) -WRAP_PASS(ProfileEstimator) -WRAP_PASS(ProfileVerifier) -WRAP_PASS(PathProfileLoader) -WRAP_PASS(NoPathProfileInfo) -WRAP_PASS(PathProfileVerifier) -WRAP_PASS(LazyValueInfo) -WRAP_PASS(DependenceAnalysis) -WRAP_PASS(CostModelAnalysis) -WRAP_PASS(InstCount) -WRAP_PASS(RegionInfo) -WRAP_PASS(ModuleDebugInfoPrinter) -WRAP_PASS(Lint) -WRAP_PASS(Verifier) diff --git a/src/rustllvm/rustllvm.def.in b/src/rustllvm/rustllvm.def.in index 1e1c07fd99c..8ebdbd0f307 100644 --- a/src/rustllvm/rustllvm.def.in +++ b/src/rustllvm/rustllvm.def.in @@ -584,102 +584,6 @@ LLVMConstNamedStruct LLVMStructCreateNamed LLVMStructSetBody LLVMInlineAsm +LLVMInitializePasses LLVMAddPass - -LLVMCreateStripSymbolsPass -LLVMCreateStripNonDebugSymbolsPass -LLVMCreateStripDebugDeclarePass -LLVMCreateStripDeadDebugInfoPass -LLVMCreateConstantMergePass -LLVMCreateGlobalOptimizerPass -LLVMCreateGlobalDCEPass -LLVMCreateAlwaysInlinerPass -LLVMCreatePruneEHPass -LLVMCreateInternalizePass -LLVMCreateDeadArgEliminationPass -LLVMCreateDeadArgHackingPass -LLVMCreateArgumentPromotionPass -LLVMCreateIPConstantPropagationPass -LLVMCreateIPSCCPPass -LLVMCreateLoopExtractorPass -LLVMCreateSingleLoopExtractorPass -LLVMCreateBlockExtractorPass -LLVMCreateStripDeadPrototypesPass -LLVMCreateFunctionAttrsPass -LLVMCreateMergeFunctionsPass -LLVMCreatePartialInliningPass -LLVMCreateMetaRenamerPass -LLVMCreateBarrierNoopPass -LLVMCreateFunctionInliningPass -LLVMCreateEdgeProfilerPass -LLVMCreateOptimalEdgeProfilerPass -LLVMCreatePathProfilerPass -LLVMCreateGCOVProfilerPass -LLVMCreateBoundsCheckingPass -LLVMCreateConstantPropagationPass -LLVMCreateSCCPPass -LLVMCreateDeadInstEliminationPass -LLVMCreateDeadCodeEliminationPass -LLVMCreateDeadStoreEliminationPass -LLVMCreateAggressiveDCEPass -LLVMCreateSROAPass -LLVMCreateScalarReplAggregatesPass -LLVMCreateIndVarSimplifyPass -LLVMCreateInstructionCombiningPass -LLVMCreateLICMPass -LLVMCreateLoopStrengthReducePass -LLVMCreateGlobalMergePass -LLVMCreateLoopUnswitchPass -LLVMCreateLoopInstSimplifyPass -LLVMCreateLoopUnrollPass -LLVMCreateLoopRotatePass -LLVMCreateLoopIdiomPass -LLVMCreatePromoteMemoryToRegisterPass -LLVMCreateDemoteRegisterToMemoryPass -LLVMCreateReassociatePass -LLVMCreateJumpThreadingPass -LLVMCreateCFGSimplificationPass -LLVMCreateBreakCriticalEdgesPass -LLVMCreateLoopSimplifyPass -LLVMCreateTailCallEliminationPass -LLVMCreateLowerSwitchPass -LLVMCreateLowerInvokePass -LLVMCreateBlockPlacementPass -LLVMCreateLCSSAPass -LLVMCreateEarlyCSEPass -LLVMCreateGVNPass -LLVMCreateMemCpyOptPass -LLVMCreateLoopDeletionPass -LLVMCreateSimplifyLibCallsPass -LLVMCreateCodeGenPreparePass -LLVMCreateInstructionNamerPass -LLVMCreateSinkingPass -LLVMCreateLowerAtomicPass -LLVMCreateCorrelatedValuePropagationPass -LLVMCreateInstructionSimplifierPass -LLVMCreateLowerExpectIntrinsicPass -LLVMCreateBBVectorizePass -LLVMCreateLoopVectorizePass -LLVMCreateGlobalsModRefPass -LLVMCreateAliasAnalysisCounterPass -LLVMCreateAAEvalPass -LLVMCreateNoAAPass -LLVMCreateBasicAliasAnalysisPass -LLVMCreateScalarEvolutionAliasAnalysisPass -LLVMCreateTypeBasedAliasAnalysisPass -LLVMCreateProfileLoaderPass -LLVMCreateProfileMetadataLoaderPass -LLVMCreateNoProfileInfoPass -LLVMCreateProfileEstimatorPass -LLVMCreateProfileVerifierPass -LLVMCreatePathProfileLoaderPass -LLVMCreateNoPathProfileInfoPass -LLVMCreatePathProfileVerifierPass -LLVMCreateLazyValueInfoPass -LLVMCreateDependenceAnalysisPass -LLVMCreateCostModelAnalysisPass -LLVMCreateInstCountPass -LLVMCreateRegionInfoPass -LLVMCreateModuleDebugInfoPrinterPass -LLVMCreateLintPass -LLVMCreateVerifierPass +LLVMCreatePass |
