Files
llvm/test/CodeGen/WebAssembly/eh-labels.mir
T
Thomas Lively 44cde01a89 [WebAssembly] Make returns variadic
Summary:
This is necessary and sufficient to get simple cases of multiple
return working with multivalue enabled. More complex cases will
require block and loop signatures to be generalized to potentially be
type indices as well.

Reviewers: aheejin, dschuff

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

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@374235 91177308-0d34-0410-b5e6-96231b3b80d8
2019-10-09 21:42:08 +00:00

47 lines
1.4 KiB
YAML

# RUN: llc -mtriple=wasm32-unknown-unknown -exception-model=wasm -mattr=+exception-handling -run-pass wasm-late-eh-prepare -run-pass wasm-cfg-stackify %s -o - | FileCheck %s
# This tests 'try' and 'catch' instructions are correctly placed with respect to
# EH_LABEL instructions.
--- |
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 @eh_label_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
ret void
}
...
---
# CHECK-LABEL: eh_label_test
name: eh_label_test
liveins:
- { reg: '$arguments' }
body: |
bb.0:
; TRY should be before EH_LABEL wrappers of throwing calls
; CHECK: TRY
; CHECK-NEXT: EH_LABEL
; CHECK-NEXT: CALL_VOID @foo
; CHECK-NEXT: EH_LABEL
successors: %bb.1, %bb.2
EH_LABEL <mcsymbol .Ltmp0>
CALL_VOID @foo, implicit-def dead $arguments, implicit $sp32, implicit $sp64
EH_LABEL <mcsymbol .Ltmp1>
bb.1 (landing-pad):
; predecessors: %bb.0
successors: %bb.2
; CATCH should be after an EH_LABEL at the beginning of an EH pad
; CHECK: EH_LABEL
; CHECK-NEXT: CATCH
EH_LABEL <mcsymbol .Ltmp2>
dead %0:i32 = EXTRACT_EXCEPTION_I32 implicit-def dead $arguments
CATCHRET %bb.2, %bb.0, implicit-def dead $arguments
bb.2:
; predecessors: %bb.0, %bb.1
RETURN implicit-def dead $arguments
...