|  | # 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 ptr @__gxx_wasm_personality_v0 { | 
|  | 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_LEGACY &__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_LEGACY 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 | 
|  | ... |