From 62b7219e715bd4c0f984bcd98c9767fb6422c78f Mon Sep 17 00:00:00 2001 From: Yong He Date: Fri, 17 May 2024 23:07:36 -0700 Subject: Add `-minimum-slang-optimization` to favor compile time. (#4186) --- source/slang/slang-ir-ssa-simplification.cpp | 30 +++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'source/slang/slang-ir-ssa-simplification.cpp') diff --git a/source/slang/slang-ir-ssa-simplification.cpp b/source/slang/slang-ir-ssa-simplification.cpp index 6a0fb620e..a0224cea5 100644 --- a/source/slang/slang-ir-ssa-simplification.cpp +++ b/source/slang/slang-ir-ssa-simplification.cpp @@ -15,6 +15,27 @@ namespace Slang { + IRSimplificationOptions IRSimplificationOptions::getDefault(TargetProgram* targetProgram) + { + IRSimplificationOptions result; + result.minimalOptimization = targetProgram->getOptionSet().shouldPerformMinimumOptimizations(); + if (result.minimalOptimization) + result.cfgOptions = CFGSimplificationOptions::getFast(); + else + result.cfgOptions = CFGSimplificationOptions::getDefault(); + result.peepholeOptions = PeepholeOptimizationOptions(); + return result; + } + + IRSimplificationOptions IRSimplificationOptions::getFast(TargetProgram* targetProgram) + { + IRSimplificationOptions result; + result.minimalOptimization = targetProgram->getOptionSet().shouldPerformMinimumOptimizations(); + result.cfgOptions = CFGSimplificationOptions::getFast(); + result.peepholeOptions = PeepholeOptimizationOptions(); + return result; + } + // Run a combination of SSA, SCCP, SimplifyCFG, and DeadCodeElimination pass // until no more changes are possible. void simplifyIR(TargetProgram* target, IRModule* module, IRSimplificationOptions options, DiagnosticSink* sink) @@ -50,7 +71,8 @@ namespace Slang funcChanged = false; funcChanged |= applySparseConditionalConstantPropagation(func, sink); funcChanged |= peepholeOptimize(target, func); - funcChanged |= removeRedundancyInFunc(func); + if (!options.minimalOptimization) + funcChanged |= removeRedundancyInFunc(func); funcChanged |= simplifyCFG(func, options.cfgOptions); eliminateDeadCode(func); funcChanged |= constructSSA(func); @@ -78,7 +100,8 @@ namespace Slang changed = false; changed |= peepholeOptimize(target, module, options.peepholeOptions); - changed |= removeRedundancy(module); + if (!options.minimalOptimization) + changed |= removeRedundancy(module); changed |= simplifyCFG(module, options.cfgOptions); // Note: we disregard the `changed` state from dead code elimination pass since @@ -103,7 +126,8 @@ namespace Slang changed = false; changed |= applySparseConditionalConstantPropagation(func, sink); changed |= peepholeOptimize(target, func); - changed |= removeRedundancyInFunc(func); + if (!options.minimalOptimization) + changed |= removeRedundancyInFunc(func); changed |= simplifyCFG(func, options.cfgOptions); // Note: we disregard the `changed` state from dead code elimination pass since -- cgit v1.2.3