wasmtime-cli 46.0.2

Command-line interface for Wasmtime
Documentation
;;! target = 'x86_64'
;;! test = 'optimize'
;;! flags = '-Wgc'

(module
  (type $a (array (mut externref)))

  (func $fill (param $len i32) (result (ref $a))
    (array.new_default $a (local.get $len))
  )
)
;; function u0:0(i64 vmctx, i64, i32) -> i32 tail {
;;     region0 = 32 "VMContext+0x20"
;;     region1 = 2147483648 "GcHeap"
;;     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+8
;;     gv5 = load.i64 notrap aligned readonly can_move gv4+32
;;     gv6 = load.i64 notrap aligned gv4+40
;;     sig0 = (i64 vmctx, i32, i32, i32, i32) -> i32 tail
;;     fn0 = colocated u805306368:24 sig0
;;     stack_limit = gv2
;;
;;                                 block0(v0: i64, v1: i64, v2: i32):
;; @001f                               v5 = uextend.i64 v2
;;                                     v98 = iconst.i64 2
;;                                     v99 = ishl v5, v98  ; v98 = 2
;; @001f                               v8 = iconst.i64 32
;; @001f                               v9 = ushr v99, v8  ; v8 = 32
;; @001f                               trapnz v9, user18
;; @001f                               v4 = iconst.i32 20
;;                                     v105 = iconst.i32 2
;;                                     v106 = ishl v2, v105  ; v105 = 2
;; @001f                               v11 = uadd_overflow_trap v4, v106, user18  ; v4 = 20
;; @001f                               v13 = load.i64 notrap aligned readonly can_move v0+32
;; @001f                               v14 = load.i32 notrap aligned v13
;; @001f                               v15 = load.i32 notrap aligned v13+4
;; @001f                               v21 = uextend.i64 v14
;; @001f                               v16 = uextend.i64 v11
;; @001f                               v17 = iconst.i64 15
;; @001f                               v19 = iadd v16, v17  ; v17 = 15
;; @001f                               v18 = iconst.i64 -16
;; @001f                               v20 = band v19, v18  ; v18 = -16
;; @001f                               v22 = iadd v21, v20
;; @001f                               v23 = uextend.i64 v15
;; @001f                               v24 = icmp ule v22, v23
;; @001f                               brif v24, block2, block3
;;
;;                                 block2:
;;                                     v114 = iconst.i32 15
;;                                     v115 = iadd.i32 v11, v114  ; v114 = 15
;;                                     v118 = iconst.i32 -16
;;                                     v119 = band v115, v118  ; v118 = -16
;;                                     v121 = iadd.i32 v14, v119
;; @001f                               store notrap aligned region0 v121, v13
;;                                     v137 = iconst.i32 -1476394994
;;                                     v138 = load.i64 notrap aligned readonly can_move v0+8
;;                                     v139 = load.i64 notrap aligned readonly can_move v138+32
;; @001f                               v38 = iadd v139, v21
;; @001f                               store notrap aligned v137, v38  ; v137 = -1476394994
;;                                     v140 = load.i64 notrap aligned readonly can_move v0+40
;;                                     v141 = load.i32 notrap aligned readonly can_move v140
;; @001f                               store notrap aligned v141, v38+4
;;                                     v142 = band.i64 v19, v18  ; v18 = -16
;; @001f                               istore32 notrap aligned v142, v38+8
;; @001f                               jump block4(v14, v38)
;;
;;                                 block3 cold:
;; @001f                               v26 = iconst.i32 -1476394994
;; @001f                               v28 = load.i64 notrap aligned readonly can_move v0+40
;; @001f                               v29 = load.i32 notrap aligned readonly can_move v28
;; @001f                               v30 = iconst.i32 16
;; @001f                               v31 = call fn0(v0, v26, v29, v11, v30)  ; v26 = -1476394994, v30 = 16
;; @001f                               v94 = load.i64 notrap aligned readonly can_move v0+8
;; @001f                               v32 = load.i64 notrap aligned readonly can_move v94+32
;; @001f                               v33 = uextend.i64 v31
;; @001f                               v34 = iadd v32, v33
;; @001f                               jump block4(v31, v34)
;;
;;                                 block4(v43: i32, v44: i64):
;; @001f                               v45 = iconst.i64 16
;; @001f                               v46 = iadd v44, v45  ; v45 = 16
;; @001f                               store.i32 user2 region1 v2, v46
;; @001f                               trapz v43, user16
;;                                     v143 = load.i64 notrap aligned readonly can_move v0+8
;;                                     v144 = load.i64 notrap aligned readonly can_move v143+32
;; @001f                               v49 = uextend.i64 v43
;; @001f                               v51 = iadd v144, v49
;; @001f                               v53 = iadd v51, v45  ; v45 = 16
;; @001f                               v54 = load.i32 user2 readonly region1 v53
;; @001f                               v55 = uextend.i64 v54
;; @001f                               v61 = icmp.i64 ugt v5, v55
;; @001f                               trapnz v61, user17
;; @001f                               v75 = load.i64 notrap aligned v143+40
;; @001f                               v65 = iconst.i64 20
;; @001f                               v66 = iadd v51, v65  ; v65 = 20
;; @001f                               v77 = uadd_overflow_trap v66, v99, user2
;; @001f                               v76 = iadd v144, v75
;; @001f                               v78 = icmp ugt v77, v76
;; @001f                               trapnz v78, user2
;;                                     v123 = iconst.i64 0
;; @001f                               v81 = icmp.i64 eq v5, v123  ; v123 = 0
;; @001f                               v47 = iconst.i32 0
;; @001f                               v6 = iconst.i64 4
;; @001f                               v79 = iadd v66, v99
;; @001f                               brif v81, block6, block5(v66)
;;
;;                                 block5(v82: i64):
;;                                     v145 = iconst.i32 0
;; @001f                               store user2 little region1 v145, v82  ; v145 = 0
;;                                     v146 = iconst.i64 4
;;                                     v147 = iadd v82, v146  ; v146 = 4
;; @001f                               v85 = icmp eq v147, v79
;; @001f                               brif v85, block6, block5(v147)
;;
;;                                 block6:
;; @0022                               jump block1(v43)
;;
;;                                 block1(v3: i32):
;; @0022                               return v3
;; }