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