diff --git a/include/public/marco/Frontend/CodegenOptions.h b/include/public/marco/Frontend/CodegenOptions.h index 610f31c67..a83debfa3 100644 --- a/include/public/marco/Frontend/CodegenOptions.h +++ b/include/public/marco/Frontend/CodegenOptions.h @@ -26,6 +26,7 @@ namespace marco::frontend bool cse = false; bool equationsRuntimeScheduling = false; bool omp = false; + bool singleValuedInductionElimination = false; bool loopFusion = false; bool loopCoalescing = false; bool loopTiling = false; diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 1a8caa124..5f329779d 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -508,6 +508,7 @@ static void parseCodegenArgs(marco::frontend::CodegenOptions &options, if (options.optLevel.getSpeedupLevel() > 0) { options.debug = false; options.assertions = false; + options.singleValuedInductionElimination = true; } if (options.optLevel.getSpeedupLevel() > 1) { @@ -525,6 +526,7 @@ static void parseCodegenArgs(marco::frontend::CodegenOptions &options, if (options.optLevel.getSizeLevel() > 0) { options.debug = false; options.cse = true; + options.singleValuedInductionElimination = true; options.loopFusion = true; options.loopCoalescing = true; } diff --git a/lib/Frontend/FrontendActions.cpp b/lib/Frontend/FrontendActions.cpp index db68b131b..6e1d03383 100644 --- a/lib/Frontend/FrontendActions.cpp +++ b/lib/Frontend/FrontendActions.cpp @@ -824,7 +824,11 @@ void CodeGenAction::buildMLIRLoweringPipeline(mlir::PassManager &pm) { pm.addPass(mlir::createCanonicalizerPass()); pm.addPass(mlir::bmodelica::createMatchingPass()); pm.addPass(mlir::bmodelica::createEquationAccessSplitPass()); - pm.addPass(mlir::bmodelica::createSingleValuedInductionEliminationPass()); + + if (ci.getCodeGenOptions().singleValuedInductionElimination) { + pm.addPass(mlir::bmodelica::createSingleValuedInductionEliminationPass()); + } + pm.addPass(mlir::bmodelica::createSCCDetectionPass()); if (ci.getCodeGenOptions().variablesToParametersPromotion) { @@ -837,7 +841,10 @@ void CodeGenAction::buildMLIRLoweringPipeline(mlir::PassManager &pm) { // Simplify the possibly complex accesses introduced by equations // substitutions. pm.addPass(mlir::createCanonicalizerPass()); - pm.addPass(mlir::bmodelica::createSingleValuedInductionEliminationPass()); + + if (ci.getCodeGenOptions().singleValuedInductionElimination) { + pm.addPass(mlir::bmodelica::createSingleValuedInductionEliminationPass()); + } // Apply the selected solver. pm.addPass(