From ac886fd3e329a9599ed1ac7a6d8b26ca5821046c Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 4 Oct 2023 11:20:35 -0700 Subject: 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 --- source/slang/slang-ir-ssa-simplification.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 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 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. -- cgit v1.2.3