summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir-ssa-simplification.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ir-ssa-simplification.cpp')
-rw-r--r--source/slang/slang-ir-ssa-simplification.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/source/slang/slang-ir-ssa-simplification.cpp b/source/slang/slang-ir-ssa-simplification.cpp
index cd0f67186..a71b2c86c 100644
--- a/source/slang/slang-ir-ssa-simplification.cpp
+++ b/source/slang/slang-ir-ssa-simplification.cpp
@@ -64,6 +64,7 @@ namespace Slang
changed |= removeUnusedGenericParam(module);
changed |= applySparseConditionalConstantPropagationForGlobalScope(module, sink);
changed |= peepholeOptimizeGlobalScope(target, module);
+ changed |= trimOptimizableTypes(module);
for (auto inst : module->getGlobalInsts())
{
@@ -74,6 +75,8 @@ namespace Slang
int funcIterationCount = 0;
while (funcChanged && funcIterationCount < kMaxFuncIterations)
{
+
+ eliminateDeadCode(func, options.deadCodeElimOptions);
funcChanged = false;
funcChanged |= applySparseConditionalConstantPropagation(func, sink);
funcChanged |= peepholeOptimize(target, func);
@@ -83,6 +86,8 @@ 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.
+ // Run eliminate-dead-code twice to ensure optimizations are applied on the dce'd code.
+ //
eliminateDeadCode(func, options.deadCodeElimOptions);
if (funcIterationCount == 0)
funcChanged |= constructSSA(func);