[clang] [llvm] [WebAssembly] Implement an alternative translation for -wasm-enable-sjlj (PR #84137)

Heejin Ahn via cfe-commits cfe-commits at lists.llvm.org
Fri Mar 8 23:26:22 PST 2024


https://github.com/aheejin commented:

Nice work! Sorry for the late reply. I thought we needed the table because we need to distinguish two different calls from the same function, for example, if `foo` calls `setjmp` and also recursively calls `foo` again, so the same callsite can have two different `setjmpId` (e.g., https://github.com/emscripten-core/emscripten/blob/main/test/core/test_longjmp3.c). But this fixes that problem by adding `function_invocation_id`, which is simpler and nicer.

I also ran all Emscripten SjLj tests with this implementation (+ your `rt.c`) and all of them seemed to pass. 🎉

---

I left some inline comments. 

+ Given that we don't need `setjmpTableSize` anymore and `setjmpTable` doesn't change, we don't need the whole block here from line 1463 ~ line 1503 doing SSA updates anymore: 
https://github.com/llvm/llvm-project/blob/578e66ac45dfcc5c739f3525bfb82d71282d925c/llvm/lib/Target/WebAssembly/WebAssemblyLowerEmscriptenEHSjLj.cpp#L1409-L1449

So you can wrap this part with `(!EnableWasmAltSjLj)`.

https://github.com/llvm/llvm-project/pull/84137


More information about the cfe-commits mailing list