1;;! target = "x86_64"
2;;! flags = [
3;;!   "-Ccranelift-enable-heap-access-spectre-mitigation=false",
4;;!   "-Ostatic-memory-maximum-size=0",
5;;!   "-Odynamic-memory-guard-size=0",
6;;! ]
7
8;; Test that dynamic memories with `min_size == max_size` don't actually load
9;; their dynamic memory bound, since it is a constant.
10
11(module
12  (memory 1 1)
13
14  (func (export "do_store") (param i32 i32)
15    local.get 0
16    local.get 1
17    i32.store8 offset=0)
18
19  (func (export "do_load") (param i32) (result i32)
20    local.get 0
21    i32.load8_u offset=0))
22
23;; function u0:0(i64 vmctx, i64, i32, i32) tail {
24;;     gv0 = vmctx
25;;     gv1 = load.i64 notrap aligned readonly gv0+8
26;;     gv2 = load.i64 notrap aligned gv1+24
27;;     gv3 = vmctx
28;;     gv4 = load.i64 notrap aligned gv3+64
29;;     gv5 = load.i64 notrap aligned readonly can_move gv3+56
30;;     stack_limit = gv2
31;;
32;;                                 block0(v0: i64, v1: i64, v2: i32, v3: i32):
33;; @0041                               v4 = uextend.i64 v2
34;; @0041                               v5 = iconst.i64 0x0001_0000
35;; @0041                               v6 = icmp uge v4, v5  ; v5 = 0x0001_0000
36;; @0041                               trapnz v6, heap_oob
37;; @0041                               v7 = load.i64 notrap aligned readonly can_move v0+56
38;; @0041                               v8 = iadd v7, v4
39;; @0041                               istore8 little heap v3, v8
40;; @0044                               jump block1
41;;
42;;                                 block1:
43;; @0044                               return
44;; }
45;;
46;; function u0:1(i64 vmctx, i64, i32) -> i32 tail {
47;;     gv0 = vmctx
48;;     gv1 = load.i64 notrap aligned readonly gv0+8
49;;     gv2 = load.i64 notrap aligned gv1+24
50;;     gv3 = vmctx
51;;     gv4 = load.i64 notrap aligned gv3+64
52;;     gv5 = load.i64 notrap aligned readonly can_move gv3+56
53;;     stack_limit = gv2
54;;
55;;                                 block0(v0: i64, v1: i64, v2: i32):
56;; @0049                               v4 = uextend.i64 v2
57;; @0049                               v5 = iconst.i64 0x0001_0000
58;; @0049                               v6 = icmp uge v4, v5  ; v5 = 0x0001_0000
59;; @0049                               trapnz v6, heap_oob
60;; @0049                               v7 = load.i64 notrap aligned readonly can_move v0+56
61;; @0049                               v8 = iadd v7, v4
62;; @0049                               v9 = uload8.i32 little heap v8
63;; @004c                               jump block1
64;;
65;;                                 block1:
66;; @004c                               return v9
67;; }
68