summaryrefslogtreecommitdiff
path: root/source/slang/slang-ir-ssa-simplification.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-06-12 09:27:14 -0700
committerGitHub <noreply@github.com>2024-06-12 09:27:14 -0700
commitfa8c11ebe8f9b1bf2174a5a4dbe92a34c16811c8 (patch)
tree1da9ed028486e9de5a2129143ea436014a063d7c /source/slang/slang-ir-ssa-simplification.cpp
parent3fe4a77287345c303aeb985e24ee237f272e8eca (diff)
Add option to preserve shader parameter declaration in output SPIRV. (#4344)
* Add option to preserve shader parameter declarations in output. * Add test.
Diffstat (limited to 'source/slang/slang-ir-ssa-simplification.cpp')
-rw-r--r--source/slang/slang-ir-ssa-simplification.cpp21
1 files changed, 10 insertions, 11 deletions
diff --git a/source/slang/slang-ir-ssa-simplification.cpp b/source/slang/slang-ir-ssa-simplification.cpp
index 2a9c0da43..b8d6360ad 100644
--- a/source/slang/slang-ir-ssa-simplification.cpp
+++ b/source/slang/slang-ir-ssa-simplification.cpp
@@ -24,6 +24,9 @@ namespace Slang
else
result.cfgOptions = CFGSimplificationOptions::getDefault();
result.peepholeOptions = PeepholeOptimizationOptions();
+ if (targetProgram)
+ result.deadCodeElimOptions.keepGlobalParamsAlive = targetProgram->getOptionSet().getBoolOption(CompilerOptionName::PreserveParameters);
+ result.deadCodeElimOptions.useFastAnalysis = result.minimalOptimization;
return result;
}
@@ -33,6 +36,9 @@ namespace Slang
result.minimalOptimization = targetProgram ? targetProgram->getOptionSet().shouldPerformMinimumOptimizations() : false;
result.cfgOptions = CFGSimplificationOptions::getFast();
result.peepholeOptions = PeepholeOptimizationOptions();
+ if (targetProgram)
+ result.deadCodeElimOptions.keepGlobalParamsAlive = targetProgram->getOptionSet().getBoolOption(CompilerOptionName::PreserveParameters);
+ result.deadCodeElimOptions.useFastAnalysis = result.minimalOptimization;
return result;
}
@@ -45,8 +51,6 @@ namespace Slang
const int kMaxIterations = 8;
const int kMaxFuncIterations = 16;
int iterationCounter = 0;
- IRDeadCodeEliminationOptions dceOptions = IRDeadCodeEliminationOptions();
- dceOptions.useFastAnalysis = options.minimalOptimization;
while (changed && iterationCounter < kMaxIterations)
{
@@ -79,7 +83,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, dceOptions);
+ eliminateDeadCode(func, options.deadCodeElimOptions);
if (funcIterationCount == 0)
funcChanged |= constructSSA(func);
changed |= funcChanged;
@@ -88,7 +92,7 @@ namespace Slang
}
iterationCounter++;
}
- eliminateDeadCode(module, dceOptions);
+ eliminateDeadCode(module, options.deadCodeElimOptions);
}
void simplifyNonSSAIR(TargetProgram* target, IRModule* module, IRSimplificationOptions options)
@@ -96,8 +100,6 @@ namespace Slang
bool changed = true;
const int kMaxIterations = 8;
int iterationCounter = 0;
- IRDeadCodeEliminationOptions dceOptions = IRDeadCodeEliminationOptions();
- dceOptions.useFastAnalysis = options.minimalOptimization;
while (changed && iterationCounter < kMaxIterations)
{
@@ -111,7 +113,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, dceOptions);
+ eliminateDeadCode(module, options.deadCodeElimOptions);
iterationCounter++;
}
}
@@ -119,9 +121,6 @@ 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;
@@ -140,7 +139,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, dceOptions);
+ eliminateDeadCode(func, options.deadCodeElimOptions);
changed |= constructSSA(func);