[WebAssembly] Split EH MIR tests into two files

Currently exception.mir runs LateEHPrepare and CFGStackify, but some
tests I'm planning to add shouldn't be run with LateEHPrepare, because
it is convenient to only run CFGStackify when testing things like unwind
mismatches and it is easier to add tests that are in phase right before
CFGStackify. This splits existing exception.mir into two files;
cfg-stackify-eh.mir will only run CFGStackify. Note that
`eh_label_tests` tests both LateEHPrepare and CFGStackify, so it is
still in exception.mir. `rethrow_arg_tests` has been converted to the
post-LateEHPrepare form to be moved into cfg-stackify-eh.mir, like
removing `CATCHRET` and such, because it does not really test anything
in LateEHPrepare.

Reviewed By: dschuff

Differential Revision: https://reviews.llvm.org/D97175
This commit is contained in:
Heejin Ahn 2021-02-21 20:05:28 -08:00
parent 9a4dd4de9d
commit 908643ada0
2 changed files with 55 additions and 56 deletions

View File

@ -0,0 +1,55 @@
# RUN: llc -mtriple=wasm32-unknown-unknown -exception-model=wasm -mattr=+exception-handling -run-pass wasm-cfg-stackify %s -o - | FileCheck %s
--- |
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
target triple = "wasm32-unknown-unknown"
declare i32 @__gxx_wasm_personality_v0(...)
declare void @foo()
define void @rethrow_arg_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
ret void
}
...
---
# CHECK-LABEL: name: rethrow_arg_test
name: rethrow_arg_test
liveins:
- { reg: '$arguments' }
body: |
bb.0:
successors: %bb.1, %bb.3
; CHECK: bb.0:
; CHECK: TRY
EH_LABEL <mcsymbol .Ltmp0>
CALL @foo, implicit-def dead $arguments, implicit $sp32, implicit $sp64
EH_LABEL <mcsymbol .Ltmp1>
BR %bb.3, implicit-def dead $arguments
bb.1 (landing-pad):
successors: %bb.2
; CHECK: bb.1 (landing-pad):
; CHECK: CATCH
; CHECK: TRY
; This RETHROW rethrows the exception caught by this BB's CATCH, but after
; CFGStackify a TRY is placed between the CATCH and this RETHROW, so after
; CFGStackify its immediate argument should become not 0, but 1.
; CHECK: RETHROW 1
EH_LABEL <mcsymbol .Ltmp2>
%0:i32 = CATCH &__cpp_exception, implicit-def dead $arguments
RETHROW 0, implicit-def dead $arguments
bb.2 (landing-pad):
; CHECK: bb.2 (landing-pad):
; CHECK: CATCH
; CHECK: RETHROW 0
EH_LABEL <mcsymbol .Ltmp5>
%1:i32 = CATCH &__cpp_exception, implicit-def dead $arguments
RETHROW 0, implicit-def dead $arguments
bb.3:
; CHECK: bb.3:
; CHECK: END_TRY
; CHECK: END_TRY
RETURN implicit-def dead $arguments
...

View File

@ -12,9 +12,6 @@
define void @unreachable_ehpad_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
ret void
}
define void @rethrow_arg_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
ret void
}
...
---
@ -84,56 +81,3 @@ body: |
; predecessors: %bb.0, %bb.1
RETURN implicit-def dead $arguments
...
---
# CHECK-LABEL: name: rethrow_arg_test
name: rethrow_arg_test
liveins:
- { reg: '$arguments' }
body: |
bb.0:
successors: %bb.1, %bb.4
; CHECK: bb.0
; CHECK: TRY
EH_LABEL <mcsymbol .Ltmp0>
CALL @foo, implicit-def dead $arguments, implicit $sp32, implicit $sp64
EH_LABEL <mcsymbol .Ltmp1>
BR %bb.4, implicit-def dead $arguments
bb.1 (landing-pad):
; predecessors: %bb.0
successors: %bb.2
; CHECK: bb.1
; CHECK: CATCH
; CHECK: TRY
; This RETHROW rethrows the exception caught by this BB's CATCH, but after
; CFGStackify a TRY is placed between the CATCH and this RETHROW, so after
; CFGStackify its immediate argument should become not 0, but 1.
; CHECK: RETHROW 1
EH_LABEL <mcsymbol .Ltmp2>
%0:i32 = CATCH &__cpp_exception, implicit-def dead $arguments
RETHROW 0, implicit-def dead $arguments
bb.2 (landing-pad):
; predecessors: %bb.1
successors: %bb.3
; CHECK: bb.2
; CHECK: CATCH
; CHECK: RETHROW 0
EH_LABEL <mcsymbol .Ltmp5>
%1:i32 = CATCH &__cpp_exception, implicit-def dead $arguments
RETHROW 0, implicit-def dead $arguments
CATCHRET %bb.3, %bb.2, implicit-def dead $arguments
bb.3:
; predecessors: %bb.2
successors: %bb.4
CATCHRET %bb.4, %bb.1, implicit-def dead $arguments
bb.4:
; predecessors: %bb.0, %bb.3
; CHECK: bb.4
; CHECK: END_TRY
; CHECK: END_TRY
RETURN implicit-def dead $arguments