[WebAssembly] Update basic EH instructions for the new spec

Authored by aheejin on Dec 26 2020, 2:27 AM.


[WebAssembly] Update basic EH instructions for the new spec

This implements basic instructions for the new spec.

  • Adds new versions of instructions: catch, catch_all, and rethrow
  • Adds support for instruction selection for the new instructions
    • catch needs a custom routine for the same reason throw needs one, to encode __cpp_exception tag symbol.
  • Updates WebAssembly::isCatch utility function to include catch_all and Change code that compares an instruction's opcode with catch to use that function.
  • LateEHPrepare
    • Previously in LateEHPrepare we added catch instruction to both catchpads (for user catches) and cleanuppads (for destructors). In the new version catch is generated from llvm.catch intrinsic in instruction selection phase, so we only need to add catch_all to the beginning of cleanup pads.
    • catch is generated from instruction selection, but we need to hoist the catch instruction to the beginning of every EH pad, because catch can be in the middle of the EH pad or even in a split BB from it after various code transformations.
    • Removes addExceptionExtraction function, which was used to generate br_on_exn before.
  • CFGStackfiy: Deletes fixUnwindMismatches function. Running this function on the new instruction causes crashes, and the new version will be added in a later CL, whose contents will be completely different. So deleting the whole function will make the diff easier to read.
  • Reenables all disabled tests in exception.ll and eh-lsda.ll and a single basic test in cfg-stackify-eh.ll.
  • Updates existing tests to use the new assembly format. And deletes br_on_exn instructions from the tests and FileCheck lines.

Reviewed By: dschuff, tlively

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


aheejinJan 9 2021, 1:48 AM
Differential Revision
D94040: [WebAssembly] Update basic EH instructions for the new spec
rG052b8fe47819: Fix CodeGenCXX/difile_entry.cpp on Windows