forked from WebAssembly/binaryen
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[EH] Add --experimental-new-eh option to wasm-opt (WebAssembly#6270)
This adds `--experimental-new-eh` option to `wasm-opt`. The difference between this and `--translate-to-new-eh` is, `--translate-to-new-eh` just runs `TranslateToNewEH` pass, while `--experimental-new-eh` attaches `TranslateToNewEH` pass at the end of the whole optimization pipeline. So if no other passes or optimization options (`-On`) are specified, it is equivalent to `--translate-to-new-eh`. If other optimization passes are specified, it runs them and at the end run the translator to ensure the new EH instructions are emitted. The reason we are doing this this way is that the optimization pipeline as a whole does not support the new EH instruction yet, but we would like to provide an option to emit a reasonably OK code with the new EH instructions. This also means when the optimization level > 3, it will also run the StackIR + local2stack optimization after the translation. Not sure how to test the output of this option, given that there is not much point in testing the default optimization passes, and it is also not clear how to print the stack IR if the stack ir generation and optimization runs as a part of the pipeline and not the explicit command line options. This is created in favor of WebAssembly#6267, which added the option to `optimization-options.h`. It had a problem of running the translator multiple times when `-On` was given multiple times in the command line, which I learned was rather a common usage. This adds the option directly to `wasm-opt.cpp`, which avoids the problem. With this, it is still possible to create and optimize Stack IR unnecessarily, but that feels a better alternative.
- Loading branch information
Showing
3 changed files
with
74 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
;; When given alone, --experimental-new-eh just runs --translate-to-new-eh | ||
;; RUN: wasm-opt %s -all --translate-to-new-eh -S -o %a.wasm | ||
;; RUN: wasm-opt %s -all --experimental-new-eh -S -o %b.wasm | ||
;; RUN: diff %a.wasm %b.wasm | ||
|
||
;; When given with other flags, --experimental-new-eh runs the translator after | ||
;; running other passes. If --optimize-level >=3, --experimenal-new-eh also runs | ||
;; StackIR (+ local2stack) optimization. So running '-O --experimental-new-eh' | ||
;; should be the same as running all these passes separately. | ||
;; RUN: wasm-opt %s -all -O --translate-to-new-eh --optimize-level=3 --generate-stack-ir --optimize-stack-ir -o %a.wasm | ||
;; RUN: wasm-opt %s -all -O --experimental-new-eh -o %b.wasm | ||
;; RUN: diff %a.wasm %b.wasm | ||
|
||
(module | ||
(import "env" "foo" (func $foo)) | ||
(start $test) | ||
(func $test | ||
(try $l | ||
(do | ||
(call $foo) | ||
) | ||
(catch_all | ||
(call $foo) | ||
(rethrow $l) | ||
) | ||
) | ||
) | ||
) |