summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-ssa-simplification.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-05-29 11:14:22 -0700
committerGitHub <noreply@github.com>2024-05-29 11:14:22 -0700
commit83f176ba8a3bae5533470aed6a90663653f894b8 (patch)
tree3e39a674cb4662c946598526f633302f139e14ab /source/slang/slang-ir-ssa-simplification.cpp
parentc1e34c5a29d99d8a70b4e78313bfd3d539d9206e (diff)
Add options to speedup compilation. (#4240)
* Add options to speedup compilation. * Fix. * Plumb options to DCE pass. * Revert debug change. * Fix regressions. * More optimizations. * more cleanup and fixes. * remove comment. * Fixes. * Another fix. * Fix errors. * Fix errors. * Add comments.
Diffstat (limited to 'source/slang/slang-ir-ssa-simplification.cpp')
-rw-r--r--source/slang/slang-ir-ssa-simplification.cpp27
1 files changed, 17 insertions, 10 deletions
diff --git a/source/slang/slang-ir-ssa-simplification.cpp b/source/slang/slang-ir-ssa-simplification.cpp
index a0224cea5..6c02734b5 100644
--- a/source/slang/slang-ir-ssa-simplification.cpp
+++ b/source/slang/slang-ir-ssa-simplification.cpp
@@ -45,6 +45,8 @@ namespace Slang
const int kMaxIterations = 8;
const int kMaxFuncIterations = 16;
int iterationCounter = 0;
+ IRDeadCodeEliminationOptions dceOptions = IRDeadCodeEliminationOptions();
+ dceOptions.useFastAnalysis = options.minimalOptimization;
while (changed && iterationCounter < kMaxIterations)
{
@@ -74,20 +76,19 @@ namespace Slang
if (!options.minimalOptimization)
funcChanged |= removeRedundancyInFunc(func);
funcChanged |= simplifyCFG(func, options.cfgOptions);
- eliminateDeadCode(func);
- funcChanged |= constructSSA(func);
+ // Note: we disregard the `changed` state from dead code elimination pass since
+ // SCCP pass could be generating temporarily evaluated constant values and never actually use them.
+ // DCE will always remove those nearly generated consts and always returns true here.
+ eliminateDeadCode(func, dceOptions);
+ if (funcIterationCount == 0)
+ funcChanged |= constructSSA(func);
changed |= funcChanged;
funcIterationCount++;
}
}
-
- // Note: we disregard the `changed` state from dead code elimination pass since
- // SCCP pass could be generating temporarily evaluated constant values and never actually use them.
- // DCE will always remove those nearly generated consts and always returns true here.
- eliminateDeadCode(module);
-
iterationCounter++;
}
+ eliminateDeadCode(module, dceOptions);
}
void simplifyNonSSAIR(TargetProgram* target, IRModule* module, IRSimplificationOptions options)
@@ -95,6 +96,9 @@ namespace Slang
bool changed = true;
const int kMaxIterations = 8;
int iterationCounter = 0;
+ IRDeadCodeEliminationOptions dceOptions = IRDeadCodeEliminationOptions();
+ dceOptions.useFastAnalysis = options.minimalOptimization;
+
while (changed && iterationCounter < kMaxIterations)
{
changed = false;
@@ -107,7 +111,7 @@ namespace Slang
// Note: we disregard the `changed` state from dead code elimination pass since
// SCCP pass could be generating temporarily evaluated constant values and never actually use them.
// DCE will always remove those nearly generated consts and always returns true here.
- eliminateDeadCode(module);
+ eliminateDeadCode(module, dceOptions);
iterationCounter++;
}
}
@@ -115,6 +119,9 @@ namespace Slang
void simplifyFunc(TargetProgram* target, IRGlobalValueWithCode* func, IRSimplificationOptions options, DiagnosticSink* sink)
{
+ IRDeadCodeEliminationOptions dceOptions = IRDeadCodeEliminationOptions();
+ dceOptions.useFastAnalysis = options.minimalOptimization;
+
bool changed = true;
const int kMaxIterations = 8;
int iterationCounter = 0;
@@ -133,7 +140,7 @@ namespace Slang
// Note: we disregard the `changed` state from dead code elimination pass since
// SCCP pass could be generating temporarily evaluated constant values and never actually use them.
// DCE will always remove those nearly generated consts and always returns true here.
- eliminateDeadCode(func);
+ eliminateDeadCode(func, dceOptions);
changed |= constructSSA(func);