[WebAssembly] Handle multiple EH_LABELs in EH pad
authorHeejin Ahn <aheejin@gmail.com>
Thu, 18 Feb 2021 17:21:33 +0000 (09:21 -0800)
committerHeejin Ahn <aheejin@gmail.com>
Thu, 18 Feb 2021 18:18:00 +0000 (10:18 -0800)
commit6f2999b36a6e4834966fd5cde3aba4d296a2de97
treea80fb78b4861697a746d4fd517f61d9ac22a3748
parent406dc549034adc4da5e6f45ef3d9aef98c177331
[WebAssembly] Handle multiple EH_LABELs in EH pad

Usually `EH_LABEL`s are placed in
- Before an `invoke` (which becomes calls in the backend)
- After an `invoke`
- At the start of an EH pad

I don't know exactly why, but I noticed there are cases of multiple, not
a single, `EH_LABEL` instructions in the beginning of an EH pad. In that
case `global.set` instruction placed to restore `__stack_pointer` ended
up between two `EH_LABEL` instructions before `CATCH`. It should follow
after the `EH_LABEL`s and `CATCH`. This CL fixes that case.

Reviewed By: dschuff

Differential Revision: https://reviews.llvm.org/D96970
llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp
llvm/test/CodeGen/WebAssembly/exception.mir