29
29
#include < llvm/Transforms/IPO/Annotation2Metadata.h>
30
30
#include < llvm/Transforms/IPO/ConstantMerge.h>
31
31
#include < llvm/Transforms/IPO/ForceFunctionAttrs.h>
32
+ #include < llvm/Transforms/IPO/FunctionAttrs.h>
32
33
#include < llvm/Transforms/IPO/GlobalDCE.h>
33
34
#include < llvm/Transforms/IPO/GlobalOpt.h>
34
35
#include < llvm/Transforms/IPO/StripDeadPrototypes.h>
@@ -381,9 +382,15 @@ static void buildEarlyOptimizerPipeline(ModulePassManager &MPM, PassBuilder *PB,
381
382
if (options.enable_early_optimizations ) {
382
383
invokeOptimizerEarlyCallbacks (MPM, PB, O);
383
384
{
385
+ if (O.getSpeedupLevel () >= 2 ) {
386
+ MPM.addPass (RequireAnalysisPass<GlobalsAA, Module>());
387
+ MPM.addPass (createModuleToFunctionPassAdaptor (InvalidateAnalysisPass<AAManager>()));
388
+ }
384
389
CGSCCPassManager CGPM;
385
390
invokeCGSCCCallbacks (CGPM, PB, O);
386
391
if (O.getSpeedupLevel () >= 2 ) {
392
+ if (options.enable_attributes )
393
+ CGPM.addPass (PostOrderFunctionAttrsPass ());
387
394
FunctionPassManager FPM;
388
395
JULIA_PASS (FPM.addPass (AllocOptPass ()));
389
396
FPM.addPass (Float2IntPass ());
@@ -392,9 +399,6 @@ static void buildEarlyOptimizerPipeline(ModulePassManager &MPM, PassBuilder *PB,
392
399
}
393
400
MPM.addPass (createModuleToPostOrderCGSCCPassAdaptor (std::move (CGPM)));
394
401
}
395
- if (O.getSpeedupLevel () >= 2 ) {
396
- MPM.addPass (RequireAnalysisPass<GlobalsAA, Module>());
397
- }
398
402
// MPM.addPass(createModuleToFunctionPassAdaptor(InvalidateAnalysisPass<AAManager>()));
399
403
if (options.dump_native ) {
400
404
MPM.addPass (StripDeadPrototypesPass ());
@@ -630,13 +634,21 @@ static void buildPipeline(ModulePassManager &MPM, PassBuilder *PB, OptimizationL
630
634
{
631
635
FunctionPassManager FPM;
632
636
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;
634
646
if (O.getSpeedupLevel () >= 2 ) {
635
- buildVectorPipeline (FPM , PB, O, options);
647
+ buildVectorPipeline (FPM3 , PB, O, options);
636
648
}
637
649
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 )));
640
652
}
641
653
buildIntrinsicLoweringPipeline (MPM, PB, O, options);
642
654
buildCleanupPipeline (MPM, PB, O, options);
@@ -830,6 +842,7 @@ static std::optional<std::pair<OptimizationLevel, OptimizationOptions>> parseJul
830
842
OPTION (enable_scalar_optimizations),
831
843
OPTION (enable_loop_optimizations),
832
844
OPTION (enable_vector_pipeline),
845
+ OPTION (enable_attributes)
833
846
OPTION (remove_ni),
834
847
OPTION (cleanup),
835
848
OPTION (warn_missed_transformations)
0 commit comments