1*b3e88ccbSHeejin Ahn# 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 252221d56SHeejin Ahn 351fb5bf4SHeejin Ahn--- | 451fb5bf4SHeejin Ahn target triple = "wasm32-unknown-unknown" 551fb5bf4SHeejin Ahn 651fb5bf4SHeejin Ahn declare i32 @__gxx_wasm_personality_v0(...) 751fb5bf4SHeejin Ahn declare void @foo() 851fb5bf4SHeejin Ahn define void @function_property_test() { 951fb5bf4SHeejin Ahn ret void 1051fb5bf4SHeejin Ahn } 1151fb5bf4SHeejin Ahn define void @wasm_eh_info_test() personality i8* bitcast (i32 (...)* @__gxx_wasm_personality_v0 to i8*) { 1251fb5bf4SHeejin Ahn ret void 1351fb5bf4SHeejin Ahn } 14*b3e88ccbSHeejin Ahn 15*b3e88ccbSHeejin Ahn ;; Param / results tests 16*b3e88ccbSHeejin Ahn define i32 @i32__i64(i64) { 17*b3e88ccbSHeejin Ahn ret i32 0 18*b3e88ccbSHeejin Ahn } 19*b3e88ccbSHeejin Ahn define void @void__i32_i64_f32_f64() { 20*b3e88ccbSHeejin Ahn ret void 21*b3e88ccbSHeejin Ahn } 22*b3e88ccbSHeejin Ahn define void @void__v16i8_v8i16_v4i32_v2i64(<16 x i8>, <8 x i16>, <4 x i32>, <2 x i64>) { 23*b3e88ccbSHeejin Ahn ret void 24*b3e88ccbSHeejin Ahn } 25*b3e88ccbSHeejin Ahn %pair = type { i32, i64 } 26*b3e88ccbSHeejin Ahn define %pair @i32_i64__i32_i64(%pair %p) { 27*b3e88ccbSHeejin Ahn ret %pair %p 28*b3e88ccbSHeejin Ahn } 2951fb5bf4SHeejin Ahn... 3051fb5bf4SHeejin Ahn 3151fb5bf4SHeejin Ahn# CHECK-LABEL: name: function_property_test 321aaa481fSHeejin Ahn# CHECK: machineFunctionInfo: 331aaa481fSHeejin Ahn# CHECK: isCFGStackified: true 3452221d56SHeejin Ahnname: function_property_test 3552221d56SHeejin Ahnliveins: 3652221d56SHeejin Ahn - { reg: '$arguments' } 3752221d56SHeejin Ahnbody: | 3852221d56SHeejin Ahn bb.0: 3900f9e5aaSThomas Lively RETURN implicit-def dead $arguments 4052221d56SHeejin Ahn... 4151fb5bf4SHeejin Ahn 4251fb5bf4SHeejin Ahn--- 4351fb5bf4SHeejin Ahn# CHECK-LABEL: name: wasm_eh_info_test 4451fb5bf4SHeejin Ahn# CHECK: machineFunctionInfo: 4551fb5bf4SHeejin Ahnname: wasm_eh_info_test 4651fb5bf4SHeejin Ahnliveins: 4751fb5bf4SHeejin Ahn - { reg: '$arguments' } 4851fb5bf4SHeejin Ahn# CHECK: wasmEHFuncInfo: 4951fb5bf4SHeejin Ahn# bb.2 becomes bb.1 and bb.3 becomes bb.2 after CFGSort. 5051fb5bf4SHeejin Ahn# CHECK-NEXT: 1: 2 5151fb5bf4SHeejin AhnmachineFunctionInfo: 5251fb5bf4SHeejin Ahn wasmEHFuncInfo: 5351fb5bf4SHeejin Ahn 2: 3 5451fb5bf4SHeejin Ahnbody: | 5551fb5bf4SHeejin Ahn bb.0: 5651fb5bf4SHeejin Ahn successors: %bb.1, %bb.2 5751fb5bf4SHeejin Ahn CALL @foo, implicit-def dead $arguments, implicit $sp32, implicit $sp64, implicit-def dead $arguments, implicit $sp32, implicit $sp64 5851fb5bf4SHeejin Ahn 5951fb5bf4SHeejin Ahn bb.1: 6051fb5bf4SHeejin Ahn RETURN implicit-def dead $arguments 6151fb5bf4SHeejin Ahn 6251fb5bf4SHeejin Ahn bb.2 (landing-pad): 6351fb5bf4SHeejin Ahn successors: %bb.1, %bb.3 6451fb5bf4SHeejin Ahn %0:i32 = CATCH &__cpp_exception, implicit-def dead $arguments 6551fb5bf4SHeejin Ahn CALL @foo, implicit-def dead $arguments, implicit $sp32, implicit $sp64, implicit-def dead $arguments, implicit $sp32, implicit $sp64 6651fb5bf4SHeejin Ahn BR %bb.1, implicit-def $arguments 6751fb5bf4SHeejin Ahn 6851fb5bf4SHeejin Ahn bb.3 (landing-pad): 6951fb5bf4SHeejin Ahn CATCH_ALL implicit-def $arguments 7051fb5bf4SHeejin Ahn RETHROW 0, implicit-def $arguments 7151fb5bf4SHeejin Ahn... 72*b3e88ccbSHeejin Ahn 73*b3e88ccbSHeejin Ahn# Param / results tests 74*b3e88ccbSHeejin Ahn--- 75*b3e88ccbSHeejin Ahn# CHECK-LABEL: name: i32__i64 76*b3e88ccbSHeejin Ahn# CHECK: machineFunctionInfo: 77*b3e88ccbSHeejin Ahn# CHECK: params: [ i64 ] 78*b3e88ccbSHeejin Ahn# CHECK-NEXT: results: [ i32 ] 79*b3e88ccbSHeejin Ahnname: i32__i64 80*b3e88ccbSHeejin Ahnliveins: 81*b3e88ccbSHeejin Ahn - { reg: '$arguments' } 82*b3e88ccbSHeejin AhnmachineFunctionInfo: 83*b3e88ccbSHeejin Ahn params: [ i64 ] 84*b3e88ccbSHeejin Ahn results: [ i32 ] 85*b3e88ccbSHeejin Ahnbody: | 86*b3e88ccbSHeejin Ahn bb.0: 87*b3e88ccbSHeejin Ahn %0:i32 = CONST_I32 3, implicit-def dead $arguments 88*b3e88ccbSHeejin Ahn RETURN %0:i32, implicit-def dead $arguments 89*b3e88ccbSHeejin Ahn... 90*b3e88ccbSHeejin Ahn--- 91*b3e88ccbSHeejin Ahn# CHECK-LABEL: name: void__i32_i64_f32_f64 92*b3e88ccbSHeejin Ahn# CHECK: machineFunctionInfo: 93*b3e88ccbSHeejin Ahn# CHECK: params: [ i32, i64, f32, f64 ] 94*b3e88ccbSHeejin Ahn# CHECK-NEXT: results: [ ] 95*b3e88ccbSHeejin Ahnname: void__i32_i64_f32_f64 96*b3e88ccbSHeejin Ahnliveins: 97*b3e88ccbSHeejin Ahn - { reg: '$arguments' } 98*b3e88ccbSHeejin AhnmachineFunctionInfo: 99*b3e88ccbSHeejin Ahn params: [ i32, i64, f32, f64 ] 100*b3e88ccbSHeejin Ahn results: [ ] 101*b3e88ccbSHeejin Ahnbody: | 102*b3e88ccbSHeejin Ahn bb.0: 103*b3e88ccbSHeejin Ahn RETURN implicit-def dead $arguments 104*b3e88ccbSHeejin Ahn... 105*b3e88ccbSHeejin Ahn--- 106*b3e88ccbSHeejin Ahn# CHECK-LABEL: name: void__v16i8_v8i16_v4i32_v2i64 107*b3e88ccbSHeejin Ahn# CHECK: machineFunctionInfo: 108*b3e88ccbSHeejin Ahn# CHECK: params: [ v16i8, v8i16, v4i32, v2i64 ] 109*b3e88ccbSHeejin Ahn# CHECK-NEXT: results: [ ] 110*b3e88ccbSHeejin Ahnname: void__v16i8_v8i16_v4i32_v2i64 111*b3e88ccbSHeejin Ahnliveins: 112*b3e88ccbSHeejin Ahn - { reg: '$arguments' } 113*b3e88ccbSHeejin AhnmachineFunctionInfo: 114*b3e88ccbSHeejin Ahn params: [ v16i8, v8i16, v4i32, v2i64 ] 115*b3e88ccbSHeejin Ahn results: [ ] 116*b3e88ccbSHeejin Ahnbody: | 117*b3e88ccbSHeejin Ahn bb.0: 118*b3e88ccbSHeejin Ahn RETURN implicit-def dead $arguments 119*b3e88ccbSHeejin Ahn... 120*b3e88ccbSHeejin Ahn--- 121*b3e88ccbSHeejin Ahn# CHECK-LABEL: name: i32_i64__i32_i64 122*b3e88ccbSHeejin Ahn# CHECK: machineFunctionInfo: 123*b3e88ccbSHeejin Ahn# CHECK: params: [ i32, i64 ] 124*b3e88ccbSHeejin Ahn# CHECK-NEXT: results: [ i32, i64 ] 125*b3e88ccbSHeejin Ahnname: i32_i64__i32_i64 126*b3e88ccbSHeejin Ahnliveins: 127*b3e88ccbSHeejin Ahn - { reg: '$arguments' } 128*b3e88ccbSHeejin AhnmachineFunctionInfo: 129*b3e88ccbSHeejin Ahn params: [ i32, i64 ] 130*b3e88ccbSHeejin Ahn results: [ i32, i64 ] 131*b3e88ccbSHeejin Ahnbody: | 132*b3e88ccbSHeejin Ahn bb.0: 133*b3e88ccbSHeejin Ahn %0:i32 = ARGUMENT_i32 0, implicit $arguments 134*b3e88ccbSHeejin Ahn %1:i64 = ARGUMENT_i64 1, implicit $arguments 135*b3e88ccbSHeejin Ahn RETURN %0, %1, implicit-def dead $arguments 136*b3e88ccbSHeejin Ahn... 137