;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
;; NOTE: This test was ported using port_passes_tests_to_lit.py and could be cleaned up.
;; RUN: foreach %s %t wasm-opt --memory-packing --all-features -S -o - | filecheck %s
(module
;; CHECK: (import "env" "memoryBase" (global $memoryBase i32))
(import "env" "memoryBase" (global $memoryBase i32))
;; CHECK: (memory $0 2048 2048)
(memory $0 2048 2048)
;; nothing
)
(module
;; CHECK: (import "env" "memoryBase" (global $memoryBase i32))
(import "env" "memoryBase" (global $memoryBase i32))
;; CHECK: (memory $0 2048 2048)
(memory $0 2048 2048)
(data (i32.const 4066) "") ;; empty; leave it as is
;; (remove-unused-module-elements handles such
;; things, taking into account possible traps etc.)
)
;; CHECK: (data $0 (i32.const 4066) "")
(module
;; CHECK: (import "env" "memoryBase" (global $memoryBase i32))
(import "env" "memoryBase" (global $memoryBase i32))
;; CHECK: (memory $0 2048 2048)
(memory $0 2048 2048)
(data (global.get $memoryBase) "waka this cannot be optimized\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00we don't know where it will go")
)
;; CHECK: (data $0 (global.get $memoryBase) "waka this cannot be optimized\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00we don\'t know where it will go")
(module
(memory 1 1)
(data (i32.const 1024) "waka this CAN be optimized\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00we DO know where it will go")
(data (i32.const 2000) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeros before")
(data (i32.const 3000) "zeros after\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00")
(data (i32.const 4000) "zeros\00in\00the\00middle\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00nice skip here\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00another\00but no")
;; CHECK: (type $0 (func))
;; CHECK: (memory $0 1 1)
;; CHECK: (data $0 (i32.const 1024) "waka this CAN be optimized")
;; CHECK: (data $0.1 (i32.const 1107) "we DO know where it will go")
;; CHECK: (data $1 (i32.const 2057) "zeros before")
;; CHECK: (data $2 (i32.const 3000) "zeros after")
;; CHECK: (data $3 (i32.const 4000) "zeros\00in\00the\00middle")
;; CHECK: (data $3.1 (i32.const 4035) "nice skip here")
;; CHECK: (data $3.2 (i32.const 4066) "another\00but no")
;; CHECK: (func $nonzero-size-init-of-active-will-trap (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 42)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 13)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $nonzero-size-init-of-active-will-trap
(memory.init 0
(i32.const 42)
(i32.const 0)
(i32.const 13)
)
(data.drop 0)
)
;; CHECK: (func $nonzero-offset-init-of-active-will-trap (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 42)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 13)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $nonzero-offset-init-of-active-will-trap
(memory.init 0
(i32.const 42)
(i32.const 13)
(i32.const 0)
)
(data.drop 0)
)
;; CHECK: (func $zero-offset-size-init-of-active-may-trap (type $0)
;; CHECK-NEXT: (if
;; CHECK-NEXT: (i32.gt_u
;; CHECK-NEXT: (i32.const 42)
;; CHECK-NEXT: (i32.shl
;; CHECK-NEXT: (memory.size)
;; CHECK-NEXT: (i32.const 16)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $zero-offset-size-init-of-active-may-trap
(memory.init 0
(i32.const 42)
(i32.const 0)
(i32.const 0)
)
(data.drop 0)
)
)
(module
;; CHECK: (type $0 (func))
;; CHECK: (global $__mem_segment_drop_state (mut i32) (i32.const 0))
;; CHECK: (global $__mem_segment_drop_state_1 (mut i32) (i32.const 0))
;; CHECK: (global $__mem_segment_drop_state_2 (mut i32) (i32.const 0))
;; CHECK: (memory $0 2048 2048)
(memory $0 2048 2048)
(data "not referenced, delete me") ;; 0
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes at start") ;; 1
;; CHECK: (data $1 "zeroes at start")
;; CHECK: (data $2 "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes at start")
;; CHECK: (data $3 "\00\00\00few zeroes at start")
;; CHECK: (data $4 "zeroes at end")
;; CHECK: (data $5 "zeroes at end\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00")
;; CHECK: (data $6 "few zeroes at end\00\00\00")
;; CHECK: (data $7 "zeroes")
;; CHECK: (data $7.1 "in middle")
;; CHECK: (data $8 "zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00in middle")
;; CHECK: (data $9 "few zeroes\00\00\00in middle")
;; CHECK: (data $10 "multiple")
;; CHECK: (data $10.1 "spans")
;; CHECK: (data $10.2 "of zeroes")
;; CHECK: (data $11 "even")
;; CHECK: (data $11.1 "more")
;; CHECK: (data $11.2 "zeroes")
;; CHECK: (data $13 "no zeroes")
;; CHECK: (func $zeroes-at-start (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (if
;; CHECK-NEXT: (global.get $__mem_segment_drop_state)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $1
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 15)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (global.set $__mem_segment_drop_state
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $zeroes-at-start
(memory.init 1
(i32.const 0)
(i32.const 0)
(i32.const 45)
)
(data.drop 1)
)
;; the not-split tests have too many memory.init and data.drop instructions for splitting to be worth it
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes at start") ;; 2
;; CHECK: (func $zeroes-at-start-not-split (type $0)
;; CHECK-NEXT: (memory.init $2
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 45)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $2
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 45)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $2
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 45)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $2
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 45)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $2)
;; CHECK-NEXT: )
(func $zeroes-at-start-not-split
(memory.init 2
(i32.const 0)
(i32.const 0)
(i32.const 45)
)
(memory.init 2
(i32.const 0)
(i32.const 0)
(i32.const 45)
)
(memory.init 2
(i32.const 0)
(i32.const 0)
(i32.const 45)
)
(memory.init 2
(i32.const 0)
(i32.const 0)
(i32.const 45)
)
(data.drop 2)
)
(data "\00\00\00few zeroes at start") ;; 3
;; CHECK: (func $few-zeroes-at-start (type $0)
;; CHECK-NEXT: (memory.init $3
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 22)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $3)
;; CHECK-NEXT: )
(func $few-zeroes-at-start
(memory.init 3
(i32.const 0)
(i32.const 0)
(i32.const 22)
)
(data.drop 3)
)
(data "zeroes at end\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 4
;; CHECK: (func $zeroes-at-end (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (memory.init $4
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 13)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 13)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $4)
;; CHECK-NEXT: )
(func $zeroes-at-end
(memory.init 4
(i32.const 0)
(i32.const 0)
(i32.const 43)
)
(data.drop 4)
)
(data "zeroes at end\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 5
;; CHECK: (func $zeroes-at-end-not-split (type $0)
;; CHECK-NEXT: (memory.init $5
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 43)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $5
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 43)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $5
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 43)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $5
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 43)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $5)
;; CHECK-NEXT: )
(func $zeroes-at-end-not-split
(memory.init 5
(i32.const 0)
(i32.const 0)
(i32.const 43)
)
(memory.init 5
(i32.const 0)
(i32.const 0)
(i32.const 43)
)
(memory.init 5
(i32.const 0)
(i32.const 0)
(i32.const 43)
)
(memory.init 5
(i32.const 0)
(i32.const 0)
(i32.const 43)
)
(data.drop 5)
)
(data "few zeroes at end\00\00\00") ;; 6
;; CHECK: (func $few-zeroes-at-end (type $0)
;; CHECK-NEXT: (memory.init $6
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 20)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $6)
;; CHECK-NEXT: )
(func $few-zeroes-at-end
(memory.init 6
(i32.const 0)
(i32.const 0)
(i32.const 20)
)
(data.drop 6)
)
(data "zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00in middle") ;; 7
;; CHECK: (func $zeroes-in-middle (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (memory.init $7
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 6)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 6)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $7.1
;; CHECK-NEXT: (i32.const 36)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 9)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (data.drop $7)
;; CHECK-NEXT: (data.drop $7.1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $zeroes-in-middle
(memory.init 7
(i32.const 0)
(i32.const 0)
(i32.const 45)
)
(data.drop 7)
)
(data "zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00in middle") ;; 8
;; CHECK: (func $zeroes-in-middle-not-split (type $0)
;; CHECK-NEXT: (memory.init $8
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 35)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $8
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 45)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $8)
;; CHECK-NEXT: )
(func $zeroes-in-middle-not-split
(memory.init 8
(i32.const 0)
(i32.const 0)
(i32.const 35)
)
(memory.init 8
(i32.const 0)
(i32.const 0)
(i32.const 45)
)
(data.drop 8)
)
(data "few zeroes\00\00\00in middle") ;; 9
;; CHECK: (func $few-zeroes-in-middle (type $0)
;; CHECK-NEXT: (memory.init $9
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 22)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $9)
;; CHECK-NEXT: )
(func $few-zeroes-in-middle
(memory.init 9
(i32.const 0)
(i32.const 0)
(i32.const 22)
)
(data.drop 9)
)
(data "multiple\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00spans\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00of zeroes") ;; 10
;; CHECK: (func $multiple-spans-of-zeroes (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (memory.init $10
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 8)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 8)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $10.1
;; CHECK-NEXT: (i32.const 38)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 5)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 43)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $10.2
;; CHECK-NEXT: (i32.const 73)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 9)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (data.drop $10)
;; CHECK-NEXT: (data.drop $10.1)
;; CHECK-NEXT: (data.drop $10.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $multiple-spans-of-zeroes
(memory.init 10
(i32.const 0)
(i32.const 0)
(i32.const 82)
)
(data.drop 10)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 11
;; CHECK: (func $even-more-zeroes (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (if
;; CHECK-NEXT: (global.get $__mem_segment_drop_state_1)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $11
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 34)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $11.1
;; CHECK-NEXT: (i32.const 64)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 68)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $11.2
;; CHECK-NEXT: (i32.const 98)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 6)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 104)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (global.set $__mem_segment_drop_state_1
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $11)
;; CHECK-NEXT: (data.drop $11.1)
;; CHECK-NEXT: (data.drop $11.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $even-more-zeroes
(memory.init 11
(i32.const 0)
(i32.const 0)
(i32.const 134)
)
(data.drop 11)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 12
;; CHECK: (func $only-zeroes (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (if
;; CHECK-NEXT: (global.get $__mem_segment_drop_state_2)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (global.set $__mem_segment_drop_state_2
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $only-zeroes
(memory.init 12
(i32.const 0)
(i32.const 0)
(i32.const 30)
)
(data.drop 12)
)
(data "no zeroes") ;; 13
;; CHECK: (func $no-zeroes (type $0)
;; CHECK-NEXT: (memory.init $13
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 9)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $13)
;; CHECK-NEXT: )
(func $no-zeroes
(memory.init 13
(i32.const 0)
(i32.const 0)
(i32.const 9)
)
(data.drop 13)
)
(data "") ;; 14
;; CHECK: (func $empty (type $0)
;; CHECK-NEXT: (if
;; CHECK-NEXT: (i32.gt_u
;; CHECK-NEXT: (i32.const 13)
;; CHECK-NEXT: (i32.shl
;; CHECK-NEXT: (memory.size)
;; CHECK-NEXT: (i32.const 16)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $empty
(memory.init 14
(i32.const 13)
(i32.const 0)
(i32.const 0)
)
(data.drop 14)
)
(data "only dropped") ;; 15
;; CHECK: (func $only-dropped (type $0)
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $only-dropped
(data.drop 15)
(data.drop 15)
)
(data "\00\00\00\00\00") ;; 16
;; CHECK: (func $only-dropped-zeroes (type $0)
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $only-dropped-zeroes
(data.drop 16)
(data.drop 16)
)
(data "") ;; not referenced
(data "\00\00\00\00\00") ;; not referenced
)
(module
;; CHECK: (type $0 (func))
;; CHECK: (import "env" "param" (global $param i32))
(import "env" "param" (global $param i32))
;; CHECK: (global $__mem_segment_drop_state (mut i32) (i32.const 0))
;; CHECK: (global $__mem_segment_drop_state_2 (mut i32) (i32.const 0))
;; CHECK: (global $__mem_segment_drop_state_3 (mut i32) (i32.const 0))
;; CHECK: (global $__mem_segment_drop_state_4 (mut i32) (i32.const 0))
;; CHECK: (global $__mem_segment_drop_state_5 (mut i32) (i32.const 0))
;; CHECK: (global $__mem_segment_drop_state_6 (mut i32) (i32.const 0))
;; CHECK: (global $__mem_segment_drop_state_7 (mut i32) (i32.const 0))
;; CHECK: (global $__mem_segment_drop_state_8 (mut i32) (i32.const 0))
;; CHECK: (memory $0 2048 2048)
(memory $0 2048 2048)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 0
;; CHECK: (data $0 "even")
;; CHECK: (data $0.1 "more")
;; CHECK: (data $0.2 "zeroes")
;; CHECK: (data $1 "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00")
;; CHECK: (data $2 "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00")
;; CHECK: (data $3 "even")
;; CHECK: (data $3.1 "more")
;; CHECK: (data $3.2 "zeroes")
;; CHECK: (data $4 "even")
;; CHECK: (data $4.1 "more")
;; CHECK: (data $4.2 "zeroes")
;; CHECK: (data $5 "even")
;; CHECK: (data $5.1 "more")
;; CHECK: (data $5.2 "zeroes")
;; CHECK: (data $6 "even")
;; CHECK: (data $6.1 "more")
;; CHECK: (data $6.2 "zeroes")
;; CHECK: (data $7 "even")
;; CHECK: (data $7.1 "more")
;; CHECK: (data $7.2 "zeroes")
;; CHECK: (data $8 "even")
;; CHECK: (data $8.1 "more")
;; CHECK: (data $8.2 "zeroes")
;; CHECK: (data $9 "even")
;; CHECK: (data $9.1 "more")
;; CHECK: (data $9.2 "zeroes")
;; CHECK: (data $10 "even")
;; CHECK: (data $10.1 "more")
;; CHECK: (data $10.2 "zeroes")
;; CHECK: (data $14 "even")
;; CHECK: (data $14.1 "more")
;; CHECK: (data $14.2 "zeroes")
;; CHECK: (func $nonconst-dest (type $0)
;; CHECK-NEXT: (local $0 i32)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (local.set $0
;; CHECK-NEXT: (global.get $param)
;; CHECK-NEXT: )
;; CHECK-NEXT: (if
;; CHECK-NEXT: (global.get $__mem_segment_drop_state)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0
;; CHECK-NEXT: (i32.add
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.add
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: (i32.const 34)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.1
;; CHECK-NEXT: (i32.add
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: (i32.const 64)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.add
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: (i32.const 68)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.2
;; CHECK-NEXT: (i32.add
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: (i32.const 98)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 6)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.add
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: (i32.const 104)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (global.set $__mem_segment_drop_state
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $0)
;; CHECK-NEXT: (data.drop $0.1)
;; CHECK-NEXT: (data.drop $0.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $nonconst-dest
(memory.init 0
(global.get $param)
(i32.const 0)
(i32.const 134)
)
(data.drop 0)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 1
;; CHECK: (func $nonconst-offset (type $0)
;; CHECK-NEXT: (memory.init $1
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (global.get $param)
;; CHECK-NEXT: (i32.const 134)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $1)
;; CHECK-NEXT: )
(func $nonconst-offset
(memory.init 1
(i32.const 0)
(global.get $param)
(i32.const 134)
)
(data.drop 1)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 2
;; CHECK: (func $nonconst-size (type $0)
;; CHECK-NEXT: (memory.init $2
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (global.get $param)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $2)
;; CHECK-NEXT: )
(func $nonconst-size
(memory.init 2
(i32.const 0)
(i32.const 0)
(global.get $param)
)
(data.drop 2)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 3
;; CHECK: (func $partial-skip-start (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (if
;; CHECK-NEXT: (global.get $__mem_segment_drop_state_2)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 20)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $3
;; CHECK-NEXT: (i32.const 20)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 24)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $3.1
;; CHECK-NEXT: (i32.const 54)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 58)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $3.2
;; CHECK-NEXT: (i32.const 88)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 6)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 94)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (global.set $__mem_segment_drop_state_2
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $3)
;; CHECK-NEXT: (data.drop $3.1)
;; CHECK-NEXT: (data.drop $3.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $partial-skip-start
(memory.init 3
(i32.const 0)
(i32.const 10)
(i32.const 124)
)
(data.drop 3)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 4
;; CHECK: (func $full-skip-start (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (memory.init $4
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $4.1
;; CHECK-NEXT: (i32.const 32)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 36)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $4.2
;; CHECK-NEXT: (i32.const 66)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 6)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 72)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (data.drop $4)
;; CHECK-NEXT: (data.drop $4.1)
;; CHECK-NEXT: (data.drop $4.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $full-skip-start
(memory.init 4
(i32.const 0)
(i32.const 32)
(i32.const 102)
)
(data.drop 4)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 5
;; CHECK: (func $partial-skip-end (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (if
;; CHECK-NEXT: (global.get $__mem_segment_drop_state_3)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $5
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 34)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $5.1
;; CHECK-NEXT: (i32.const 64)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 68)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $5.2
;; CHECK-NEXT: (i32.const 98)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 6)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 104)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 20)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (global.set $__mem_segment_drop_state_3
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $5)
;; CHECK-NEXT: (data.drop $5.1)
;; CHECK-NEXT: (data.drop $5.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $partial-skip-end
(memory.init 5
(i32.const 0)
(i32.const 0)
(i32.const 124)
)
(data.drop 5)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 6
;; CHECK: (func $full-skip-end (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (if
;; CHECK-NEXT: (global.get $__mem_segment_drop_state_4)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $6
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 34)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $6.1
;; CHECK-NEXT: (i32.const 64)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 68)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $6.2
;; CHECK-NEXT: (i32.const 98)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (global.set $__mem_segment_drop_state_4
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $6)
;; CHECK-NEXT: (data.drop $6.1)
;; CHECK-NEXT: (data.drop $6.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $full-skip-end
(memory.init 6
(i32.const 0)
(i32.const 0)
(i32.const 102)
)
(data.drop 6)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 7
;; CHECK: (func $slice-zeroes (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (if
;; CHECK-NEXT: (global.get $__mem_segment_drop_state_5)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 10)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (global.set $__mem_segment_drop_state_5
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $7)
;; CHECK-NEXT: (data.drop $7.1)
;; CHECK-NEXT: (data.drop $7.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $slice-zeroes
(memory.init 7
(i32.const 0)
(i32.const 35)
(i32.const 10)
)
(data.drop 7)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 8
;; CHECK: (func $slice-nonzeroes (type $0)
;; CHECK-NEXT: (memory.init $8
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (data.drop $8)
;; CHECK-NEXT: (data.drop $8.1)
;; CHECK-NEXT: (data.drop $8.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $slice-nonzeroes
(memory.init 8
(i32.const 0)
(i32.const 31)
(i32.const 2)
)
(data.drop 8)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 9
;; CHECK: (func $zero-size (type $0)
;; CHECK-NEXT: (if
;; CHECK-NEXT: (i32.or
;; CHECK-NEXT: (i32.gt_u
;; CHECK-NEXT: (i32.const 13)
;; CHECK-NEXT: (i32.shl
;; CHECK-NEXT: (memory.size)
;; CHECK-NEXT: (i32.const 16)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (global.get $__mem_segment_drop_state_6)
;; CHECK-NEXT: )
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (global.set $__mem_segment_drop_state_6
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $9)
;; CHECK-NEXT: (data.drop $9.1)
;; CHECK-NEXT: (data.drop $9.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $zero-size
(memory.init 9
(i32.const 13)
(i32.const 40)
(i32.const 0)
)
(data.drop 9)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 10
;; CHECK: (func $zero-size-undropped (type $0)
;; CHECK-NEXT: (if
;; CHECK-NEXT: (i32.or
;; CHECK-NEXT: (i32.gt_u
;; CHECK-NEXT: (i32.const 13)
;; CHECK-NEXT: (i32.shl
;; CHECK-NEXT: (memory.size)
;; CHECK-NEXT: (i32.const 16)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (global.get $__mem_segment_drop_state_7)
;; CHECK-NEXT: )
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $zero-size-undropped
(memory.init 10
(i32.const 13)
(i32.const 40)
(i32.const 0)
)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 11
;; CHECK: (func $out-of-bounds-offset (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 135)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $out-of-bounds-offset
(memory.init 11
(i32.const 0)
(i32.const 135)
(i32.const 1)
)
(data.drop 11)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 12
;; CHECK: (func $zero-size-out-of-bounds-offset (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 135)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $zero-size-out-of-bounds-offset
(memory.init 12
(i32.const 0)
(i32.const 135)
(i32.const 0)
)
(data.drop 12)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 13
;; CHECK: (func $out-of-bounds-size (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: (drop
;; CHECK-NEXT: (i32.const 135)
;; CHECK-NEXT: )
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (nop)
;; CHECK-NEXT: )
(func $out-of-bounds-size
(memory.init 13
(i32.const 0)
(i32.const 0)
(i32.const 135)
)
(data.drop 13)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00more\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00zeroes\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") ;; 14
;; CHECK: (func $zero-size-at-bounds-offset (type $0)
;; CHECK-NEXT: (if
;; CHECK-NEXT: (i32.or
;; CHECK-NEXT: (i32.gt_u
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.shl
;; CHECK-NEXT: (memory.size)
;; CHECK-NEXT: (i32.const 16)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (global.get $__mem_segment_drop_state_8)
;; CHECK-NEXT: )
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (global.set $__mem_segment_drop_state_8
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $14)
;; CHECK-NEXT: (data.drop $14.1)
;; CHECK-NEXT: (data.drop $14.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $zero-size-at-bounds-offset
(memory.init 14
(i32.const 0)
(i32.const 134)
(i32.const 0)
)
(data.drop 14)
)
)
(module
;; CHECK: (type $0 (func))
;; CHECK: (global $__mem_segment_drop_state (mut i32) (i32.const 0))
;; CHECK: (global $__mem_segment_drop_state_1 (mut i32) (i32.const 0))
;; CHECK: (global $__mem_segment_drop_state_2 (mut i32) (i32.const 0))
;; CHECK: (global $__mem_segment_drop_state_3 (mut i32) (i32.const 0))
;; CHECK: (memory $0 2048 2048)
(memory $0 2048 2048)
(data "hi\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00hi") ;; 0
;; CHECK: (data $0 "hi")
;; CHECK: (data $0.1 "even")
;; CHECK: (data $0.2 "hi")
;; CHECK: (data $1 "hi")
;; CHECK: (data $1.1 "even")
;; CHECK: (data $1.2 "hi")
;; CHECK: (data $2 "even")
;; CHECK: (data $2.1 "hi")
;; CHECK: (data $3 "even")
;; CHECK: (data $3.1 "hi")
;; CHECK: (func $zero-length-init-zeroes (type $0)
;; CHECK-NEXT: (if
;; CHECK-NEXT: (i32.or
;; CHECK-NEXT: (i32.gt_u
;; CHECK-NEXT: (i32.const 13)
;; CHECK-NEXT: (i32.shl
;; CHECK-NEXT: (memory.size)
;; CHECK-NEXT: (i32.const 16)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (global.get $__mem_segment_drop_state)
;; CHECK-NEXT: )
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (global.set $__mem_segment_drop_state
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $0)
;; CHECK-NEXT: (data.drop $0.1)
;; CHECK-NEXT: (data.drop $0.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $zero-length-init-zeroes
(memory.init 0
(i32.const 13)
(i32.const 10)
(i32.const 0)
)
(data.drop 0)
)
(data "hi\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00hi") ;; 1
;; CHECK: (func $zero-length-init-nonzeroes (type $0)
;; CHECK-NEXT: (if
;; CHECK-NEXT: (i32.or
;; CHECK-NEXT: (i32.gt_u
;; CHECK-NEXT: (i32.const 13)
;; CHECK-NEXT: (i32.shl
;; CHECK-NEXT: (memory.size)
;; CHECK-NEXT: (i32.const 16)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (global.get $__mem_segment_drop_state_1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (global.set $__mem_segment_drop_state_1
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $1)
;; CHECK-NEXT: (data.drop $1.1)
;; CHECK-NEXT: (data.drop $1.2)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $zero-length-init-nonzeroes
(memory.init 1
(i32.const 13)
(i32.const 33)
(i32.const 0)
)
(data.drop 1)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00hi") ;; 2
;; CHECK: (func $zero-length-init-zeroes-2 (type $0)
;; CHECK-NEXT: (if
;; CHECK-NEXT: (i32.or
;; CHECK-NEXT: (i32.gt_u
;; CHECK-NEXT: (i32.const 13)
;; CHECK-NEXT: (i32.shl
;; CHECK-NEXT: (memory.size)
;; CHECK-NEXT: (i32.const 16)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (global.get $__mem_segment_drop_state_2)
;; CHECK-NEXT: )
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (global.set $__mem_segment_drop_state_2
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $2)
;; CHECK-NEXT: (data.drop $2.1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $zero-length-init-zeroes-2
(memory.init 2
(i32.const 13)
(i32.const 10)
(i32.const 0)
)
(data.drop 2)
)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00even\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00hi") ;; 3
;; CHECK: (func $zero-length-init-nonzeroes-2 (type $0)
;; CHECK-NEXT: (if
;; CHECK-NEXT: (i32.or
;; CHECK-NEXT: (i32.gt_u
;; CHECK-NEXT: (i32.const 13)
;; CHECK-NEXT: (i32.shl
;; CHECK-NEXT: (memory.size)
;; CHECK-NEXT: (i32.const 16)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (global.get $__mem_segment_drop_state_3)
;; CHECK-NEXT: )
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (global.set $__mem_segment_drop_state_3
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (data.drop $3)
;; CHECK-NEXT: (data.drop $3.1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $zero-length-init-nonzeroes-2
(memory.init 3
(i32.const 13)
(i32.const 31)
(i32.const 0)
)
(data.drop 3)
)
)
(module
;; CHECK: (type $0 (func))
;; CHECK: (memory $0 2048 2048)
(memory $0 2048 2048)
(data "a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00a") ;; 64 ranges of zeroes
;; CHECK: (data $0 "a")
;; CHECK: (data $0.1 "a")
;; CHECK: (data $0.2 "a")
;; CHECK: (data $0.3 "a")
;; CHECK: (data $0.4 "a")
;; CHECK: (data $0.5 "a")
;; CHECK: (data $0.6 "a")
;; CHECK: (data $0.7 "a")
;; CHECK: (data $0.8 "a")
;; CHECK: (data $0.9 "a")
;; CHECK: (data $0.10 "a")
;; CHECK: (data $0.11 "a")
;; CHECK: (data $0.12 "a")
;; CHECK: (data $0.13 "a")
;; CHECK: (data $0.14 "a")
;; CHECK: (data $0.15 "a")
;; CHECK: (data $0.16 "a")
;; CHECK: (data $0.17 "a")
;; CHECK: (data $0.18 "a")
;; CHECK: (data $0.19 "a")
;; CHECK: (data $0.20 "a")
;; CHECK: (data $0.21 "a")
;; CHECK: (data $0.22 "a")
;; CHECK: (data $0.23 "a")
;; CHECK: (data $0.24 "a")
;; CHECK: (data $0.25 "a")
;; CHECK: (data $0.26 "a")
;; CHECK: (data $0.27 "a")
;; CHECK: (data $0.28 "a")
;; CHECK: (data $0.29 "a")
;; CHECK: (data $0.30 "a")
;; CHECK: (data $0.31 "a")
;; CHECK: (data $0.32 "a")
;; CHECK: (data $0.33 "a")
;; CHECK: (data $0.34 "a")
;; CHECK: (data $0.35 "a")
;; CHECK: (data $0.36 "a")
;; CHECK: (data $0.37 "a")
;; CHECK: (data $0.38 "a")
;; CHECK: (data $0.39 "a")
;; CHECK: (data $0.40 "a")
;; CHECK: (data $0.41 "a")
;; CHECK: (data $0.42 "a")
;; CHECK: (data $0.43 "a")
;; CHECK: (data $0.44 "a")
;; CHECK: (data $0.45 "a")
;; CHECK: (data $0.46 "a")
;; CHECK: (data $0.47 "a")
;; CHECK: (data $0.48 "a")
;; CHECK: (data $0.49 "a")
;; CHECK: (data $0.50 "a")
;; CHECK: (data $0.51 "a")
;; CHECK: (data $0.52 "a")
;; CHECK: (data $0.53 "a")
;; CHECK: (data $0.54 "a")
;; CHECK: (data $0.55 "a")
;; CHECK: (data $0.56 "a")
;; CHECK: (data $0.57 "a")
;; CHECK: (data $0.58 "a")
;; CHECK: (data $0.59 "a")
;; CHECK: (data $0.60 "a")
;; CHECK: (data $0.61 "a")
;; CHECK: (data $0.62 "a")
;; CHECK: (data $0.63 "a")
;; CHECK: (data $0.64 "a")
;; CHECK: (func $init-lots (type $0)
;; CHECK-NEXT: (block
;; CHECK-NEXT: (memory.init $0
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.1
;; CHECK-NEXT: (i32.const 31)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 32)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.2
;; CHECK-NEXT: (i32.const 62)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 63)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.3
;; CHECK-NEXT: (i32.const 93)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 94)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.4
;; CHECK-NEXT: (i32.const 124)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 125)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.5
;; CHECK-NEXT: (i32.const 155)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 156)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.6
;; CHECK-NEXT: (i32.const 186)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 187)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.7
;; CHECK-NEXT: (i32.const 217)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 218)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.8
;; CHECK-NEXT: (i32.const 248)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 249)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.9
;; CHECK-NEXT: (i32.const 279)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 280)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.10
;; CHECK-NEXT: (i32.const 310)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 311)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.11
;; CHECK-NEXT: (i32.const 341)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 342)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.12
;; CHECK-NEXT: (i32.const 372)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 373)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.13
;; CHECK-NEXT: (i32.const 403)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 404)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.14
;; CHECK-NEXT: (i32.const 434)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 435)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.15
;; CHECK-NEXT: (i32.const 465)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 466)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.16
;; CHECK-NEXT: (i32.const 496)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 497)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.17
;; CHECK-NEXT: (i32.const 527)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 528)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.18
;; CHECK-NEXT: (i32.const 558)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 559)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.19
;; CHECK-NEXT: (i32.const 589)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 590)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.20
;; CHECK-NEXT: (i32.const 620)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 621)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.21
;; CHECK-NEXT: (i32.const 651)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 652)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.22
;; CHECK-NEXT: (i32.const 682)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 683)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.23
;; CHECK-NEXT: (i32.const 713)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 714)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.24
;; CHECK-NEXT: (i32.const 744)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 745)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.25
;; CHECK-NEXT: (i32.const 775)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 776)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.26
;; CHECK-NEXT: (i32.const 806)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 807)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.27
;; CHECK-NEXT: (i32.const 837)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 838)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.28
;; CHECK-NEXT: (i32.const 868)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 869)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.29
;; CHECK-NEXT: (i32.const 899)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 900)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.30
;; CHECK-NEXT: (i32.const 930)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 931)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.31
;; CHECK-NEXT: (i32.const 961)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 962)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.32
;; CHECK-NEXT: (i32.const 992)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 993)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.33
;; CHECK-NEXT: (i32.const 1023)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 1024)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.34
;; CHECK-NEXT: (i32.const 1054)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 1055)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.35
;; CHECK-NEXT: (i32.const 1085)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 1086)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.36
;; CHECK-NEXT: (i32.const 1116)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 1117)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.37
;; CHECK-NEXT: (i32.const 1147)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 1148)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.38
;; CHECK-NEXT: (i32.const 1178)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 1179)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.39
;; CHECK-NEXT: (i32.const 1209)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 1210)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.40
;; CHECK-NEXT: (i32.const 1240)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 1241)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.41
;; CHECK-NEXT: (i32.const 1271)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 1272)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.42
;; CHECK-NEXT: (i32.const 1302)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 1303)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.43
;; CHECK-NEXT: (i32.const 1333)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 1334)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 11)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (block
;; CHECK-NEXT: (data.drop $0)
;; CHECK-NEXT: (data.drop $0.1)
;; CHECK-NEXT: (data.drop $0.2)
;; CHECK-NEXT: (data.drop $0.3)
;; CHECK-NEXT: (data.drop $0.4)
;; CHECK-NEXT: (data.drop $0.5)
;; CHECK-NEXT: (data.drop $0.6)
;; CHECK-NEXT: (data.drop $0.7)
;; CHECK-NEXT: (data.drop $0.8)
;; CHECK-NEXT: (data.drop $0.9)
;; CHECK-NEXT: (data.drop $0.10)
;; CHECK-NEXT: (data.drop $0.11)
;; CHECK-NEXT: (data.drop $0.12)
;; CHECK-NEXT: (data.drop $0.13)
;; CHECK-NEXT: (data.drop $0.14)
;; CHECK-NEXT: (data.drop $0.15)
;; CHECK-NEXT: (data.drop $0.16)
;; CHECK-NEXT: (data.drop $0.17)
;; CHECK-NEXT: (data.drop $0.18)
;; CHECK-NEXT: (data.drop $0.19)
;; CHECK-NEXT: (data.drop $0.20)
;; CHECK-NEXT: (data.drop $0.21)
;; CHECK-NEXT: (data.drop $0.22)
;; CHECK-NEXT: (data.drop $0.23)
;; CHECK-NEXT: (data.drop $0.24)
;; CHECK-NEXT: (data.drop $0.25)
;; CHECK-NEXT: (data.drop $0.26)
;; CHECK-NEXT: (data.drop $0.27)
;; CHECK-NEXT: (data.drop $0.28)
;; CHECK-NEXT: (data.drop $0.29)
;; CHECK-NEXT: (data.drop $0.30)
;; CHECK-NEXT: (data.drop $0.31)
;; CHECK-NEXT: (data.drop $0.32)
;; CHECK-NEXT: (data.drop $0.33)
;; CHECK-NEXT: (data.drop $0.34)
;; CHECK-NEXT: (data.drop $0.35)
;; CHECK-NEXT: (data.drop $0.36)
;; CHECK-NEXT: (data.drop $0.37)
;; CHECK-NEXT: (data.drop $0.38)
;; CHECK-NEXT: (data.drop $0.39)
;; CHECK-NEXT: (data.drop $0.40)
;; CHECK-NEXT: (data.drop $0.41)
;; CHECK-NEXT: (data.drop $0.42)
;; CHECK-NEXT: (data.drop $0.43)
;; CHECK-NEXT: (data.drop $0.44)
;; CHECK-NEXT: (data.drop $0.45)
;; CHECK-NEXT: (data.drop $0.46)
;; CHECK-NEXT: (data.drop $0.47)
;; CHECK-NEXT: (data.drop $0.48)
;; CHECK-NEXT: (data.drop $0.49)
;; CHECK-NEXT: (data.drop $0.50)
;; CHECK-NEXT: (data.drop $0.51)
;; CHECK-NEXT: (data.drop $0.52)
;; CHECK-NEXT: (data.drop $0.53)
;; CHECK-NEXT: (data.drop $0.54)
;; CHECK-NEXT: (data.drop $0.55)
;; CHECK-NEXT: (data.drop $0.56)
;; CHECK-NEXT: (data.drop $0.57)
;; CHECK-NEXT: (data.drop $0.58)
;; CHECK-NEXT: (data.drop $0.59)
;; CHECK-NEXT: (data.drop $0.60)
;; CHECK-NEXT: (data.drop $0.61)
;; CHECK-NEXT: (data.drop $0.62)
;; CHECK-NEXT: (data.drop $0.63)
;; CHECK-NEXT: (data.drop $0.64)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $init-lots
(memory.init 0
(i32.const 0)
(i32.const 0)
(i32.const 1345)
)
(data.drop 0)
)
)
(module
;; CHECK: (memory $0 1 1)
(memory $0 1 1)
(data (i32.const 1024) "x")
(data (i32.const 1024) "\00") ;; this tramples the "x", and so must be kept.
)
;; CHECK: (data $0 (i32.const 1024) "x")
;; CHECK: (data $1 (i32.const 1024) "\00")
(module
;; CHECK: (memory $0 1 1)
(memory $0 1 1)
(data (i32.const 1024) "x")
(data (i32.const 1025) "\00")
)
;; CHECK: (data $0 (i32.const 1024) "x")
(module
;; CHECK: (memory $0 1 1)
(memory $0 1 1)
(data (i32.const 1024) "x")
(data (i32.const 1023) "\00")
)
;; CHECK: (data $0 (i32.const 1024) "x")
(module
;; CHECK: (memory $0 1 1)
(memory $0 1 1)
(data (i32.const 1024) "x")
(data (i32.const 1024) "\00") ;; when we see one bad thing, we give up
(data (i32.const 4096) "\00")
)
;; CHECK: (data $0 (i32.const 1024) "x")
;; CHECK: (data $1 (i32.const 1024) "\00")
;; CHECK: (data $2 (i32.const 4096) "\00")
(module
;; CHECK: (import "env" "memoryBase" (global $memoryBase i32))
(import "env" "memoryBase" (global $memoryBase i32))
;; CHECK: (memory $0 1 1)
(memory $0 1 1)
(data (i32.const 1024) "x")
(data (global.get $memoryBase) "\00") ;; this could trample, or not
)
;; CHECK: (data $0 (i32.const 1024) "x")
;; CHECK: (data $1 (global.get $memoryBase) "\00")
(module
;; CHECK: (import "env" "memoryBase" (global $memoryBase i32))
(import "env" "memoryBase" (global $memoryBase i32))
;; CHECK: (memory $0 1 1)
(memory $0 1 1)
(data (i32.const 1024) "\00") ;; this could trample, or not
(data (global.get $memoryBase) "x")
)
;; CHECK: (data $0 (i32.const 1024) "\00")
;; CHECK: (data $1 (global.get $memoryBase) "x")
(module
;; CHECK: (type $0 (func))
;; CHECK: (global $__mem_segment_drop_state (mut i32) (i32.const 0))
;; CHECK: (memory $0 1 1)
(memory $0 1 1)
(data "skipped\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00included")
;; CHECK: (data $0 "skipped")
;; CHECK: (data $0.1 "included")
;; CHECK: (export "func_54" (func $0))
(export "func_54" (func $0))
;; CHECK: (func $0 (type $0)
;; CHECK-NEXT: (if
;; CHECK-NEXT: (global.get $__mem_segment_drop_state)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.1
;; CHECK-NEXT: (i32.const 30)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 8)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $0
(memory.init 0
(i32.const 0)
(i32.const 7)
(i32.const 38)
)
)
)
(module
;; we can't optimize on an imported memory without zeroFilledMemory being set.
;; CHECK: (import "env" "memory" (memory $0 1 1))
(import "env" "memory" (memory $0 1 1))
(data (i32.const 1024) "x")
(data (i32.const 2048) "\00")
)
;; CHECK: (data $0 (i32.const 1024) "x")
;; CHECK: (data $1 (i32.const 2048) "\00")
(module
;; we can when not imported
;; CHECK: (memory $0 1 1)
(memory $0 1 1)
(data (i32.const 1024) "x")
(data (i32.const 2048) "\00")
)
;; CHECK: (data $0 (i32.const 1024) "x")
(module
;; Regression test for a bug where referrers were accidentally associated with
;; the wrong segments in the presence of unreferenced segments.
;; CHECK: (type $0 (func))
;; CHECK: (memory $0 1 1 shared)
(memory $0 1 1 shared)
(data (i32.const 0) "")
(data "foo")
;; CHECK: (data $0 (i32.const 0) "")
;; CHECK: (data $1 "foo")
;; CHECK: (func $0 (type $0)
;; CHECK-NEXT: (memory.init $1
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: (i32.const 1)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $0
(memory.init 1
(i32.const 0)
(i32.const 1)
(i32.const 1)
)
)
)
(module
;; memory64 works!
;; CHECK: (type $0 (func))
;; CHECK: (global $__mem_segment_drop_state (mut i32) (i32.const 0))
;; CHECK: (memory $0 i64 1 1)
(memory $0 i64 1 1)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00wasm64\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00is cool")
;; CHECK: (data $0 "wasm64")
;; CHECK: (data $0.1 "is cool")
;; CHECK: (func $0 (type $0)
;; CHECK-NEXT: (if
;; CHECK-NEXT: (global.get $__mem_segment_drop_state)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i64.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i64.const 57)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0
;; CHECK-NEXT: (i64.const 57)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 6)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (i64.const 63)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i64.const 57)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0.1
;; CHECK-NEXT: (i64.const 120)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 7)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $0
(memory.init 0
(i64.const 0)
(i32.const 0)
(i32.const 127)
)
)
)
(module
;; CHECK: (type $0 (func))
;; CHECK: (global $__mem_segment_drop_state (mut i32) (i32.const 0))
;; CHECK: (memory $0 1 1)
(memory $0 i32 1 1)
(data "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00test")
;; CHECK: (data $0 "test")
;; CHECK: (func $0 (type $0)
;; CHECK-NEXT: (local $0 i32)
;; CHECK-NEXT: (local.tee $0
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: (if
;; CHECK-NEXT: (global.get $__mem_segment_drop_state)
;; CHECK-NEXT: (then
;; CHECK-NEXT: (unreachable)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.fill
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 57)
;; CHECK-NEXT: )
;; CHECK-NEXT: (memory.init $0
;; CHECK-NEXT: (i32.add
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: (i32.const 57)
;; CHECK-NEXT: )
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 4)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $0
;; test that unreachable destinations are ok
(memory.init 0
(unreachable)
(i32.const 0)
(i32.const 61)
)
)
)
(module
;; CHECK: (type $array (array (mut i32)))
(type $array (array (mut i32)))
;; CHECK: (type $1 (func (param (ref $array) i32 i32 i32)))
;; CHECK: (memory $0 16 17 shared)
(memory $0 16 17 shared)
;; CHECK: (data $0 "")
(data $0 "")
;; CHECK: (func $0 (type $1) (param $0 (ref $array)) (param $1 i32) (param $2 i32) (param $3 i32)
;; CHECK-NEXT: (array.init_data $array $0
;; CHECK-NEXT: (local.get $0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
(func $0 (param $0 (ref $array)) (param $1 i32) (param $2 i32) (param $3 i32)
;; test that we do not improperly optimize out segments referred to by
;; array.init_data instructions.
(array.init_data $array $0
(local.get $0)
(i32.const 0)
(i32.const 0)
(i32.const 0)
)
)
)