mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
81bb5f99ad
The data layout strings do not have any effect on llc tests and will become misleadingly out of date as we continue to update the canonical data layout, so remove them from the tests. Differential Revision: https://reviews.llvm.org/D105842
113 lines
3.1 KiB
YAML
113 lines
3.1 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
|
|
|
|
--- |
|
|
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
|
|
}
|
|
define void @unreachable_ehpad_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
|
|
ret void
|
|
}
|
|
define void @empty_cleanuppad_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
|
|
ret void
|
|
}
|
|
...
|
|
|
|
---
|
|
# This tests 'try' and 'catch' instructions are correctly placed with respect to
|
|
# EH_LABEL instructions.
|
|
# CHECK-LABEL: name: eh_label_test
|
|
name: eh_label_test
|
|
liveins:
|
|
- { reg: '$arguments' }
|
|
frameInfo:
|
|
hasCalls: true
|
|
body: |
|
|
bb.0:
|
|
; TRY should be before EH_LABEL wrappers of throwing calls
|
|
; CHECK: bb.0
|
|
; CHECK: TRY
|
|
; CHECK-NEXT: EH_LABEL
|
|
; CHECK-NEXT: CALL @foo
|
|
; CHECK-NEXT: EH_LABEL
|
|
successors: %bb.1, %bb.2
|
|
EH_LABEL <mcsymbol .Ltmp0>
|
|
CALL @foo, implicit-def dead $arguments, implicit $sp32, implicit $sp64
|
|
EH_LABEL <mcsymbol .Ltmp1>
|
|
BR %bb.2, implicit-def dead $arguments
|
|
|
|
bb.1 (landing-pad):
|
|
; predecessors: %bb.0
|
|
successors: %bb.2
|
|
; CATCH_ALL should be after EH_LABELs in the beginning of an EH pad.
|
|
; (Sometimes there are multiple EH_LABELs in an EH pad. This test tests
|
|
; that.) GLOBAL_SET should follow right after that.
|
|
; CHECK: bb.1
|
|
; CHECK: EH_LABEL
|
|
; CHECK: EH_LABEL
|
|
; CHECK-NEXT: CATCH_ALL
|
|
; CHECK-NEXT: GLOBAL_SET_I32
|
|
EH_LABEL <mcsymbol .Ltmp2>
|
|
EH_LABEL <mcsymbol .Ltmp2>
|
|
CATCHRET %bb.2, %bb.1, implicit-def dead $arguments
|
|
|
|
bb.2:
|
|
; predecessors: %bb.0, %bb.1
|
|
RETURN implicit-def dead $arguments
|
|
...
|
|
|
|
---
|
|
# Unreachable EH pads should be removed by LateEHPrepare.
|
|
# CHECK-LABEL: name: unreachable_ehpad_test
|
|
name: unreachable_ehpad_test
|
|
liveins:
|
|
- { reg: '$arguments' }
|
|
body: |
|
|
; CHECK: bb.0
|
|
bb.0:
|
|
successors: %bb.2
|
|
BR %bb.2, implicit-def dead $arguments
|
|
|
|
; This EH pad is unreachable, so it should be removed by LateEHPrepare
|
|
; CHECK-NOT: bb.1 (landing-pad)
|
|
bb.1 (landing-pad):
|
|
successors: %bb.2
|
|
EH_LABEL <mcsymbol .Ltmp2>
|
|
CATCHRET %bb.2, %bb.1, implicit-def dead $arguments
|
|
|
|
; CHECK: bb.2
|
|
bb.2:
|
|
; predecessors: %bb.0, %bb.1
|
|
RETURN implicit-def dead $arguments
|
|
...
|
|
|
|
---
|
|
# Regression test for a bug that LateEHPrepare::addCatchAll didn't handle empty
|
|
# cleanup pads. (It tried to get debug info from end() iterator.)
|
|
name: empty_cleanuppad_test
|
|
liveins:
|
|
- { reg: '$arguments' }
|
|
body: |
|
|
bb.0:
|
|
successors: %bb.1, %bb.3
|
|
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
|
|
|
|
;; Empty cleanuppad
|
|
bb.1 (landing-pad):
|
|
successors: %bb.2
|
|
EH_LABEL <mcsymbol .Ltmp2>
|
|
|
|
bb.2:
|
|
successors: %bb.3
|
|
CLEANUPRET implicit-def dead $arguments
|
|
|
|
bb.3:
|
|
RETURN implicit-def dead $arguments
|
|
...
|