# 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 --- | target triple = "wasm32-unknown-unknown" declare i32 @__gxx_wasm_personality_v0(...) declare void @foo() define void @function_property_test() { ret void } define void @wasm_eh_info_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) { ret void } ;; Param / results tests define i32 @i32__i64(i64) { ret i32 0 } define void @void__i32_i64_f32_f64() { ret void } define void @void__v16i8_v8i16_v4i32_v2i64(<16 x i8>, <8 x i16>, <4 x i32>, <2 x i64>) { ret void } %pair = type { i32, i64 } define %pair @i32_i64__i32_i64(%pair %p) { ret %pair %p } ... # CHECK-LABEL: name: function_property_test # CHECK: machineFunctionInfo: # CHECK: isCFGStackified: true name: function_property_test liveins: - { reg: '$arguments' } body: | bb.0: RETURN implicit-def dead $arguments ... --- # CHECK-LABEL: name: wasm_eh_info_test # CHECK: machineFunctionInfo: name: wasm_eh_info_test liveins: - { reg: '$arguments' } # CHECK: wasmEHFuncInfo: # bb.2 becomes bb.1 and bb.3 becomes bb.2 after CFGSort. # CHECK-NEXT: 1: 2 machineFunctionInfo: wasmEHFuncInfo: 2: 3 body: | bb.0: successors: %bb.1, %bb.2 CALL @foo, implicit-def dead $arguments, implicit $sp32, implicit $sp64, implicit-def dead $arguments, implicit $sp32, implicit $sp64 bb.1: RETURN implicit-def dead $arguments bb.2 (landing-pad): successors: %bb.1, %bb.3 %0:i32 = CATCH &__cpp_exception, implicit-def dead $arguments CALL @foo, implicit-def dead $arguments, implicit $sp32, implicit $sp64, implicit-def dead $arguments, implicit $sp32, implicit $sp64 BR %bb.1, implicit-def $arguments bb.3 (landing-pad): CATCH_ALL implicit-def $arguments RETHROW 0, implicit-def $arguments ... # Param / results tests --- # CHECK-LABEL: name: i32__i64 # CHECK: machineFunctionInfo: # CHECK: params: [ i64 ] # CHECK-NEXT: results: [ i32 ] name: i32__i64 liveins: - { reg: '$arguments' } machineFunctionInfo: params: [ i64 ] results: [ i32 ] body: | bb.0: %0:i32 = CONST_I32 3, implicit-def dead $arguments RETURN %0:i32, implicit-def dead $arguments ... --- # CHECK-LABEL: name: void__i32_i64_f32_f64 # CHECK: machineFunctionInfo: # CHECK: params: [ i32, i64, f32, f64 ] # CHECK-NEXT: results: [ ] name: void__i32_i64_f32_f64 liveins: - { reg: '$arguments' } machineFunctionInfo: params: [ i32, i64, f32, f64 ] results: [ ] body: | bb.0: RETURN implicit-def dead $arguments ... --- # CHECK-LABEL: name: void__v16i8_v8i16_v4i32_v2i64 # CHECK: machineFunctionInfo: # CHECK: params: [ v16i8, v8i16, v4i32, v2i64 ] # CHECK-NEXT: results: [ ] name: void__v16i8_v8i16_v4i32_v2i64 liveins: - { reg: '$arguments' } machineFunctionInfo: params: [ v16i8, v8i16, v4i32, v2i64 ] results: [ ] body: | bb.0: RETURN implicit-def dead $arguments ... --- # CHECK-LABEL: name: i32_i64__i32_i64 # CHECK: machineFunctionInfo: # CHECK: params: [ i32, i64 ] # CHECK-NEXT: results: [ i32, i64 ] name: i32_i64__i32_i64 liveins: - { reg: '$arguments' } machineFunctionInfo: params: [ i32, i64 ] results: [ i32, i64 ] body: | bb.0: %0:i32 = ARGUMENT_i32 0, implicit $arguments %1:i64 = ARGUMENT_i64 1, implicit $arguments RETURN %0, %1, implicit-def dead $arguments ...