From 1e2e89b26fa27f51c4ae85e59dd081e352bf8f7c Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Wed, 19 Apr 2023 16:56:42 -0700 Subject: Disable sign extension in SignExtLowering.cpp (#5676) * Disable sign extension in SignExtLowering.cpp The sign extension lowering pass would previously lower away the sign extension instructions, but it wouldn't disable the sign extension feature, so follow-on passes such as optimize-instructions could reintroduce sign extension instructions. Fix the pass to disable the sign extension feature to prevent sign extension instructions from being reintroduced later. * update pass description --- src/passes/SignExtLowering.cpp | 8 ++++++++ src/passes/pass.cpp | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/passes/SignExtLowering.cpp b/src/passes/SignExtLowering.cpp index 7d03046ea..beb36494f 100644 --- a/src/passes/SignExtLowering.cpp +++ b/src/passes/SignExtLowering.cpp @@ -68,6 +68,14 @@ struct SignExtLowering : public WalkerPass> { } } } + + void run(Module* module) override { + if (!module->features.has(FeatureSet::SignExt)) { + return; + } + super::run(module); + module->features.disable(FeatureSet::SignExt); + } }; Pass* createSignExtLoweringPass() { return new SignExtLowering(); } diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp index d567fee95..ff2c7d45f 100644 --- a/src/passes/pass.cpp +++ b/src/passes/pass.cpp @@ -408,7 +408,8 @@ void PassRegistry::registerPasses() { "apply more specific subtypes to signature types where possible", createSignatureRefiningPass); registerPass("signext-lowering", - "lower sign-ext operations to wasm mvp", + "lower sign-ext operations to wasm mvp and disable the sign " + "extension feature", createSignExtLoweringPass); registerPass("simplify-globals", "miscellaneous globals-related optimizations", -- cgit v1.2.3