;;! target = "x86_64"
(module $n
(table $t (import "m" "t") 6 funcref)
(func $i (param i32 i32 i32 i32 i32 i32) (result i32) (local.get 3))
(func $j (param i32 i32 i32 i32 i32 i32) (result i32) (local.get 4))
(func $k (param i32 i32 i32 i32 i32 i32) (result i32) (local.get 5))
(table $u (export "u") funcref (elem $i $j $k $i $j $k))
(func (export "copy_to_t_from_u") (param i32 i32 i32 i32) (result i32)
local.get 0
local.get 1
local.get 2
local.get 3
table.copy $t $u)
(func (export "copy_to_u_from_t") (param i32 i32 i32 i32) (result i32)
local.get 0
local.get 1
local.get 2
local.get 3
table.copy $u $t))
;; function u0:0(i64 vmctx, i64, i32, i32, i32, i32, i32, i32) -> i32 tail {
;; gv0 = vmctx
;; gv1 = load.i64 notrap aligned readonly gv0+8
;; gv2 = load.i64 notrap aligned gv1+24
;; stack_limit = gv2
;;
;; block0(v0: i64, v1: i64, v2: i32, v3: i32, v4: i32, v5: i32, v6: i32, v7: i32):
;; @007b jump block1
;;
;; block1:
;; @007b return v5
;; }
;;
;; function u0:1(i64 vmctx, i64, i32, i32, i32, i32, i32, i32) -> i32 tail {
;; gv0 = vmctx
;; gv1 = load.i64 notrap aligned readonly gv0+8
;; gv2 = load.i64 notrap aligned gv1+24
;; stack_limit = gv2
;;
;; block0(v0: i64, v1: i64, v2: i32, v3: i32, v4: i32, v5: i32, v6: i32, v7: i32):
;; @0080 jump block1
;;
;; block1:
;; @0080 return v6
;; }
;;
;; function u0:2(i64 vmctx, i64, i32, i32, i32, i32, i32, i32) -> i32 tail {
;; gv0 = vmctx
;; gv1 = load.i64 notrap aligned readonly gv0+8
;; gv2 = load.i64 notrap aligned gv1+24
;; stack_limit = gv2
;;
;; block0(v0: i64, v1: i64, v2: i32, v3: i32, v4: i32, v5: i32, v6: i32, v7: i32):
;; @0085 jump block1
;;
;; block1:
;; @0085 return v7
;; }
;;
;; function u0:3(i64 vmctx, i64, i32, i32, i32, i32) -> i32 tail {
;; region0 = 1073741824 "PublicTable"
;; gv0 = vmctx
;; gv1 = load.i64 notrap aligned readonly gv0+8
;; gv2 = load.i64 notrap aligned gv1+24
;; gv3 = vmctx
;; gv4 = load.i64 notrap aligned readonly can_move gv3+48
;; gv5 = load.i64 notrap aligned gv4
;; gv6 = load.i64 notrap aligned gv4+8
;; gv7 = load.i64 notrap aligned readonly can_move gv3+72
;; sig0 = (i64 vmctx, i32, i64) -> i64 tail
;; fn0 = colocated u805306368:7 sig0
;; stack_limit = gv2
;;
;; block0(v0: i64, v1: i64, v2: i32, v3: i32, v4: i32, v5: i32):
;; @0090 v111 = load.i64 notrap aligned readonly can_move v0+48
;; @0090 v7 = load.i64 notrap aligned v111+8
;; @0090 v8 = ireduce.i32 v7
;; @0090 v9 = uextend.i64 v8
;; @0090 v10 = uextend.i64 v3
;; @0090 v11 = uextend.i64 v5
;; @0090 v12 = iconst.i64 1
;; @0090 v13 = imul v11, v12 ; v12 = 1
;; @0090 v14 = iadd v10, v13
;; @0090 v15 = icmp ugt v14, v9
;; @0090 trapnz v15, user6
;; @0090 v109 = load.i64 notrap aligned readonly can_move v0+48
;; @0090 v16 = load.i64 notrap aligned v109
;; @0090 v17 = uextend.i64 v3
;; @0090 v18 = iconst.i64 8
;; @0090 v19 = imul v17, v18 ; v18 = 8
;; @0090 v20 = iadd v16, v19
;; @0090 v21 = iconst.i32 6
;; @0090 v22 = uextend.i64 v21 ; v21 = 6
;; @0090 v23 = uextend.i64 v4
;; @0090 v24 = uextend.i64 v5
;; @0090 v25 = iconst.i64 1
;; @0090 v26 = imul v24, v25 ; v25 = 1
;; @0090 v27 = iadd v23, v26
;; @0090 v28 = icmp ugt v27, v22
;; @0090 trapnz v28, user6
;; @0090 v29 = load.i64 notrap aligned readonly can_move v0+72
;; @0090 v30 = uextend.i64 v4
;; @0090 v31 = iconst.i64 8
;; @0090 v32 = imul v30, v31 ; v31 = 8
;; @0090 v33 = iadd v29, v32
;; @0090 v34 = uextend.i64 v5
;; @0090 v35 = iconst.i64 8
;; @0090 v36 = imul v34, v35 ; v35 = 8
;; @0090 v37 = iconst.i64 8
;; @0090 v38 = imul v34, v37 ; v37 = 8
;; @0090 brif v34, block2, block5
;;
;; block2:
;; @0090 v39 = icmp.i64 ult v20, v33
;; @0090 v40 = iconst.i64 8
;; @0090 v41 = imul.i64 v34, v40 ; v40 = 8
;; @0090 v42 = iconst.i64 8
;; @0090 v43 = imul.i64 v34, v42 ; v42 = 8
;; @0090 v44 = iadd.i64 v20, v41
;; @0090 v45 = iadd.i64 v33, v43
;; @0090 v46 = ireduce.i32 v34
;; @0090 v47 = iadd.i32 v4, v46
;; @0090 brif v39, block3(v20, v33, v4), block4(v44, v45, v47)
;;
;; block3(v48: i64, v49: i64, v50: i32):
;; @0090 v51 = iconst.i32 6
;; @0090 v52 = icmp uge v50, v51 ; v51 = 6
;; @0090 v53 = uextend.i64 v50
;; @0090 v54 = load.i64 notrap aligned readonly can_move v0+72
;; @0090 v55 = iconst.i64 3
;; @0090 v56 = ishl v53, v55 ; v55 = 3
;; @0090 v57 = iadd v54, v56
;; @0090 v58 = iconst.i64 0
;; @0090 v59 = select_spectre_guard v52, v58, v57 ; v58 = 0
;; @0090 v60 = load.i64 user6 aligned region0 v59
;; @0090 v61 = iconst.i64 -2
;; @0090 v62 = band v60, v61 ; v61 = -2
;; @0090 brif v60, block7(v62), block6
;;
;; block4(v77: i64, v78: i64, v79: i32):
;; @0090 v80 = iconst.i64 8
;; @0090 v81 = isub v77, v80 ; v80 = 8
;; @0090 v82 = iconst.i64 8
;; @0090 v83 = isub v78, v82 ; v82 = 8
;; @0090 v84 = iconst.i32 1
;; @0090 v85 = isub v79, v84 ; v84 = 1
;; @0090 v86 = iconst.i32 6
;; @0090 v87 = icmp uge v85, v86 ; v86 = 6
;; @0090 v88 = uextend.i64 v85
;; @0090 v89 = load.i64 notrap aligned readonly can_move v0+72
;; @0090 v90 = iconst.i64 3
;; @0090 v91 = ishl v88, v90 ; v90 = 3
;; @0090 v92 = iadd v89, v91
;; @0090 v93 = iconst.i64 0
;; @0090 v94 = select_spectre_guard v87, v93, v92 ; v93 = 0
;; @0090 v95 = load.i64 user6 aligned region0 v94
;; @0090 v96 = iconst.i64 -2
;; @0090 v97 = band v95, v96 ; v96 = -2
;; @0090 brif v95, block9(v97), block8
;;
;; block5:
;; @0094 jump block1
;;
;; block6 cold:
;; @0090 v64 = iconst.i32 1
;; @0090 v66 = uextend.i64 v50
;; @0090 v67 = call fn0(v0, v64, v66) ; v64 = 1
;; @0090 jump block7(v67)
;;
;; block7(v63: i64):
;; @0090 v68 = iconst.i64 1
;; @0090 v69 = bor v63, v68 ; v68 = 1
;; @0090 store notrap aligned v69, v48
;; @0090 v70 = iconst.i64 8
;; @0090 v71 = iadd.i64 v48, v70 ; v70 = 8
;; @0090 v72 = iconst.i64 8
;; @0090 v73 = iadd.i64 v49, v72 ; v72 = 8
;; @0090 v74 = iconst.i32 1
;; @0090 v75 = iadd.i32 v50, v74 ; v74 = 1
;; @0090 v76 = icmp eq v73, v45
;; @0090 brif v76, block5, block3(v71, v73, v75)
;;
;; block8 cold:
;; @0090 v99 = iconst.i32 1
;; @0090 v101 = uextend.i64 v85
;; @0090 v102 = call fn0(v0, v99, v101) ; v99 = 1
;; @0090 jump block9(v102)
;;
;; block9(v98: i64):
;; @0090 v103 = iconst.i64 1
;; @0090 v104 = bor v98, v103 ; v103 = 1
;; @0090 store notrap aligned v104, v81
;; @0090 v105 = icmp.i64 eq v83, v33
;; @0090 brif v105, block5, block4(v81, v83, v85)
;;
;; block1:
;; @0094 return v2
;; }
;;
;; function u0:4(i64 vmctx, i64, i32, i32, i32, i32) -> i32 tail {
;; region0 = 1073741824 "PublicTable"
;; gv0 = vmctx
;; gv1 = load.i64 notrap aligned readonly gv0+8
;; gv2 = load.i64 notrap aligned gv1+24
;; gv3 = vmctx
;; gv4 = load.i64 notrap aligned readonly can_move gv3+72
;; gv5 = load.i64 notrap aligned readonly can_move gv3+48
;; gv6 = load.i64 notrap aligned gv5
;; gv7 = load.i64 notrap aligned gv5+8
;; sig0 = (i64 vmctx, i32, i64) -> i64 tail
;; fn0 = colocated u805306368:7 sig0
;; stack_limit = gv2
;;
;; block0(v0: i64, v1: i64, v2: i32, v3: i32, v4: i32, v5: i32):
;; @009f v7 = iconst.i32 6
;; @009f v8 = uextend.i64 v7 ; v7 = 6
;; @009f v9 = uextend.i64 v3
;; @009f v10 = uextend.i64 v5
;; @009f v11 = iconst.i64 1
;; @009f v12 = imul v10, v11 ; v11 = 1
;; @009f v13 = iadd v9, v12
;; @009f v14 = icmp ugt v13, v8
;; @009f trapnz v14, user6
;; @009f v15 = load.i64 notrap aligned readonly can_move v0+72
;; @009f v16 = uextend.i64 v3
;; @009f v17 = iconst.i64 8
;; @009f v18 = imul v16, v17 ; v17 = 8
;; @009f v19 = iadd v15, v18
;; @009f v118 = load.i64 notrap aligned readonly can_move v0+48
;; @009f v20 = load.i64 notrap aligned v118+8
;; @009f v21 = ireduce.i32 v20
;; @009f v22 = uextend.i64 v21
;; @009f v23 = uextend.i64 v4
;; @009f v24 = uextend.i64 v5
;; @009f v25 = iconst.i64 1
;; @009f v26 = imul v24, v25 ; v25 = 1
;; @009f v27 = iadd v23, v26
;; @009f v28 = icmp ugt v27, v22
;; @009f trapnz v28, user6
;; @009f v116 = load.i64 notrap aligned readonly can_move v0+48
;; @009f v29 = load.i64 notrap aligned v116
;; @009f v30 = uextend.i64 v4
;; @009f v31 = iconst.i64 8
;; @009f v32 = imul v30, v31 ; v31 = 8
;; @009f v33 = iadd v29, v32
;; @009f v34 = uextend.i64 v5
;; @009f v35 = iconst.i64 8
;; @009f v36 = imul v34, v35 ; v35 = 8
;; @009f v37 = iconst.i64 8
;; @009f v38 = imul v34, v37 ; v37 = 8
;; @009f brif v34, block2, block5
;;
;; block2:
;; @009f v39 = icmp.i64 ult v19, v33
;; @009f v40 = iconst.i64 8
;; @009f v41 = imul.i64 v34, v40 ; v40 = 8
;; @009f v42 = iconst.i64 8
;; @009f v43 = imul.i64 v34, v42 ; v42 = 8
;; @009f v44 = iadd.i64 v19, v41
;; @009f v45 = iadd.i64 v33, v43
;; @009f v46 = ireduce.i32 v34
;; @009f v47 = iadd.i32 v4, v46
;; @009f brif v39, block3(v19, v33, v4), block4(v44, v45, v47)
;;
;; block3(v48: i64, v49: i64, v50: i32):
;; @009f v114 = load.i64 notrap aligned readonly can_move v0+48
;; @009f v51 = load.i64 notrap aligned v114+8
;; @009f v52 = ireduce.i32 v51
;; @009f v53 = icmp uge v50, v52
;; @009f v54 = uextend.i64 v50
;; @009f v112 = load.i64 notrap aligned readonly can_move v0+48
;; @009f v55 = load.i64 notrap aligned v112
;; @009f v56 = iconst.i64 3
;; @009f v57 = ishl v54, v56 ; v56 = 3
;; @009f v58 = iadd v55, v57
;; @009f v59 = iconst.i64 0
;; @009f v60 = select_spectre_guard v53, v59, v58 ; v59 = 0
;; @009f v61 = load.i64 user6 aligned region0 v60
;; @009f v62 = iconst.i64 -2
;; @009f v63 = band v61, v62 ; v62 = -2
;; @009f brif v61, block7(v63), block6
;;
;; block4(v78: i64, v79: i64, v80: i32):
;; @009f v81 = iconst.i64 8
;; @009f v82 = isub v78, v81 ; v81 = 8
;; @009f v83 = iconst.i64 8
;; @009f v84 = isub v79, v83 ; v83 = 8
;; @009f v85 = iconst.i32 1
;; @009f v86 = isub v80, v85 ; v85 = 1
;; @009f v110 = load.i64 notrap aligned readonly can_move v0+48
;; @009f v87 = load.i64 notrap aligned v110+8
;; @009f v88 = ireduce.i32 v87
;; @009f v89 = icmp uge v86, v88
;; @009f v90 = uextend.i64 v86
;; @009f v108 = load.i64 notrap aligned readonly can_move v0+48
;; @009f v91 = load.i64 notrap aligned v108
;; @009f v92 = iconst.i64 3
;; @009f v93 = ishl v90, v92 ; v92 = 3
;; @009f v94 = iadd v91, v93
;; @009f v95 = iconst.i64 0
;; @009f v96 = select_spectre_guard v89, v95, v94 ; v95 = 0
;; @009f v97 = load.i64 user6 aligned region0 v96
;; @009f v98 = iconst.i64 -2
;; @009f v99 = band v97, v98 ; v98 = -2
;; @009f brif v97, block9(v99), block8
;;
;; block5:
;; @00a3 jump block1
;;
;; block6 cold:
;; @009f v65 = iconst.i32 0
;; @009f v67 = uextend.i64 v50
;; @009f v68 = call fn0(v0, v65, v67) ; v65 = 0
;; @009f jump block7(v68)
;;
;; block7(v64: i64):
;; @009f v69 = iconst.i64 1
;; @009f v70 = bor v64, v69 ; v69 = 1
;; @009f store notrap aligned v70, v48
;; @009f v71 = iconst.i64 8
;; @009f v72 = iadd.i64 v48, v71 ; v71 = 8
;; @009f v73 = iconst.i64 8
;; @009f v74 = iadd.i64 v49, v73 ; v73 = 8
;; @009f v75 = iconst.i32 1
;; @009f v76 = iadd.i32 v50, v75 ; v75 = 1
;; @009f v77 = icmp eq v74, v45
;; @009f brif v77, block5, block3(v72, v74, v76)
;;
;; block8 cold:
;; @009f v101 = iconst.i32 0
;; @009f v103 = uextend.i64 v86
;; @009f v104 = call fn0(v0, v101, v103) ; v101 = 0
;; @009f jump block9(v104)
;;
;; block9(v100: i64):
;; @009f v105 = iconst.i64 1
;; @009f v106 = bor v100, v105 ; v105 = 1
;; @009f store notrap aligned v106, v82
;; @009f v107 = icmp.i64 eq v84, v33
;; @009f brif v107, block5, block4(v82, v84, v86)
;;
;; block1:
;; @00a3 return v2
;; }