llvm-project/llvm/test/CodeGen/WebAssembly
Heejin Ahn d6f487863d [WebAssembly] Exception handling: Switch to the new proposal
Summary:
This switches the EH implementation to the new proposal:
https://github.com/WebAssembly/exception-handling/blob/master/proposals/Exceptions.md
(The previous proposal was
 https://github.com/WebAssembly/exception-handling/blob/master/proposals/old/Exceptions.md)

- Instruction changes
  - Now we have one single `catch` instruction that returns a except_ref
    value
  - `throw` now can take variable number of operations
  - `rethrow` does not have 'depth' argument anymore
  - `br_on_exn` queries an except_ref to see if it matches the tag and
    branches to the given label if true.
  - `extract_exception` is a pseudo instruction that simulates popping
    values from wasm stack. This is to make `br_on_exn`, a very special
    instruction, work: `br_on_exn` puts values onto the stack only if it
    is taken, and the # of values can vay depending on the tag.

- Now there's only one `catch` per `try`, this patch removes all special
  handling for terminate pad with a call to `__clang_call_terminate`.
  Before it was the only case there are two catch clauses (a normal
  `catch` and `catch_all` per `try`).

- Make `rethrow` act as a terminator like `throw`. This splits BB after
  `rethrow` in WasmEHPrepare, and deletes an unnecessary `unreachable`
  after `rethrow` in LateEHPrepare.

- Now we stop at all catchpads (because we add wasm `catch` instruction
  that catches all exceptions), this creates new
  `findWasmUnwindDestinations` function in SelectionDAGBuilder.

- Now we use `br_on_exn` instrution to figure out if an except_ref
  matches the current tag or not, LateEHPrepare generates this sequence
  for catch pads:
```
  catch
  block i32
  br_on_exn $__cpp_exception
  end_block
  extract_exception
```

- Branch analysis for `br_on_exn` in WebAssemblyInstrInfo

- Other various misc. changes to switch to the new proposal.

Reviewers: dschuff

Subscribers: sbc100, jgravelle-google, sunfish, llvm-commits

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

llvm-svn: 352598
2019-01-30 03:21:57 +00:00
..
PR40172.ll [WebAssembly][FastISel] Do not assume naive CmpInst lowering 2019-01-14 22:03:43 +00:00
add-prototypes.ll [WebAssembly] Handle more types of uses in WebAssemblyAddMissingPrototypes 2019-01-29 00:30:46 +00:00
address-offsets.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
atomic-mem-consistency.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
atomic-rmw.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
byval.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
call.ll [WebAssembly] Re-enable main-function signature rewriting 2019-01-29 10:53:42 +00:00
cfg-stackify-dbg-skip.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
cfg-stackify-eh.ll [WebAssembly] Exception handling: Switch to the new proposal 2019-01-30 03:21:57 +00:00
cfg-stackify.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
cfi.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
comparisons-f32.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
comparisons-f64.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
comparisons-i32.ll [WebAssembly][FastISel] Do not assume naive CmpInst lowering 2019-01-14 22:03:43 +00:00
comparisons-i64.ll [WebAssembly][FastISel] Do not assume naive CmpInst lowering 2019-01-14 22:03:43 +00:00
conv-trap.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
conv.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
copysign-casts.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
cpus.ll [WebAsembly] Update default triple in test files to wasm32-unknown-unkown. 2018-05-10 17:49:11 +00:00
custom-sections.ll [WebAssembly] Add languages from debug info to producers section 2019-01-18 02:47:48 +00:00
dbgvalue.ll [WebAsembly] Update default triple in test files to wasm32-unknown-unkown. 2018-05-10 17:49:11 +00:00
dead-vreg.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
divrem-constant.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
eh-lsda.ll Reland "[WebAssembly] LSDA info generation" 2018-10-25 23:55:10 +00:00
exception.ll [WebAssembly] Exception handling: Switch to the new proposal 2019-01-30 03:21:57 +00:00
explicit-locals.mir [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
f16.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
f32.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
f64.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
fast-isel-br-i1.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
fast-isel-i24.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
fast-isel-i256.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
fast-isel-noreg.ll [WebAssembly][FastISel] Do not assume naive CmpInst lowering 2019-01-14 22:03:43 +00:00
fast-isel.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
frem.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
func.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
function-bitcasts-varargs.ll [WebAssembly] Re-enable main-function signature rewriting 2019-01-29 10:53:42 +00:00
function-bitcasts.ll [WebAssembly] Re-enable main-function signature rewriting 2019-01-29 10:53:42 +00:00
global.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
globl.ll [WebAsembly] Update default triple in test files to wasm32-unknown-unkown. 2018-05-10 17:49:11 +00:00
i32-load-store-alignment.ll Fix typo in comment 2019-01-09 14:20:20 +00:00
i32.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
i64-load-store-alignment.ll Fix typo in comment 2019-01-09 14:20:20 +00:00
i64.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
i128-returned.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
i128.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
ident.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
immediates.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
implicit-def.ll [WebAssembly] Emit a splat for v128 IMPLICIT_DEF 2018-12-20 04:20:32 +00:00
import-module.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
indirect-import.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
inline-asm-m.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
inline-asm-roundtrip.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
inline-asm.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
irreducible-cfg-exceptions.ll [WebAssembly] Optimize Irreducible Control Flow 2019-01-03 23:10:11 +00:00
irreducible-cfg-nested.ll [WebAssembly] Optimize Irreducible Control Flow 2019-01-03 23:10:11 +00:00
irreducible-cfg-nested2.ll [WebAssembly] Optimize Irreducible Control Flow 2019-01-03 23:10:11 +00:00
irreducible-cfg.ll [WebAssembly] Optimize Irreducible Control Flow 2019-01-03 23:10:11 +00:00
legalize.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
libcalls.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
lit.local.cfg
load-ext-atomic.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
load-ext.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
load-store-i1.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
load.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
lower-em-ehsjlj-options.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
lower-em-exceptions-whitelist.ll [WebAsembly] Update default triple in test files to wasm32-unknown-unkown. 2018-05-10 17:49:11 +00:00
lower-em-exceptions.ll [WebAssembly] WebAssemblyLowerEmscriptenEHSjLj: use getter/setter for accessing tempRet0 2018-11-20 19:25:07 +00:00
lower-em-sjlj-longjmp-only.ll [WebAssembly] Fix LowerEmscriptenEHSjLj when there's only longjmp 2018-11-08 22:56:26 +00:00
lower-em-sjlj.ll [WebAssembly] WebAssemblyLowerEmscriptenEHSjLj: use getter/setter for accessing tempRet0 2018-11-20 19:25:07 +00:00
lower-global-dtors.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
main-declaration.ll [WebAssembly] Re-enable main-function signature rewriting 2019-01-29 10:53:42 +00:00
main-no-args.ll [WebAssembly] Re-enable main-function signature rewriting 2019-01-29 10:53:42 +00:00
main-three-args.ll [WebAssembly] Re-enable main-function signature rewriting 2019-01-29 10:53:42 +00:00
main-with-args.ll [WebAssembly] Re-enable main-function signature rewriting 2019-01-29 10:53:42 +00:00
mem-intrinsics.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
memory-addr32.ll [WebAssembly] Remove tests for old intrinsics. 2019-01-14 18:25:29 +00:00
muloti4.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
negative-base-reg.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
non-executable-stack.ll [WebAsembly] Update default triple in test files to wasm32-unknown-unkown. 2018-05-10 17:49:11 +00:00
null-streamer.ll [WebAssembly] Add null streamer support 2018-11-18 11:58:47 +00:00
offset-atomics.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
offset-fastisel.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
offset-folding.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
offset.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
phi.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
reg-stackify.ll [WebAssembly] Fix stack pointer store check in RegStackify 2019-01-10 23:12:07 +00:00
regcopy.mir [WebAssembly] Add V128 to WebAssemblyInstrInfo::copyPhysReg 2018-11-08 02:35:28 +00:00
return-int32.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
return-void.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
returned.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
select.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
signext-arg.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
signext-inreg.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
signext-zeroext.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
simd-arith.ll [WebAssembly] Expand SIMD shifts while V8's implementation disagrees 2019-01-15 02:16:03 +00:00
simd-bitcasts.ll [WebAssembly] Add unimplemented-simd128 subtarget feature 2019-01-10 22:32:11 +00:00
simd-build-pair.ll [WebAssembly] Expand BUILD_PAIR nodes 2019-01-28 23:44:31 +00:00
simd-build-vector.ll [WebAssembly] Optimize BUILD_VECTOR lowering for size 2019-01-30 02:23:29 +00:00
simd-comparisons.ll [WebAssembly] Add unimplemented-simd128 subtarget feature 2019-01-10 22:32:11 +00:00
simd-conversions.ll [WebAssembly] Add unimplemented-simd128 subtarget feature 2019-01-10 22:32:11 +00:00
simd-ext-load-trunc-store.ll [WebAssembly] Add unimplemented-simd128 subtarget feature 2019-01-10 22:32:11 +00:00
simd-intrinsics.ll [WebAssembly] Add unimplemented-simd128 subtarget feature 2019-01-10 22:32:11 +00:00
simd-load-store-alignment.ll [WebAssembly] Add unimplemented-simd128 subtarget feature 2019-01-10 22:32:11 +00:00
simd-nested-shuffles.ll [WebAssembly] Fix invalid machine instrs in -O0, verify in tests 2018-12-21 06:58:15 +00:00
simd-noopt.ll [WebAssembly][NFC] Elaborate on simd-noopt test comment 2019-01-02 20:43:08 +00:00
simd-offset.ll [WebAssembly] Add unimplemented-simd128 subtarget feature 2019-01-10 22:32:11 +00:00
simd-scalar-to-vector.ll [WebAssembly] Lower SCALAR_TO_VECTOR to splats 2019-01-29 23:44:48 +00:00
simd-select.ll [WebAssembly] Add unimplemented-simd128 subtarget feature 2019-01-10 22:32:11 +00:00
simd-sext-inreg.ll [WebAssembly] Add unimplemented-simd128 subtarget feature 2019-01-10 22:32:11 +00:00
simd.ll [WebAssembly] Add unimplemented-simd128 subtarget feature 2019-01-10 22:32:11 +00:00
stack-alignment.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
stack-insts.ll [WebAssembly] Fix assembler parsing of br_table. 2018-12-17 22:04:44 +00:00
store-trunc-atomic.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
store-trunc.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
store.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
switch.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
tls.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
umulo-128-legalisation-lowering.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
umulo-i64.ll [WebAssembly] Added default stack-only instruction mode for MC. 2018-08-27 15:45:51 +00:00
unreachable.ll [WebAsembly] Update default triple in test files to wasm32-unknown-unkown. 2018-05-10 17:49:11 +00:00
unsupported-function-bitcasts.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
unused-argument.ll [WebAssembly] replaced .param/.result by .functype 2018-11-19 17:10:36 +00:00
userstack.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
varargs.ll [WebAssembly] Massive instruction renaming 2019-01-08 06:25:55 +00:00
vector-sdiv.ll [WebAssembly] Convert remaining tests from elf to wasm output format 2018-07-02 16:03:49 +00:00
vtable.ll [WebAssembly] Default to static reloc model 2018-11-16 18:59:51 +00:00
wasmehprepare.ll [WebAssembly] Exception handling: Switch to the new proposal 2019-01-30 03:21:57 +00:00