summaryrefslogtreecommitdiff
path: root/src/ir/local-utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ir/local-utils.h')
-rw-r--r--src/ir/local-utils.h18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/ir/local-utils.h b/src/ir/local-utils.h
index c2a99b5af..0eba31889 100644
--- a/src/ir/local-utils.h
+++ b/src/ir/local-utils.h
@@ -45,18 +45,23 @@ struct UnneededSetRemover : public PostWalker<UnneededSetRemover> {
PassOptions& passOptions;
LocalGetCounter* localGetCounter = nullptr;
+ FeatureSet features;
- UnneededSetRemover(Function* func, PassOptions& passOptions)
- : passOptions(passOptions) {
+ UnneededSetRemover(Function* func,
+ PassOptions& passOptions,
+ FeatureSet features)
+ : passOptions(passOptions), features(features) {
LocalGetCounter counter(func);
- UnneededSetRemover inner(counter, func, passOptions);
+ UnneededSetRemover inner(counter, func, passOptions, features);
removed = inner.removed;
}
UnneededSetRemover(LocalGetCounter& localGetCounter,
Function* func,
- PassOptions& passOptions)
- : passOptions(passOptions), localGetCounter(&localGetCounter) {
+ PassOptions& passOptions,
+ FeatureSet features)
+ : passOptions(passOptions), localGetCounter(&localGetCounter),
+ features(features) {
walk(func->body);
}
@@ -91,7 +96,8 @@ struct UnneededSetRemover : public PostWalker<UnneededSetRemover> {
auto* value = set->value;
if (set->isTee()) {
replaceCurrent(value);
- } else if (EffectAnalyzer(passOptions, set->value).hasSideEffects()) {
+ } else if (EffectAnalyzer(passOptions, features, set->value)
+ .hasSideEffects()) {
Drop* drop = ExpressionManipulator::convert<LocalSet, Drop>(set);
drop->value = value;
drop->finalize();