1# RUN: llc -mtriple=wasm32-unknown-unknown -exception-model=wasm -mattr=+exception-handling,+multivalue,+simd128 -run-pass wasm-cfg-sort -run-pass wasm-cfg-stackify %s -o - | FileCheck %s
2
3--- |
4  target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
5  target triple = "wasm32-unknown-unknown"
6
7  declare i32 @__gxx_wasm_personality_v0(...)
8  declare void @foo()
9  define void @function_property_test() {
10    ret void
11  }
12  define void @wasm_eh_info_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) {
13    ret void
14  }
15
16  ;; Param / results tests
17  define i32 @i32__i64(i64) {
18    ret i32 0
19  }
20  define void @void__i32_i64_f32_f64() {
21    ret void
22  }
23  define void @void__v16i8_v8i16_v4i32_v2i64(<16 x i8>, <8 x i16>, <4 x i32>, <2 x i64>) {
24    ret void
25  }
26  %pair = type { i32, i64 }
27  define %pair @i32_i64__i32_i64(%pair %p) {
28    ret %pair %p
29  }
30...
31
32# CHECK-LABEL: name: function_property_test
33# CHECK: machineFunctionInfo:
34# CHECK:   isCFGStackified:   true
35name: function_property_test
36liveins:
37  - { reg: '$arguments' }
38body: |
39  bb.0:
40    RETURN implicit-def dead $arguments
41...
42
43---
44# CHECK-LABEL: name: wasm_eh_info_test
45# CHECK: machineFunctionInfo:
46name: wasm_eh_info_test
47liveins:
48  - { reg: '$arguments' }
49# CHECK:  wasmEHFuncInfo:
50# bb.2 becomes bb.1 and bb.3 becomes bb.2 after CFGSort.
51# CHECK-NEXT:    1:               2
52machineFunctionInfo:
53  wasmEHFuncInfo:
54    2:               3
55body:             |
56  bb.0:
57    successors: %bb.1, %bb.2
58    CALL @foo, implicit-def dead $arguments, implicit $sp32, implicit $sp64, implicit-def dead $arguments, implicit $sp32, implicit $sp64
59
60  bb.1:
61    RETURN implicit-def dead $arguments
62
63  bb.2 (landing-pad):
64    successors: %bb.1, %bb.3
65    %0:i32 = CATCH &__cpp_exception, implicit-def dead $arguments
66    CALL @foo, implicit-def dead $arguments, implicit $sp32, implicit $sp64, implicit-def dead $arguments, implicit $sp32, implicit $sp64
67    BR %bb.1, implicit-def $arguments
68
69  bb.3 (landing-pad):
70    CATCH_ALL implicit-def $arguments
71    RETHROW 0, implicit-def $arguments
72...
73
74# Param / results tests
75---
76# CHECK-LABEL: name: i32__i64
77# CHECK:    machineFunctionInfo:
78# CHECK:      params:          [ i64 ]
79# CHECK-NEXT: results:         [ i32 ]
80name: i32__i64
81liveins:
82  - { reg: '$arguments' }
83machineFunctionInfo:
84  params:          [ i64 ]
85  results:         [ i32 ]
86body: |
87  bb.0:
88    %0:i32 = CONST_I32 3, implicit-def dead $arguments
89    RETURN %0:i32, implicit-def dead $arguments
90...
91---
92# CHECK-LABEL: name: void__i32_i64_f32_f64
93# CHECK:    machineFunctionInfo:
94# CHECK:      params:          [ i32, i64, f32, f64 ]
95# CHECK-NEXT: results:         [  ]
96name: void__i32_i64_f32_f64
97liveins:
98  - { reg: '$arguments' }
99machineFunctionInfo:
100  params:          [ i32, i64, f32, f64 ]
101  results:         [  ]
102body: |
103  bb.0:
104    RETURN implicit-def dead $arguments
105...
106---
107# CHECK-LABEL: name: void__v16i8_v8i16_v4i32_v2i64
108# CHECK:    machineFunctionInfo:
109# CHECK:      params:          [ v16i8, v8i16, v4i32, v2i64 ]
110# CHECK-NEXT: results:         [  ]
111name: void__v16i8_v8i16_v4i32_v2i64
112liveins:
113  - { reg: '$arguments' }
114machineFunctionInfo:
115  params:          [ v16i8, v8i16, v4i32, v2i64 ]
116  results:         [  ]
117body: |
118  bb.0:
119    RETURN implicit-def dead $arguments
120...
121---
122# CHECK-LABEL: name: i32_i64__i32_i64
123# CHECK:    machineFunctionInfo:
124# CHECK:      params:          [ i32, i64 ]
125# CHECK-NEXT: results:         [ i32, i64 ]
126name: i32_i64__i32_i64
127liveins:
128  - { reg: '$arguments' }
129machineFunctionInfo:
130  params:          [ i32, i64 ]
131  results:         [ i32, i64 ]
132body: |
133  bb.0:
134    %0:i32 = ARGUMENT_i32 0, implicit $arguments
135    %1:i64 = ARGUMENT_i64 1, implicit $arguments
136    RETURN %0, %1, implicit-def dead $arguments
137...
138