From 97a719d378f2b3525107ec80920229d0476aadf8 Mon Sep 17 00:00:00 2001 From: gbaraldi Date: Thu, 15 May 2025 13:32:23 -0300 Subject: [PATCH 1/2] Add attribute inference passes to the pipeline. Some passes can use this information (adding readonly to an argument for example) --- src/jitlayers.h | 3 +++ src/pipeline.cpp | 27 ++++++++++++++++++++------- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/jitlayers.h b/src/jitlayers.h index 43fdc9b83b89b..56050a67439bc 100644 --- a/src/jitlayers.h +++ b/src/jitlayers.h @@ -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; @@ -102,6 +103,7 @@ 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) { @@ -109,6 +111,7 @@ struct OptimizationOptions { 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}; } }; diff --git a/src/pipeline.cpp b/src/pipeline.cpp index f91db6fc037d7..24eec1e5e8bb7 100644 --- a/src/pipeline.cpp +++ b/src/pipeline.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -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()); + MPM.addPass(createModuleToFunctionPassAdaptor(InvalidateAnalysisPass())); + } 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()); @@ -392,9 +399,6 @@ static void buildEarlyOptimizerPipeline(ModulePassManager &MPM, PassBuilder *PB, } MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM))); } - if (O.getSpeedupLevel() >= 2) { - MPM.addPass(RequireAnalysisPass()); - } // MPM.addPass(createModuleToFunctionPassAdaptor(InvalidateAnalysisPass())); if (options.dump_native) { MPM.addPass(StripDeadPrototypesPass()); @@ -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); @@ -830,6 +842,7 @@ static std::optional> 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) From 4094d4f43fdf27a68f8b9b05001e8b895c15ffe7 Mon Sep 17 00:00:00 2001 From: gbaraldi Date: Thu, 15 May 2025 13:42:42 -0300 Subject: [PATCH 2/2] Fix typo --- src/pipeline.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pipeline.cpp b/src/pipeline.cpp index 24eec1e5e8bb7..1c6cd2afdc1db 100644 --- a/src/pipeline.cpp +++ b/src/pipeline.cpp @@ -842,7 +842,7 @@ static std::optional> parseJul OPTION(enable_scalar_optimizations), OPTION(enable_loop_optimizations), OPTION(enable_vector_pipeline), - OPTION(enable_attributes) + OPTION(enable_attributes), OPTION(remove_ni), OPTION(cleanup), OPTION(warn_missed_transformations)