[all-commits] [llvm/llvm-project] 4f1244: [WebAssembly] Nullify unnecessary setjmp invokes

Heejin Ahn via All-commits all-commits at lists.llvm.org
Thu Jan 27 21:11:46 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 4f1244d7ccb8a9d1c932e2a7d883d0cd1da9650d
      https://github.com/llvm/llvm-project/commit/4f1244d7ccb8a9d1c932e2a7d883d0cd1da9650d
  Author: Heejin Ahn <aheejin at gmail.com>
  Date:   2022-01-27 (Thu, 27 Jan 2022)

  Changed paths:
    M llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp
    M llvm/test/CodeGen/WebAssembly/lower-em-sjlj.ll
    M llvm/test/CodeGen/WebAssembly/lower-wasm-ehsjlj.ll

  Log Message:
  -----------
  [WebAssembly] Nullify unnecessary setjmp invokes

This is similar to D116619, but now it handles `invoke`s. The reason we
didn't handle `invoke`s back then was we didn't support Wasm EH + Wasm
SjLj together, and the only case SjLj transformation will see `invoke`s
is when we are using Wasm EH. (In Emscripten EH, they would have been
transformed to `call`s to invoke wrappers.)

But after D117610 we support Wasm EH + Wasm SjLj together and we can
nullify `invoke`s to `setjmp` when there is no other longjmpable calls
within the function. Actually this is very unlikely to happen in
practice, because we treat destructors as longjmpable and also treat
`__cxa_end_catch` as longjmpable even if it is not.

Reviewed By: dschuff

Differential Revision: https://reviews.llvm.org/D118408




More information about the All-commits mailing list