Skip to content

Commit 97a719d

Browse files
committed
Add attribute inference passes to the pipeline.
Some passes can use this information (adding readonly to an argument for example)
1 parent d54f9b6 commit 97a719d

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

src/jitlayers.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ struct OptimizationOptions {
8787
bool enable_scalar_optimizations;
8888
bool enable_loop_optimizations;
8989
bool enable_vector_pipeline;
90+
bool enable_attributes;
9091
bool remove_ni;
9192
bool cleanup;
9293
bool warn_missed_transformations;
@@ -102,13 +103,15 @@ struct OptimizationOptions {
102103
bool enable_scalar_optimizations=true,
103104
bool enable_loop_optimizations=true,
104105
bool enable_vector_pipeline=true,
106+
bool enable_attributes=true,
105107
bool remove_ni=true,
106108
bool cleanup=true,
107109
bool warn_missed_transformations=false) {
108110
return {lower_intrinsics, dump_native, external_use, llvm_only,
109111
always_inline, enable_early_simplifications,
110112
enable_early_optimizations, enable_scalar_optimizations,
111113
enable_loop_optimizations, enable_vector_pipeline,
114+
enable_attributes,
112115
remove_ni, cleanup, warn_missed_transformations};
113116
}
114117
};

src/pipeline.cpp

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include <llvm/Transforms/IPO/Annotation2Metadata.h>
3030
#include <llvm/Transforms/IPO/ConstantMerge.h>
3131
#include <llvm/Transforms/IPO/ForceFunctionAttrs.h>
32+
#include <llvm/Transforms/IPO/FunctionAttrs.h>
3233
#include <llvm/Transforms/IPO/GlobalDCE.h>
3334
#include <llvm/Transforms/IPO/GlobalOpt.h>
3435
#include <llvm/Transforms/IPO/StripDeadPrototypes.h>
@@ -381,9 +382,15 @@ static void buildEarlyOptimizerPipeline(ModulePassManager &MPM, PassBuilder *PB,
381382
if (options.enable_early_optimizations) {
382383
invokeOptimizerEarlyCallbacks(MPM, PB, O);
383384
{
385+
if (O.getSpeedupLevel() >= 2) {
386+
MPM.addPass(RequireAnalysisPass<GlobalsAA, Module>());
387+
MPM.addPass(createModuleToFunctionPassAdaptor(InvalidateAnalysisPass<AAManager>()));
388+
}
384389
CGSCCPassManager CGPM;
385390
invokeCGSCCCallbacks(CGPM, PB, O);
386391
if (O.getSpeedupLevel() >= 2) {
392+
if (options.enable_attributes)
393+
CGPM.addPass(PostOrderFunctionAttrsPass());
387394
FunctionPassManager FPM;
388395
JULIA_PASS(FPM.addPass(AllocOptPass()));
389396
FPM.addPass(Float2IntPass());
@@ -392,9 +399,6 @@ static void buildEarlyOptimizerPipeline(ModulePassManager &MPM, PassBuilder *PB,
392399
}
393400
MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM)));
394401
}
395-
if (O.getSpeedupLevel() >= 2) {
396-
MPM.addPass(RequireAnalysisPass<GlobalsAA, Module>());
397-
}
398402
// MPM.addPass(createModuleToFunctionPassAdaptor(InvalidateAnalysisPass<AAManager>()));
399403
if (options.dump_native) {
400404
MPM.addPass(StripDeadPrototypesPass());
@@ -630,13 +634,21 @@ static void buildPipeline(ModulePassManager &MPM, PassBuilder *PB, OptimizationL
630634
{
631635
FunctionPassManager FPM;
632636
buildLoopOptimizerPipeline(FPM, PB, O, options);
633-
buildScalarOptimizerPipeline(FPM, PB, O, options);
637+
MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM)));
638+
if (options.enable_attributes)
639+
MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(PostOrderFunctionAttrsPass()));
640+
FunctionPassManager FPM2;
641+
buildScalarOptimizerPipeline(FPM2, PB, O, options);
642+
MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM2)));
643+
if (options.enable_attributes)
644+
MPM.addPass(ReversePostOrderFunctionAttrsPass());
645+
FunctionPassManager FPM3;
634646
if (O.getSpeedupLevel() >= 2) {
635-
buildVectorPipeline(FPM, PB, O, options);
647+
buildVectorPipeline(FPM3, PB, O, options);
636648
}
637649
if (options.warn_missed_transformations)
638-
FPM.addPass(WarnMissedTransformationsPass());
639-
MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM)));
650+
FPM3.addPass(WarnMissedTransformationsPass());
651+
MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM3)));
640652
}
641653
buildIntrinsicLoweringPipeline(MPM, PB, O, options);
642654
buildCleanupPipeline(MPM, PB, O, options);
@@ -830,6 +842,7 @@ static std::optional<std::pair<OptimizationLevel, OptimizationOptions>> parseJul
830842
OPTION(enable_scalar_optimizations),
831843
OPTION(enable_loop_optimizations),
832844
OPTION(enable_vector_pipeline),
845+
OPTION(enable_attributes)
833846
OPTION(remove_ni),
834847
OPTION(cleanup),
835848
OPTION(warn_missed_transformations)

0 commit comments

Comments
 (0)