diff options
Diffstat (limited to 'src/ir/local-utils.h')
-rw-r--r-- | src/ir/local-utils.h | 18 |
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(); |