Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/tests/disas/component-model/inlining-and-unsafe-intrinsics.wat
2450 views
;;! target = "x86_64"
;;! test = "optimize"
;;! filter = "wasm[0]--function"
;;! flags = "-C inlining=y"
;;! unsafe_intrinsics = "unsafe-intrinsics"

(component
    (import "unsafe-intrinsics"
        (instance $intrinsics
            (export "store-data-address" (func (result u64)))
            (export "u8-native-load" (func (param "pointer" u64) (result u8)))
            (export "u8-native-store" (func (param "pointer" u64) (param "value" u8)))
        )
    )

    (core func $store-data-address' (canon lower (func $intrinsics "store-data-address")))
    (core func $u8-native-load' (canon lower (func $intrinsics "u8-native-load")))
    (core func $u8-native-store' (canon lower (func $intrinsics "u8-native-store")))

    (core module $m
        (import "" "store-data-address" (func $store-data-address (result i64)))
        (import "" "u8-native-load" (func $load (param i64) (result i32)))
        (import "" "u8-native-store" (func $store (param i64 i32)))
        (func (export "f")
            (local $x i32)
            (local.set $x (call $load (call $store-data-address)))
            (call $store (call $store-data-address)
                         (i32.add (local.get $x) (i32.const 1)))
        )
    )

    (core instance $i
        (instantiate $m
            (with "" (instance (export "store-data-address" (func $store-data-address'))
                               (export "u8-native-load" (func $u8-native-load'))
                               (export "u8-native-store" (func $u8-native-store'))))
        )
    )

    (func (export "f")
      (canon lift (core func $i "f"))
    )
)

;; function u0:0(i64 vmctx, i64) tail {
;;     gv0 = vmctx
;;     gv1 = load.i64 notrap aligned readonly gv0+8
;;     gv2 = load.i64 notrap aligned gv1+16
;;     gv3 = vmctx
;;     sig0 = (i64 vmctx, i64) -> i64 tail
;;     sig1 = (i64 vmctx, i64, i64) -> i32 tail
;;     sig2 = (i64 vmctx, i64, i64, i32) tail
;;     fn0 = colocated u2147483648:0 sig0
;;     fn1 = colocated u2147483648:1 sig1
;;     fn2 = colocated u2147483648:2 sig2
;;     stack_limit = gv2
;;
;;                                 block0(v0: i64, v1: i64):
;; @0153                               jump block2
;;
;;                                 block2:
;;                                     jump block3
;;
;;                                 block3:
;; @0155                               jump block4
;;
;;                                 block4:
;; @0153                               v4 = load.i64 notrap aligned readonly can_move v0+64
;;                                     v17 = load.i64 notrap aligned readonly can_move vmctx v4+16
;;                                     v18 = load.i64 notrap aligned readonly can_move vmctx v17+96
;;                                     v20 = load.i8 notrap aligned v18
;;                                     jump block5
;;
;;                                 block5:
;; @0159                               jump block6
;;
;;                                 block6:
;;                                     jump block7
;;
;;                                 block7:
;; @0160                               jump block8
;;
;;                                 block8:
;;                                     v28 = iconst.i8 1
;;                                     v29 = iadd.i8 v20, v28  ; v28 = 1
;;                                     store notrap aligned v29, v18
;;                                     jump block9
;;
;;                                 block9:
;; @0162                               jump block1
;;
;;                                 block1:
;; @0162                               return
;; }