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