diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/passes/TranslateEH.cpp | 8 | ||||
-rw-r--r-- | src/passes/pass.cpp | 7 | ||||
-rw-r--r-- | src/passes/passes.h | 2 | ||||
-rw-r--r-- | src/tools/wasm-opt.cpp | 23 |
4 files changed, 22 insertions, 18 deletions
diff --git a/src/passes/TranslateEH.cpp b/src/passes/TranslateEH.cpp index 42cea6199..3d2f01510 100644 --- a/src/passes/TranslateEH.cpp +++ b/src/passes/TranslateEH.cpp @@ -15,7 +15,7 @@ */ // -// TranslateToNewEH translates the old Phase 3 EH instructions, which include +// TranslateToExnref translates the old Phase 3 EH instructions, which include // try, catch, catch_all, delegate, and rethrow, into the new EH instructions, // which include try_table (with catch / catch_ref / catch_all / catch_all_ref) // and throw_ref, passed at the Oct 2023 CG meeting. This translator can be used @@ -39,7 +39,7 @@ namespace { // Translates the old EH instructions (try / catch / catch_all / delegate / // rethrow) into the new ones (try_table (+ catch / catch_ref / catch_all / // catch_all_ref) / throw_ref). -struct TranslateToNewEH : public WalkerPass<PostWalker<TranslateToNewEH>> { +struct TranslateToExnref : public WalkerPass<PostWalker<TranslateToExnref>> { bool isFunctionParallel() override { return true; } // Scans and records which try labels are targeted by delegates and rethrows. @@ -195,7 +195,7 @@ struct TranslateToNewEH : public WalkerPass<PostWalker<TranslateToNewEH>> { std::unordered_map<Type, Index> typeToScratchLocal; std::unique_ptr<Pass> create() override { - return std::make_unique<TranslateToNewEH>(); + return std::make_unique<TranslateToExnref>(); } // Get a scratch local for a given type. These locals are used to contain @@ -814,6 +814,6 @@ struct TranslateToNewEH : public WalkerPass<PostWalker<TranslateToNewEH>> { } // namespace -Pass* createTranslateToNewEHPass() { return new TranslateToNewEH(); } +Pass* createTranslateToExnrefPass() { return new TranslateToExnref(); } } // namespace wasm diff --git a/src/passes/pass.cpp b/src/passes/pass.cpp index c5a2bcc55..5e5ee04a4 100644 --- a/src/passes/pass.cpp +++ b/src/passes/pass.cpp @@ -501,8 +501,11 @@ void PassRegistry::registerPasses() { "strip the wasm target features section", createStripTargetFeaturesPass); registerPass("translate-to-new-eh", - "translate old EH instructions to new ones", - createTranslateToNewEHPass); + "deprecated; same as translate-to-exnref", + createTranslateToExnrefPass); + registerPass("translate-to-exnref", + "translate old Phase 3 EH instructions to new ones with exnref", + createTranslateToExnrefPass); registerPass("trap-mode-clamp", "replace trapping operations with clamping semantics", createTrapModeClamp); diff --git a/src/passes/passes.h b/src/passes/passes.h index ac3e1ef29..88e0a7ccc 100644 --- a/src/passes/passes.h +++ b/src/passes/passes.h @@ -166,7 +166,7 @@ Pass* createStripEHPass(); Pass* createStubUnsupportedJSOpsPass(); Pass* createSSAifyPass(); Pass* createSSAifyNoMergePass(); -Pass* createTranslateToNewEHPass(); +Pass* createTranslateToExnrefPass(); Pass* createTrapModeClamp(); Pass* createTrapModeJS(); Pass* createTupleOptimizationPass(); diff --git a/src/tools/wasm-opt.cpp b/src/tools/wasm-opt.cpp index cb6d0bcec..73908afb7 100644 --- a/src/tools/wasm-opt.cpp +++ b/src/tools/wasm-opt.cpp @@ -91,7 +91,7 @@ int main(int argc, const char* argv[]) { std::string inputSourceMapFilename; std::string outputSourceMapFilename; std::string outputSourceMapUrl; - bool experimentalNewEH = false; + bool emitExnref = false; const std::string WasmOptOption = "wasm-opt options"; @@ -241,15 +241,19 @@ int main(int argc, const char* argv[]) { }) .add("--experimental-new-eh", "", + "Deprecated; same as --emit-exnref", + WasmOptOption, + Options::Arguments::Zero, + [&emitExnref](Options*, const std::string&) { emitExnref = true; }) + .add("--emit-exnref", + "", "After running all requested transformations / optimizations, " "translate the instruction to use the new EH instructions at the end. " "Depending on the optimization level specified, this may do some more " "post-translation optimizations.", WasmOptOption, Options::Arguments::Zero, - [&experimentalNewEH](Options*, const std::string&) { - experimentalNewEH = true; - }); + [&emitExnref](Options*, const std::string&) { emitExnref = true; }); options.parse(argc, argv); Module wasm; @@ -356,11 +360,10 @@ int main(int argc, const char* argv[]) { std::cout << "[extra-fuzz-command first output:]\n" << firstOutput << '\n'; } - bool translateToNewEH = - wasm.features.hasExceptionHandling() && experimentalNewEH; + bool translateToExnref = wasm.features.hasExceptionHandling() && emitExnref; if (!options.runningPasses()) { - if (!options.quiet && !translateToNewEH) { + if (!options.quiet && !translateToExnref) { std::cerr << "warning: no passes specified, not doing any work\n"; } } else { @@ -397,12 +400,10 @@ int main(int argc, const char* argv[]) { } } - if (translateToNewEH) { + if (translateToExnref) { BYN_TRACE("translating to new EH instructions...\n"); PassRunner runner(&wasm, options.passOptions); - runner.add("translate-to-new-eh"); - // Perform Stack IR optimizations here, at the very end of the - // optimization pipeline. + runner.add("translate-to-exnref"); runner.run(); if (options.passOptions.validate) { bool valid = WasmValidator().validate(wasm, options.passOptions); |