1;;! target = "riscv64" 2;;! test = 'optimize' 3;;! filter = 'wasm_func_1' 4 5(component 6 (type $a (enum "a" "b" "c")) 7 (type $func_ty (func (param "x" $a))) 8 9 (component $c1 10 (import "a" (type $a' (eq $a))) 11 (core module $m1 12 (func (export "f") (result i32) 13 (i32.const 0))) 14 (core instance $ci1 (instantiate $m1)) 15 (func (export "f") (result $a') (canon lift (core func $ci1 "f")))) 16 17 (component $c2 18 (import "a" (type $a' (eq $a))) 19 (import "f" (func $f (result $a'))) 20 (core func $g (canon lower (func $f))) 21 (core module $m2 22 (import "" "f" (func (result i32))) 23 (func (export "f") (result i32) (call 0))) 24 (core instance $ci2 25 (instantiate $m2 (with "" (instance (export "f" (func $g)))))) 26 (func (export "f") (result $a') (canon lift (core func $ci2 "f")))) 27 28 (instance $i1 (instantiate $c1 (with "a" (type $a)))) 29 (instance $i2 (instantiate $c2 30 (with "a" (type $a)) 31 (with "f" (func $i1 "f")))) 32) 33 34;; function u0:1(i64 vmctx, i64) -> i32 tail { 35;; gv0 = vmctx 36;; gv1 = load.i64 notrap aligned readonly gv0+8 37;; gv2 = load.i64 notrap aligned gv1+16 38;; gv3 = vmctx 39;; gv4 = load.i64 notrap aligned readonly can_move gv3+104 40;; gv5 = load.i64 notrap aligned readonly can_move gv3+80 41;; sig0 = (i64 vmctx, i64) -> i32 tail 42;; fn0 = u0:0 sig0 43;; stack_limit = gv2 44;; 45;; block0(v0: i64, v1: i64): 46;; @0063 v4 = load.i64 notrap aligned readonly can_move v0+104 47;; @0063 v5 = load.i32 notrap aligned table v4 48;; @0065 v6 = iconst.i32 1 49;; @0067 v7 = band v5, v6 ; v6 = 1 50;; @0061 v3 = iconst.i32 0 51;; @0068 v8 = icmp eq v7, v3 ; v3 = 0 52;; @0068 v9 = uextend.i32 v8 53;; @0069 brif v9, block2, block3 54;; 55;; block2: 56;; @006b trap user11 57;; 58;; block3: 59;; @006d v10 = load.i64 notrap aligned readonly can_move v0+80 60;; @006d v11 = load.i32 notrap aligned table v10 61;; @006f v12 = iconst.i32 2 62;; @0071 v13 = band v11, v12 ; v12 = 2 63;; v82 = iconst.i32 0 64;; v83 = icmp eq v13, v82 ; v82 = 0 65;; @0072 v15 = uextend.i32 v83 66;; @0073 brif v15, block4, block5 67;; 68;; block4: 69;; @0075 trap user11 70;; 71;; block5: 72;; @0079 v18 = iconst.i32 -3 73;; @007b v19 = band.i32 v11, v18 ; v18 = -3 74;; @007c store notrap aligned table v19, v10 75;; v70 = iconst.i32 -4 76;; v76 = band.i32 v11, v70 ; v70 = -4 77;; @0083 store notrap aligned table v76, v10 78;; v84 = iconst.i32 1 79;; v85 = bor v19, v84 ; v84 = 1 80;; @008a store notrap aligned table v85, v10 81;; @008c v32 = load.i64 notrap aligned readonly can_move v0+56 82;; @008c v33 = load.i64 notrap aligned readonly can_move v0+72 83;; @008c v34 = call_indirect sig0, v32(v33, v0) 84;; @0090 v36 = load.i32 notrap aligned table v4 85;; @0080 v23 = iconst.i32 -2 86;; @0094 v38 = band v36, v23 ; v23 = -2 87;; @0095 store notrap aligned table v38, v4 88;; @009b v40 = iconst.i32 3 89;; @009d v41 = icmp ugt v34, v40 ; v40 = 3 90;; @009d v42 = uextend.i32 v41 91;; @009e brif v42, block6, block7 92;; 93;; block6: 94;; @00a0 trap user11 95;; 96;; block7: 97;; v86 = iconst.i32 1 98;; v87 = bor.i32 v36, v86 ; v86 = 1 99;; @00a9 store notrap aligned table v87, v4 100;; @00ab v49 = load.i32 notrap aligned table v10 101;; v88 = iconst.i32 2 102;; v89 = bor v49, v88 ; v88 = 2 103;; @00b0 store notrap aligned table v89, v10 104;; @00b2 jump block1 105;; 106;; block1: 107;; @00b2 return v34 108;; } 109