summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-ssa-simplification.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-10-04 11:20:35 -0700
committerGitHub <noreply@github.com>2023-10-04 11:20:35 -0700
commitac886fd3e329a9599ed1ac7a6d8b26ca5821046c (patch)
tree87bcafb3985775f9d90303d6a4239eb743164407 /source/slang/slang-ir-ssa-simplification.cpp
parentd87493a46c00be37b820a473c0827bbb865eb222 (diff)
SPIRV compiler performance fixes. (#3258)
* SPIRV compiler performance fixes. * Cleanup. * update project files * Cleanup debug code. * Make redundancy removal non-recursive. --------- Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-ir-ssa-simplification.cpp')
-rw-r--r--source/slang/slang-ir-ssa-simplification.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/source/slang/slang-ir-ssa-simplification.cpp b/source/slang/slang-ir-ssa-simplification.cpp
index dbef20732..104ce05e4 100644
--- a/source/slang/slang-ir-ssa-simplification.cpp
+++ b/source/slang/slang-ir-ssa-simplification.cpp
@@ -11,12 +11,13 @@
#include "slang-ir-redundancy-removal.h"
#include "slang-ir-propagate-func-properties.h"
#include "../core/slang-performance-profiler.h"
+#include "slang-ir-util.h"
namespace Slang
{
// Run a combination of SSA, SCCP, SimplifyCFG, and DeadCodeElimination pass
// until no more changes are possible.
- void simplifyIR(IRModule* module, DiagnosticSink* sink)
+ void simplifyIR(IRModule* module, IRSimplificationOptions options, DiagnosticSink* sink)
{
SLANG_PROFILE;
bool changed = true;
@@ -50,7 +51,7 @@ namespace Slang
funcChanged |= applySparseConditionalConstantPropagation(func, sink);
funcChanged |= peepholeOptimize(func);
funcChanged |= removeRedundancyInFunc(func);
- funcChanged |= simplifyCFG(func);
+ funcChanged |= simplifyCFG(func, options.cfgOptions);
eliminateDeadCode(func);
funcChanged |= constructSSA(func);
changed |= funcChanged;
@@ -67,7 +68,7 @@ namespace Slang
}
}
- void simplifyNonSSAIR(IRModule* module)
+ void simplifyNonSSAIR(IRModule* module, IRSimplificationOptions options)
{
bool changed = true;
const int kMaxIterations = 8;
@@ -76,20 +77,20 @@ namespace Slang
{
changed = false;
changed |= peepholeOptimize(module);
+
changed |= removeRedundancy(module);
- changed |= simplifyCFG(module);
+ changed |= simplifyCFG(module, options.cfgOptions);
// 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++;
}
}
- void simplifyFunc(IRGlobalValueWithCode* func, DiagnosticSink* sink)
+ void simplifyFunc(IRGlobalValueWithCode* func, IRSimplificationOptions options, DiagnosticSink* sink)
{
bool changed = true;
const int kMaxIterations = 8;
@@ -103,7 +104,7 @@ namespace Slang
changed |= applySparseConditionalConstantPropagation(func, sink);
changed |= peepholeOptimize(func);
changed |= removeRedundancyInFunc(func);
- changed |= simplifyCFG(func);
+ changed |= simplifyCFG(func, options.cfgOptions);
// 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.