summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-ssa-simplification.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-05-17 23:07:36 -0700
committerGitHub <noreply@github.com>2024-05-17 23:07:36 -0700
commit62b7219e715bd4c0f984bcd98c9767fb6422c78f (patch)
tree114cc03a796c582882eb649948e64172af636780 /source/slang/slang-ir-ssa-simplification.cpp
parent40360431dfac9ec122a0300471d42be9d265f452 (diff)
Add `-minimum-slang-optimization` to favor compile time. (#4186)
Diffstat (limited to 'source/slang/slang-ir-ssa-simplification.cpp')
-rw-r--r--source/slang/slang-ir-ssa-simplification.cpp30
1 files changed, 27 insertions, 3 deletions
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