[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / WebAssembly / exception.mir
bloba83fe0285c3d3306e085431cef7b74a7a0cdd3fc
1 # 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
3 --- |
4   target triple = "wasm32-unknown-unknown"
6   declare i32 @__gxx_wasm_personality_v0(...)
7   declare void @foo()
8   define void @eh_label_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
9     ret void
10   }
11   define void @unreachable_ehpad_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
12     ret void
13   }
14   define void @empty_cleanuppad_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
15     ret void
16   }
17 ...
19 ---
20 # This tests 'try' and 'catch' instructions are correctly placed with respect to
21 # EH_LABEL instructions.
22 # CHECK-LABEL: name: eh_label_test
23 name: eh_label_test
24 liveins:
25   - { reg: '$arguments' }
26 frameInfo:
27   hasCalls: true
28 body: |
29   bb.0:
30     ; TRY should be before EH_LABEL wrappers of throwing calls
31     ; CHECK:      bb.0
32     ; CHECK:      TRY
33     ; CHECK-NEXT: EH_LABEL
34     ; CHECK-NEXT: CALL @foo
35     ; CHECK-NEXT: EH_LABEL
36     successors: %bb.1, %bb.2
37     EH_LABEL <mcsymbol .Ltmp0>
38     CALL @foo, implicit-def dead $arguments, implicit $sp32, implicit $sp64
39     EH_LABEL <mcsymbol .Ltmp1>
40     BR %bb.2, implicit-def dead $arguments
42   bb.1 (landing-pad):
43   ; predecessors: %bb.0
44     successors: %bb.2
45     ; CATCH_ALL should be after EH_LABELs in the beginning of an EH pad.
46     ; (Sometimes there are multiple EH_LABELs in an EH pad. This test tests
47     ; that.) GLOBAL_SET should follow right after that.
48     ; CHECK:      bb.1
49     ; CHECK:      EH_LABEL
50     ; CHECK:      EH_LABEL
51     ; CHECK-NEXT: CATCH_ALL
52     ; CHECK-NEXT: GLOBAL_SET_I32
53     EH_LABEL <mcsymbol .Ltmp2>
54     EH_LABEL <mcsymbol .Ltmp2>
55     CATCHRET %bb.2, %bb.1, implicit-def dead $arguments
57   bb.2:
58   ; predecessors: %bb.0, %bb.1
59     RETURN implicit-def dead $arguments
60 ...
62 ---
63 # Unreachable EH pads should be removed by LateEHPrepare.
64 # CHECK-LABEL: name: unreachable_ehpad_test
65 name: unreachable_ehpad_test
66 liveins:
67   - { reg: '$arguments' }
68 body: |
69   ; CHECK: bb.0
70   bb.0:
71     successors: %bb.2
72     BR %bb.2, implicit-def dead $arguments
74   ; This EH pad is unreachable, so it should be removed by LateEHPrepare
75   ; CHECK-NOT: bb.1 (landing-pad)
76   bb.1 (landing-pad):
77     successors: %bb.2
78     EH_LABEL <mcsymbol .Ltmp2>
79     CATCHRET %bb.2, %bb.1, implicit-def dead $arguments
81   ; CHECK: bb.2
82   bb.2:
83   ; predecessors: %bb.0, %bb.1
84     RETURN implicit-def dead $arguments
85 ...
87 ---
88 # Regression test for a bug that LateEHPrepare::addCatchAll didn't handle empty
89 # cleanup pads. (It tried to get debug info from end() iterator.)
90 name: empty_cleanuppad_test
91 liveins:
92   - { reg: '$arguments' }
93 body: |
94   bb.0:
95     successors: %bb.1, %bb.3
96     EH_LABEL <mcsymbol .Ltmp0>
97     CALL @foo, implicit-def dead $arguments, implicit $sp32, implicit $sp64
98     EH_LABEL <mcsymbol .Ltmp1>
99     BR %bb.3, implicit-def dead $arguments
101   ;; Empty cleanuppad
102   bb.1 (landing-pad):
103     successors: %bb.2
104     EH_LABEL <mcsymbol .Ltmp2>
106   bb.2:
107     successors: %bb.3
108     CLEANUPRET implicit-def dead $arguments
110   bb.3:
111     RETURN implicit-def dead $arguments