Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/jitlayers.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ struct OptimizationOptions {
bool enable_scalar_optimizations;
bool enable_loop_optimizations;
bool enable_vector_pipeline;
bool enable_attributes;
bool remove_ni;
bool cleanup;
bool warn_missed_transformations;
Expand All @@ -102,13 +103,15 @@ struct OptimizationOptions {
bool enable_scalar_optimizations=true,
bool enable_loop_optimizations=true,
bool enable_vector_pipeline=true,
bool enable_attributes=true,
bool remove_ni=true,
bool cleanup=true,
bool warn_missed_transformations=false) {
return {lower_intrinsics, dump_native, external_use, llvm_only,
always_inline, enable_early_simplifications,
enable_early_optimizations, enable_scalar_optimizations,
enable_loop_optimizations, enable_vector_pipeline,
enable_attributes,
remove_ni, cleanup, warn_missed_transformations};
}
};
Expand Down
27 changes: 20 additions & 7 deletions src/pipeline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include <llvm/Transforms/IPO/Annotation2Metadata.h>
#include <llvm/Transforms/IPO/ConstantMerge.h>
#include <llvm/Transforms/IPO/ForceFunctionAttrs.h>
#include <llvm/Transforms/IPO/FunctionAttrs.h>
#include <llvm/Transforms/IPO/GlobalDCE.h>
#include <llvm/Transforms/IPO/GlobalOpt.h>
#include <llvm/Transforms/IPO/StripDeadPrototypes.h>
Expand Down Expand Up @@ -381,9 +382,15 @@ static void buildEarlyOptimizerPipeline(ModulePassManager &MPM, PassBuilder *PB,
if (options.enable_early_optimizations) {
invokeOptimizerEarlyCallbacks(MPM, PB, O);
{
if (O.getSpeedupLevel() >= 2) {
MPM.addPass(RequireAnalysisPass<GlobalsAA, Module>());
MPM.addPass(createModuleToFunctionPassAdaptor(InvalidateAnalysisPass<AAManager>()));
}
CGSCCPassManager CGPM;
invokeCGSCCCallbacks(CGPM, PB, O);
if (O.getSpeedupLevel() >= 2) {
if (options.enable_attributes)
CGPM.addPass(PostOrderFunctionAttrsPass());
FunctionPassManager FPM;
JULIA_PASS(FPM.addPass(AllocOptPass()));
FPM.addPass(Float2IntPass());
Expand All @@ -392,9 +399,6 @@ static void buildEarlyOptimizerPipeline(ModulePassManager &MPM, PassBuilder *PB,
}
MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM)));
}
if (O.getSpeedupLevel() >= 2) {
MPM.addPass(RequireAnalysisPass<GlobalsAA, Module>());
}
// MPM.addPass(createModuleToFunctionPassAdaptor(InvalidateAnalysisPass<AAManager>()));
if (options.dump_native) {
MPM.addPass(StripDeadPrototypesPass());
Expand Down Expand Up @@ -630,13 +634,21 @@ static void buildPipeline(ModulePassManager &MPM, PassBuilder *PB, OptimizationL
{
FunctionPassManager FPM;
buildLoopOptimizerPipeline(FPM, PB, O, options);
buildScalarOptimizerPipeline(FPM, PB, O, options);
MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM)));
if (options.enable_attributes)
MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(PostOrderFunctionAttrsPass()));
FunctionPassManager FPM2;
buildScalarOptimizerPipeline(FPM2, PB, O, options);
MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM2)));
if (options.enable_attributes)
MPM.addPass(ReversePostOrderFunctionAttrsPass());
FunctionPassManager FPM3;
if (O.getSpeedupLevel() >= 2) {
buildVectorPipeline(FPM, PB, O, options);
buildVectorPipeline(FPM3, PB, O, options);
}
if (options.warn_missed_transformations)
FPM.addPass(WarnMissedTransformationsPass());
MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM)));
FPM3.addPass(WarnMissedTransformationsPass());
MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM3)));
}
buildIntrinsicLoweringPipeline(MPM, PB, O, options);
buildCleanupPipeline(MPM, PB, O, options);
Expand Down Expand Up @@ -830,6 +842,7 @@ static std::optional<std::pair<OptimizationLevel, OptimizationOptions>> parseJul
OPTION(enable_scalar_optimizations),
OPTION(enable_loop_optimizations),
OPTION(enable_vector_pipeline),
OPTION(enable_attributes)
OPTION(remove_ni),
OPTION(cleanup),
OPTION(warn_missed_transformations)
Expand Down