summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/lit/passes/memory-packing_all-features.wast2273
-rw-r--r--test/lit/passes/memory-packing_zero-filled-memory.wast13
-rw-r--r--test/passes/memory-packing_all-features.txt1578
-rw-r--r--test/passes/memory-packing_all-features.wast558
-rw-r--r--test/passes/memory-packing_all-features_zero-filled-memory.txt4
-rw-r--r--test/passes/memory-packing_all-features_zero-filled-memory.wast6
6 files changed, 2286 insertions, 2146 deletions
diff --git a/test/lit/passes/memory-packing_all-features.wast b/test/lit/passes/memory-packing_all-features.wast
new file mode 100644
index 000000000..5fbf92023
--- /dev/null
+++ b/test/lit/passes/memory-packing_all-features.wast
@@ -0,0 +1,2273 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+;; NOTE: This test was ported using port_test.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))
+
+ ;; CHECK: (memory $0 2048 2048)
+ (memory $0 2048 2048)
+ (import "env" "memoryBase" (global $memoryBase i32))
+ ;; nothing
+)
+
+(module
+ ;; CHECK: (import "env" "memoryBase" (global $memoryBase i32))
+
+ ;; CHECK: (memory $0 2048 2048)
+ (memory $0 2048 2048)
+ (import "env" "memoryBase" (global $memoryBase i32))
+ (data (i32.const 4066) "") ;; empty
+)
+
+(module
+ ;; CHECK: (import "env" "memoryBase" (global $memoryBase i32))
+
+ ;; CHECK: (memory $0 2048 2048)
+ (memory $0 2048 2048)
+ (import "env" "memoryBase" (global $memoryBase i32))
+
+ (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 (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 $none_=>_none (func))
+
+ ;; CHECK: (memory $0 1 1)
+
+ ;; CHECK: (data (i32.const 1024) "waka this CAN be optimized")
+
+ ;; CHECK: (data (i32.const 1107) "we DO know where it will go")
+
+ ;; CHECK: (data (i32.const 2057) "zeros before")
+
+ ;; CHECK: (data (i32.const 3000) "zeros after")
+
+ ;; CHECK: (data (i32.const 4000) "zeros\00in\00the\00middle")
+
+ ;; CHECK: (data (i32.const 4035) "nice skip here")
+
+ ;; CHECK: (data (i32.const 4066) "another\00but no")
+
+ ;; CHECK: (func $nonzero-size-init-of-active-will-trap
+ ;; 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
+ ;; 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
+ ;; 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: (unreachable)
+ ;; 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 $none_=>_none (func))
+
+ ;; CHECK: (global $__mem_segment_drop_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__mem_segment_drop_state_0 (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__mem_segment_drop_state_1 (mut i32) (i32.const 0))
+
+ ;; CHECK: (memory $0 2048 2048)
+ (memory $0 2048 2048)
+
+ (data "not referenced, delete me") ;; 0
+
+ ;; CHECK: (data "zeroes at start")
+
+ ;; CHECK: (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")
+ (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 "\00\00\00few zeroes at start")
+
+ ;; CHECK: (data "zeroes at end")
+
+ ;; CHECK: (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")
+
+ ;; CHECK: (data "few zeroes at end\00\00\00")
+
+ ;; CHECK: (data "zeroes")
+
+ ;; CHECK: (data "in middle")
+
+ ;; CHECK: (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")
+
+ ;; CHECK: (data "few zeroes\00\00\00in middle")
+
+ ;; CHECK: (data "multiple")
+
+ ;; CHECK: (data "spans")
+
+ ;; CHECK: (data "of zeroes")
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "more")
+
+ ;; CHECK: (data "zeroes")
+
+ ;; CHECK: (data "no zeroes")
+
+ ;; CHECK: (func $zeroes-at-start
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (global.get $__mem_segment_drop_state)
+ ;; CHECK-NEXT: (unreachable)
+ ;; 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
+ ;; 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 0)
+ ;; 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
+ ;; CHECK-NEXT: (memory.init 1
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 45)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (memory.init 1
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 45)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (memory.init 1
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 45)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (memory.init 1
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 45)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (data.drop 1)
+ ;; 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
+ ;; CHECK-NEXT: (memory.init 2
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 22)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (data.drop 2)
+ ;; 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
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (memory.init 3
+ ;; 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 3)
+ ;; 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
+ ;; CHECK-NEXT: (memory.init 4
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 43)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (memory.init 4
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 43)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (memory.init 4
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 43)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (memory.init 4
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 43)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (data.drop 4)
+ ;; 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
+ ;; CHECK-NEXT: (memory.init 5
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 20)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (data.drop 5)
+ ;; 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
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (memory.init 6
+ ;; 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
+ ;; 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 6)
+ ;; CHECK-NEXT: (data.drop 7)
+ ;; 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
+ ;; 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
+ ;; 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
+ ;; 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 11
+ ;; 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 12
+ ;; 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 11)
+ ;; CHECK-NEXT: (data.drop 12)
+ ;; 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
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_0)
+ ;; CHECK-NEXT: (unreachable)
+ ;; 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 13
+ ;; 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 14
+ ;; 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 15
+ ;; 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_0
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (data.drop 13)
+ ;; CHECK-NEXT: (data.drop 14)
+ ;; CHECK-NEXT: (data.drop 15)
+ ;; 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
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_1)
+ ;; CHECK-NEXT: (unreachable)
+ ;; 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_1
+ ;; 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
+ ;; CHECK-NEXT: (memory.init 16
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 9)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (data.drop 16)
+ ;; 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
+ ;; 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: (unreachable)
+ ;; 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
+ ;; 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
+ ;; 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 $none_=>_none (func))
+
+ ;; CHECK: (import "env" "param" (global $param i32))
+
+ ;; CHECK: (global $__mem_segment_drop_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__mem_segment_drop_state_0 (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: (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: (memory $0 2048 2048)
+ (memory $0 2048 2048)
+ (import "env" "param" (global $param i32))
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "more")
+
+ ;; CHECK: (data "zeroes")
+
+ ;; CHECK: (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")
+ (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 "\00\00\00\00\00\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 "even")
+
+ ;; CHECK: (data "more")
+
+ ;; CHECK: (data "zeroes")
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "more")
+
+ ;; CHECK: (data "zeroes")
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "more")
+
+ ;; CHECK: (data "zeroes")
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "more")
+
+ ;; CHECK: (data "zeroes")
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "more")
+
+ ;; CHECK: (data "zeroes")
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "more")
+
+ ;; CHECK: (data "zeroes")
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "more")
+
+ ;; CHECK: (data "zeroes")
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "more")
+
+ ;; CHECK: (data "zeroes")
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "more")
+
+ ;; CHECK: (data "zeroes")
+
+ ;; CHECK: (func $nonconst-dest
+ ;; 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: (unreachable)
+ ;; 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 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 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 1)
+ ;; CHECK-NEXT: (data.drop 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
+ ;; CHECK-NEXT: (memory.init 3
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $param)
+ ;; CHECK-NEXT: (i32.const 134)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (data.drop 3)
+ ;; 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
+ ;; CHECK-NEXT: (memory.init 4
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (global.get $param)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (data.drop 4)
+ ;; 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
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_0)
+ ;; CHECK-NEXT: (unreachable)
+ ;; 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 5
+ ;; 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 6
+ ;; 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 7
+ ;; 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_0
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (data.drop 5)
+ ;; CHECK-NEXT: (data.drop 6)
+ ;; CHECK-NEXT: (data.drop 7)
+ ;; 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
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (memory.init 8
+ ;; 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 9
+ ;; 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 10
+ ;; 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 8)
+ ;; CHECK-NEXT: (data.drop 9)
+ ;; CHECK-NEXT: (data.drop 10)
+ ;; 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
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_1)
+ ;; CHECK-NEXT: (unreachable)
+ ;; 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 12
+ ;; 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 13
+ ;; 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_1
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (data.drop 11)
+ ;; CHECK-NEXT: (data.drop 12)
+ ;; CHECK-NEXT: (data.drop 13)
+ ;; 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
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_2)
+ ;; CHECK-NEXT: (unreachable)
+ ;; 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 14
+ ;; 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 15
+ ;; 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 16
+ ;; 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_2
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (data.drop 14)
+ ;; CHECK-NEXT: (data.drop 15)
+ ;; CHECK-NEXT: (data.drop 16)
+ ;; 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
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (global.get $__mem_segment_drop_state_3)
+ ;; CHECK-NEXT: (unreachable)
+ ;; 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_3
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (data.drop 17)
+ ;; CHECK-NEXT: (data.drop 18)
+ ;; CHECK-NEXT: (data.drop 19)
+ ;; 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
+ ;; CHECK-NEXT: (memory.init 20
+ ;; CHECK-NEXT: (i32.const 0)
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: (i32.const 2)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (data.drop 20)
+ ;; CHECK-NEXT: (data.drop 21)
+ ;; CHECK-NEXT: (data.drop 22)
+ ;; 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
+ ;; 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_4)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; 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 23)
+ ;; CHECK-NEXT: (data.drop 24)
+ ;; CHECK-NEXT: (data.drop 25)
+ ;; 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
+ ;; 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_5)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; 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
+ ;; 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
+ ;; 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
+ ;; 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
+ ;; 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_6)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; 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 29)
+ ;; CHECK-NEXT: (data.drop 30)
+ ;; CHECK-NEXT: (data.drop 31)
+ ;; 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 $none_=>_none (func))
+
+ ;; CHECK: (global $__mem_segment_drop_state (mut i32) (i32.const 0))
+
+ ;; CHECK: (global $__mem_segment_drop_state_0 (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 "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 "hi")
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "hi")
+
+ ;; CHECK: (data "hi")
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "hi")
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "hi")
+
+ ;; CHECK: (data "even")
+
+ ;; CHECK: (data "hi")
+
+ ;; CHECK: (func $zero-length-init-zeroes
+ ;; 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: (unreachable)
+ ;; 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 1)
+ ;; CHECK-NEXT: (data.drop 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
+ ;; 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_0)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (unreachable)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (block
+ ;; CHECK-NEXT: (global.set $__mem_segment_drop_state_0
+ ;; CHECK-NEXT: (i32.const 1)
+ ;; CHECK-NEXT: )
+ ;; CHECK-NEXT: (data.drop 3)
+ ;; CHECK-NEXT: (data.drop 4)
+ ;; CHECK-NEXT: (data.drop 5)
+ ;; 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
+ ;; 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: (unreachable)
+ ;; 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 6)
+ ;; CHECK-NEXT: (data.drop 7)
+ ;; 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
+ ;; 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: (unreachable)
+ ;; 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 8)
+ ;; CHECK-NEXT: (data.drop 9)
+ ;; 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 $none_=>_none (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 "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (data "a")
+
+ ;; CHECK: (func $init-lots
+ ;; 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 1)
+ ;; CHECK-NEXT: (data.drop 2)
+ ;; CHECK-NEXT: (data.drop 3)
+ ;; CHECK-NEXT: (data.drop 4)
+ ;; CHECK-NEXT: (data.drop 5)
+ ;; CHECK-NEXT: (data.drop 6)
+ ;; CHECK-NEXT: (data.drop 7)
+ ;; CHECK-NEXT: (data.drop 8)
+ ;; CHECK-NEXT: (data.drop 9)
+ ;; CHECK-NEXT: (data.drop 10)
+ ;; CHECK-NEXT: (data.drop 11)
+ ;; CHECK-NEXT: (data.drop 12)
+ ;; CHECK-NEXT: (data.drop 13)
+ ;; CHECK-NEXT: (data.drop 14)
+ ;; CHECK-NEXT: (data.drop 15)
+ ;; CHECK-NEXT: (data.drop 16)
+ ;; CHECK-NEXT: (data.drop 17)
+ ;; CHECK-NEXT: (data.drop 18)
+ ;; CHECK-NEXT: (data.drop 19)
+ ;; CHECK-NEXT: (data.drop 20)
+ ;; CHECK-NEXT: (data.drop 21)
+ ;; CHECK-NEXT: (data.drop 22)
+ ;; CHECK-NEXT: (data.drop 23)
+ ;; CHECK-NEXT: (data.drop 24)
+ ;; CHECK-NEXT: (data.drop 25)
+ ;; CHECK-NEXT: (data.drop 26)
+ ;; CHECK-NEXT: (data.drop 27)
+ ;; CHECK-NEXT: (data.drop 28)
+ ;; CHECK-NEXT: (data.drop 29)
+ ;; CHECK-NEXT: (data.drop 30)
+ ;; CHECK-NEXT: (data.drop 31)
+ ;; CHECK-NEXT: (data.drop 32)
+ ;; CHECK-NEXT: (data.drop 33)
+ ;; CHECK-NEXT: (data.drop 34)
+ ;; CHECK-NEXT: (data.drop 35)
+ ;; CHECK-NEXT: (data.drop 36)
+ ;; CHECK-NEXT: (data.drop 37)
+ ;; CHECK-NEXT: (data.drop 38)
+ ;; CHECK-NEXT: (data.drop 39)
+ ;; CHECK-NEXT: (data.drop 40)
+ ;; CHECK-NEXT: (data.drop 41)
+ ;; CHECK-NEXT: (data.drop 42)
+ ;; CHECK-NEXT: (data.drop 43)
+ ;; CHECK-NEXT: (data.drop 44)
+ ;; CHECK-NEXT: (data.drop 45)
+ ;; CHECK-NEXT: (data.drop 46)
+ ;; CHECK-NEXT: (data.drop 47)
+ ;; CHECK-NEXT: (data.drop 48)
+ ;; CHECK-NEXT: (data.drop 49)
+ ;; CHECK-NEXT: (data.drop 50)
+ ;; CHECK-NEXT: (data.drop 51)
+ ;; CHECK-NEXT: (data.drop 52)
+ ;; CHECK-NEXT: (data.drop 53)
+ ;; CHECK-NEXT: (data.drop 54)
+ ;; CHECK-NEXT: (data.drop 55)
+ ;; CHECK-NEXT: (data.drop 56)
+ ;; CHECK-NEXT: (data.drop 57)
+ ;; CHECK-NEXT: (data.drop 58)
+ ;; CHECK-NEXT: (data.drop 59)
+ ;; CHECK-NEXT: (data.drop 60)
+ ;; CHECK-NEXT: (data.drop 61)
+ ;; CHECK-NEXT: (data.drop 62)
+ ;; CHECK-NEXT: (data.drop 63)
+ ;; CHECK-NEXT: (data.drop 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 (i32.const 1024) "x")
+
+;; CHECK: (data (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 (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 (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 (i32.const 1024) "x")
+
+;; CHECK: (data (i32.const 1024) "\00")
+
+;; CHECK: (data (i32.const 4096) "\00")
+(module
+ ;; CHECK: (import "env" "memoryBase" (global $memoryBase i32))
+
+ ;; CHECK: (memory $0 1 1)
+ (memory $0 1 1)
+ (import "env" "memoryBase" (global $memoryBase i32))
+ (data (i32.const 1024) "x")
+ (data (global.get $memoryBase) "\00") ;; this could trample, or not
+)
+;; CHECK: (data (i32.const 1024) "x")
+
+;; CHECK: (data (global.get $memoryBase) "\00")
+(module
+ ;; CHECK: (import "env" "memoryBase" (global $memoryBase i32))
+
+ ;; CHECK: (memory $0 1 1)
+ (memory $0 1 1)
+ (import "env" "memoryBase" (global $memoryBase i32))
+ (data (i32.const 1024) "\00") ;; this could trample, or not
+ (data (global.get $memoryBase) "x")
+)
+;; CHECK: (data (i32.const 1024) "\00")
+
+;; CHECK: (data (global.get $memoryBase) "x")
+(module
+ ;; CHECK: (type $none_=>_none (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 "skipped")
+
+ ;; CHECK: (data "included")
+
+ ;; CHECK: (export "func_54" (func $0))
+ (export "func_54" (func $0))
+ ;; CHECK: (func $0
+ ;; CHECK-NEXT: (if
+ ;; CHECK-NEXT: (global.get $__mem_segment_drop_state)
+ ;; CHECK-NEXT: (unreachable)
+ ;; 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 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 (i32.const 1024) "x")
+
+;; CHECK: (data (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 (i32.const 1024) "x")
diff --git a/test/lit/passes/memory-packing_zero-filled-memory.wast b/test/lit/passes/memory-packing_zero-filled-memory.wast
new file mode 100644
index 000000000..e9d2658c3
--- /dev/null
+++ b/test/lit/passes/memory-packing_zero-filled-memory.wast
@@ -0,0 +1,13 @@
+;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited.
+
+;; RUN: wasm-opt %s --memory-packing -all --zero-filled-memory -S -o - | filecheck %s
+
+(module
+ ;; we can optimize on an imported memory with 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 1023) "\00")
+)
+;; CHECK: (data (i32.const 1024) "x")
diff --git a/test/passes/memory-packing_all-features.txt b/test/passes/memory-packing_all-features.txt
deleted file mode 100644
index a2d39083b..000000000
--- a/test/passes/memory-packing_all-features.txt
+++ /dev/null
@@ -1,1578 +0,0 @@
-(module
- (import "env" "memoryBase" (global $memoryBase i32))
- (memory $0 2048 2048)
-)
-(module
- (import "env" "memoryBase" (global $memoryBase i32))
- (memory $0 2048 2048)
-)
-(module
- (import "env" "memoryBase" (global $memoryBase i32))
- (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")
-)
-(module
- (type $none_=>_none (func))
- (memory $0 1 1)
- (data (i32.const 1024) "waka this CAN be optimized")
- (data (i32.const 1107) "we DO know where it will go")
- (data (i32.const 2057) "zeros before")
- (data (i32.const 3000) "zeros after")
- (data (i32.const 4000) "zeros\00in\00the\00middle")
- (data (i32.const 4035) "nice skip here")
- (data (i32.const 4066) "another\00but no")
- (func $nonzero-size-init-of-active-will-trap
- (block
- (drop
- (i32.const 42)
- )
- (drop
- (i32.const 0)
- )
- (drop
- (i32.const 13)
- )
- (unreachable)
- )
- (nop)
- )
- (func $nonzero-offset-init-of-active-will-trap
- (block
- (drop
- (i32.const 42)
- )
- (drop
- (i32.const 13)
- )
- (drop
- (i32.const 0)
- )
- (unreachable)
- )
- (nop)
- )
- (func $zero-offset-size-init-of-active-may-trap
- (if
- (i32.gt_u
- (i32.const 42)
- (i32.shl
- (memory.size)
- (i32.const 16)
- )
- )
- (unreachable)
- )
- (nop)
- )
-)
-(module
- (type $none_=>_none (func))
- (global $__mem_segment_drop_state (mut i32) (i32.const 0))
- (global $__mem_segment_drop_state_0 (mut i32) (i32.const 0))
- (global $__mem_segment_drop_state_1 (mut i32) (i32.const 0))
- (memory $0 2048 2048)
- (data "zeroes at start")
- (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")
- (data "\00\00\00few zeroes at start")
- (data "zeroes at end")
- (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")
- (data "few zeroes at end\00\00\00")
- (data "zeroes")
- (data "in middle")
- (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")
- (data "few zeroes\00\00\00in middle")
- (data "multiple")
- (data "spans")
- (data "of zeroes")
- (data "even")
- (data "more")
- (data "zeroes")
- (data "no zeroes")
- (func $zeroes-at-start
- (block
- (if
- (global.get $__mem_segment_drop_state)
- (unreachable)
- )
- (memory.fill
- (i32.const 0)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 0
- (i32.const 30)
- (i32.const 0)
- (i32.const 15)
- )
- )
- (block
- (global.set $__mem_segment_drop_state
- (i32.const 1)
- )
- (data.drop 0)
- )
- )
- (func $zeroes-at-start-not-split
- (memory.init 1
- (i32.const 0)
- (i32.const 0)
- (i32.const 45)
- )
- (memory.init 1
- (i32.const 0)
- (i32.const 0)
- (i32.const 45)
- )
- (memory.init 1
- (i32.const 0)
- (i32.const 0)
- (i32.const 45)
- )
- (memory.init 1
- (i32.const 0)
- (i32.const 0)
- (i32.const 45)
- )
- (data.drop 1)
- )
- (func $few-zeroes-at-start
- (memory.init 2
- (i32.const 0)
- (i32.const 0)
- (i32.const 22)
- )
- (data.drop 2)
- )
- (func $zeroes-at-end
- (block
- (memory.init 3
- (i32.const 0)
- (i32.const 0)
- (i32.const 13)
- )
- (memory.fill
- (i32.const 13)
- (i32.const 0)
- (i32.const 30)
- )
- )
- (data.drop 3)
- )
- (func $zeroes-at-end-not-split
- (memory.init 4
- (i32.const 0)
- (i32.const 0)
- (i32.const 43)
- )
- (memory.init 4
- (i32.const 0)
- (i32.const 0)
- (i32.const 43)
- )
- (memory.init 4
- (i32.const 0)
- (i32.const 0)
- (i32.const 43)
- )
- (memory.init 4
- (i32.const 0)
- (i32.const 0)
- (i32.const 43)
- )
- (data.drop 4)
- )
- (func $few-zeroes-at-end
- (memory.init 5
- (i32.const 0)
- (i32.const 0)
- (i32.const 20)
- )
- (data.drop 5)
- )
- (func $zeroes-in-middle
- (block
- (memory.init 6
- (i32.const 0)
- (i32.const 0)
- (i32.const 6)
- )
- (memory.fill
- (i32.const 6)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 7
- (i32.const 36)
- (i32.const 0)
- (i32.const 9)
- )
- )
- (block
- (data.drop 6)
- (data.drop 7)
- )
- )
- (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)
- )
- (func $few-zeroes-in-middle
- (memory.init 9
- (i32.const 0)
- (i32.const 0)
- (i32.const 22)
- )
- (data.drop 9)
- )
- (func $multiple-spans-of-zeroes
- (block
- (memory.init 10
- (i32.const 0)
- (i32.const 0)
- (i32.const 8)
- )
- (memory.fill
- (i32.const 8)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 11
- (i32.const 38)
- (i32.const 0)
- (i32.const 5)
- )
- (memory.fill
- (i32.const 43)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 12
- (i32.const 73)
- (i32.const 0)
- (i32.const 9)
- )
- )
- (block
- (data.drop 10)
- (data.drop 11)
- (data.drop 12)
- )
- )
- (func $even-more-zeroes
- (block
- (if
- (global.get $__mem_segment_drop_state_0)
- (unreachable)
- )
- (memory.fill
- (i32.const 0)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 13
- (i32.const 30)
- (i32.const 0)
- (i32.const 4)
- )
- (memory.fill
- (i32.const 34)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 14
- (i32.const 64)
- (i32.const 0)
- (i32.const 4)
- )
- (memory.fill
- (i32.const 68)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 15
- (i32.const 98)
- (i32.const 0)
- (i32.const 6)
- )
- (memory.fill
- (i32.const 104)
- (i32.const 0)
- (i32.const 30)
- )
- )
- (block
- (global.set $__mem_segment_drop_state_0
- (i32.const 1)
- )
- (data.drop 13)
- (data.drop 14)
- (data.drop 15)
- )
- )
- (func $only-zeroes
- (block
- (if
- (global.get $__mem_segment_drop_state_1)
- (unreachable)
- )
- (memory.fill
- (i32.const 0)
- (i32.const 0)
- (i32.const 30)
- )
- )
- (global.set $__mem_segment_drop_state_1
- (i32.const 1)
- )
- )
- (func $no-zeroes
- (memory.init 16
- (i32.const 0)
- (i32.const 0)
- (i32.const 9)
- )
- (data.drop 16)
- )
- (func $empty
- (if
- (i32.gt_u
- (i32.const 13)
- (i32.shl
- (memory.size)
- (i32.const 16)
- )
- )
- (unreachable)
- )
- (nop)
- )
- (func $only-dropped
- (nop)
- (nop)
- )
- (func $only-dropped-zeroes
- (nop)
- (nop)
- )
-)
-(module
- (type $none_=>_none (func))
- (import "env" "param" (global $param i32))
- (global $__mem_segment_drop_state (mut i32) (i32.const 0))
- (global $__mem_segment_drop_state_0 (mut i32) (i32.const 0))
- (global $__mem_segment_drop_state_1 (mut i32) (i32.const 0))
- (global $__mem_segment_drop_state_2 (mut i32) (i32.const 0))
- (global $__mem_segment_drop_state_3 (mut i32) (i32.const 0))
- (global $__mem_segment_drop_state_4 (mut i32) (i32.const 0))
- (global $__mem_segment_drop_state_5 (mut i32) (i32.const 0))
- (global $__mem_segment_drop_state_6 (mut i32) (i32.const 0))
- (memory $0 2048 2048)
- (data "even")
- (data "more")
- (data "zeroes")
- (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")
- (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")
- (data "even")
- (data "more")
- (data "zeroes")
- (data "even")
- (data "more")
- (data "zeroes")
- (data "even")
- (data "more")
- (data "zeroes")
- (data "even")
- (data "more")
- (data "zeroes")
- (data "even")
- (data "more")
- (data "zeroes")
- (data "even")
- (data "more")
- (data "zeroes")
- (data "even")
- (data "more")
- (data "zeroes")
- (data "even")
- (data "more")
- (data "zeroes")
- (data "even")
- (data "more")
- (data "zeroes")
- (func $nonconst-dest
- (local $0 i32)
- (block
- (local.set $0
- (global.get $param)
- )
- (if
- (global.get $__mem_segment_drop_state)
- (unreachable)
- )
- (memory.fill
- (local.get $0)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 0
- (i32.add
- (local.get $0)
- (i32.const 30)
- )
- (i32.const 0)
- (i32.const 4)
- )
- (memory.fill
- (i32.add
- (local.get $0)
- (i32.const 34)
- )
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 1
- (i32.add
- (local.get $0)
- (i32.const 64)
- )
- (i32.const 0)
- (i32.const 4)
- )
- (memory.fill
- (i32.add
- (local.get $0)
- (i32.const 68)
- )
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 2
- (i32.add
- (local.get $0)
- (i32.const 98)
- )
- (i32.const 0)
- (i32.const 6)
- )
- (memory.fill
- (i32.add
- (local.get $0)
- (i32.const 104)
- )
- (i32.const 0)
- (i32.const 30)
- )
- )
- (block
- (global.set $__mem_segment_drop_state
- (i32.const 1)
- )
- (data.drop 0)
- (data.drop 1)
- (data.drop 2)
- )
- )
- (func $nonconst-offset
- (memory.init 3
- (i32.const 0)
- (global.get $param)
- (i32.const 134)
- )
- (data.drop 3)
- )
- (func $nonconst-size
- (memory.init 4
- (i32.const 0)
- (i32.const 0)
- (global.get $param)
- )
- (data.drop 4)
- )
- (func $partial-skip-start
- (block
- (if
- (global.get $__mem_segment_drop_state_0)
- (unreachable)
- )
- (memory.fill
- (i32.const 0)
- (i32.const 0)
- (i32.const 20)
- )
- (memory.init 5
- (i32.const 20)
- (i32.const 0)
- (i32.const 4)
- )
- (memory.fill
- (i32.const 24)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 6
- (i32.const 54)
- (i32.const 0)
- (i32.const 4)
- )
- (memory.fill
- (i32.const 58)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 7
- (i32.const 88)
- (i32.const 0)
- (i32.const 6)
- )
- (memory.fill
- (i32.const 94)
- (i32.const 0)
- (i32.const 30)
- )
- )
- (block
- (global.set $__mem_segment_drop_state_0
- (i32.const 1)
- )
- (data.drop 5)
- (data.drop 6)
- (data.drop 7)
- )
- )
- (func $full-skip-start
- (block
- (memory.init 8
- (i32.const 0)
- (i32.const 2)
- (i32.const 2)
- )
- (memory.fill
- (i32.const 2)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 9
- (i32.const 32)
- (i32.const 0)
- (i32.const 4)
- )
- (memory.fill
- (i32.const 36)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 10
- (i32.const 66)
- (i32.const 0)
- (i32.const 6)
- )
- (memory.fill
- (i32.const 72)
- (i32.const 0)
- (i32.const 30)
- )
- )
- (block
- (data.drop 8)
- (data.drop 9)
- (data.drop 10)
- )
- )
- (func $partial-skip-end
- (block
- (if
- (global.get $__mem_segment_drop_state_1)
- (unreachable)
- )
- (memory.fill
- (i32.const 0)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 11
- (i32.const 30)
- (i32.const 0)
- (i32.const 4)
- )
- (memory.fill
- (i32.const 34)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 12
- (i32.const 64)
- (i32.const 0)
- (i32.const 4)
- )
- (memory.fill
- (i32.const 68)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 13
- (i32.const 98)
- (i32.const 0)
- (i32.const 6)
- )
- (memory.fill
- (i32.const 104)
- (i32.const 0)
- (i32.const 20)
- )
- )
- (block
- (global.set $__mem_segment_drop_state_1
- (i32.const 1)
- )
- (data.drop 11)
- (data.drop 12)
- (data.drop 13)
- )
- )
- (func $full-skip-end
- (block
- (if
- (global.get $__mem_segment_drop_state_2)
- (unreachable)
- )
- (memory.fill
- (i32.const 0)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 14
- (i32.const 30)
- (i32.const 0)
- (i32.const 4)
- )
- (memory.fill
- (i32.const 34)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 15
- (i32.const 64)
- (i32.const 0)
- (i32.const 4)
- )
- (memory.fill
- (i32.const 68)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 16
- (i32.const 98)
- (i32.const 0)
- (i32.const 4)
- )
- )
- (block
- (global.set $__mem_segment_drop_state_2
- (i32.const 1)
- )
- (data.drop 14)
- (data.drop 15)
- (data.drop 16)
- )
- )
- (func $slice-zeroes
- (block
- (if
- (global.get $__mem_segment_drop_state_3)
- (unreachable)
- )
- (memory.fill
- (i32.const 0)
- (i32.const 0)
- (i32.const 10)
- )
- )
- (block
- (global.set $__mem_segment_drop_state_3
- (i32.const 1)
- )
- (data.drop 17)
- (data.drop 18)
- (data.drop 19)
- )
- )
- (func $slice-nonzeroes
- (memory.init 20
- (i32.const 0)
- (i32.const 1)
- (i32.const 2)
- )
- (block
- (data.drop 20)
- (data.drop 21)
- (data.drop 22)
- )
- )
- (func $zero-size
- (if
- (i32.or
- (i32.gt_u
- (i32.const 13)
- (i32.shl
- (memory.size)
- (i32.const 16)
- )
- )
- (global.get $__mem_segment_drop_state_4)
- )
- (unreachable)
- )
- (block
- (global.set $__mem_segment_drop_state_4
- (i32.const 1)
- )
- (data.drop 23)
- (data.drop 24)
- (data.drop 25)
- )
- )
- (func $zero-size-undropped
- (if
- (i32.or
- (i32.gt_u
- (i32.const 13)
- (i32.shl
- (memory.size)
- (i32.const 16)
- )
- )
- (global.get $__mem_segment_drop_state_5)
- )
- (unreachable)
- )
- )
- (func $out-of-bounds-offset
- (block
- (drop
- (i32.const 0)
- )
- (drop
- (i32.const 135)
- )
- (drop
- (i32.const 1)
- )
- (unreachable)
- )
- (nop)
- )
- (func $zero-size-out-of-bounds-offset
- (block
- (drop
- (i32.const 0)
- )
- (drop
- (i32.const 135)
- )
- (drop
- (i32.const 0)
- )
- (unreachable)
- )
- (nop)
- )
- (func $out-of-bounds-size
- (block
- (drop
- (i32.const 0)
- )
- (drop
- (i32.const 0)
- )
- (drop
- (i32.const 135)
- )
- (unreachable)
- )
- (nop)
- )
- (func $zero-size-at-bounds-offset
- (if
- (i32.or
- (i32.gt_u
- (i32.const 0)
- (i32.shl
- (memory.size)
- (i32.const 16)
- )
- )
- (global.get $__mem_segment_drop_state_6)
- )
- (unreachable)
- )
- (block
- (global.set $__mem_segment_drop_state_6
- (i32.const 1)
- )
- (data.drop 29)
- (data.drop 30)
- (data.drop 31)
- )
- )
-)
-(module
- (type $none_=>_none (func))
- (global $__mem_segment_drop_state (mut i32) (i32.const 0))
- (global $__mem_segment_drop_state_0 (mut i32) (i32.const 0))
- (global $__mem_segment_drop_state_1 (mut i32) (i32.const 0))
- (global $__mem_segment_drop_state_2 (mut i32) (i32.const 0))
- (memory $0 2048 2048)
- (data "hi")
- (data "even")
- (data "hi")
- (data "hi")
- (data "even")
- (data "hi")
- (data "even")
- (data "hi")
- (data "even")
- (data "hi")
- (func $zero-length-init-zeroes
- (if
- (i32.or
- (i32.gt_u
- (i32.const 13)
- (i32.shl
- (memory.size)
- (i32.const 16)
- )
- )
- (global.get $__mem_segment_drop_state)
- )
- (unreachable)
- )
- (block
- (global.set $__mem_segment_drop_state
- (i32.const 1)
- )
- (data.drop 0)
- (data.drop 1)
- (data.drop 2)
- )
- )
- (func $zero-length-init-nonzeroes
- (if
- (i32.or
- (i32.gt_u
- (i32.const 13)
- (i32.shl
- (memory.size)
- (i32.const 16)
- )
- )
- (global.get $__mem_segment_drop_state_0)
- )
- (unreachable)
- )
- (block
- (global.set $__mem_segment_drop_state_0
- (i32.const 1)
- )
- (data.drop 3)
- (data.drop 4)
- (data.drop 5)
- )
- )
- (func $zero-length-init-zeroes-2
- (if
- (i32.or
- (i32.gt_u
- (i32.const 13)
- (i32.shl
- (memory.size)
- (i32.const 16)
- )
- )
- (global.get $__mem_segment_drop_state_1)
- )
- (unreachable)
- )
- (block
- (global.set $__mem_segment_drop_state_1
- (i32.const 1)
- )
- (data.drop 6)
- (data.drop 7)
- )
- )
- (func $zero-length-init-nonzeroes-2
- (if
- (i32.or
- (i32.gt_u
- (i32.const 13)
- (i32.shl
- (memory.size)
- (i32.const 16)
- )
- )
- (global.get $__mem_segment_drop_state_2)
- )
- (unreachable)
- )
- (block
- (global.set $__mem_segment_drop_state_2
- (i32.const 1)
- )
- (data.drop 8)
- (data.drop 9)
- )
- )
-)
-(module
- (type $none_=>_none (func))
- (memory $0 2048 2048)
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (data "a")
- (func $init-lots
- (block
- (memory.init 0
- (i32.const 0)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 1)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 1
- (i32.const 31)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 32)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 2
- (i32.const 62)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 63)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 3
- (i32.const 93)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 94)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 4
- (i32.const 124)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 125)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 5
- (i32.const 155)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 156)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 6
- (i32.const 186)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 187)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 7
- (i32.const 217)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 218)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 8
- (i32.const 248)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 249)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 9
- (i32.const 279)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 280)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 10
- (i32.const 310)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 311)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 11
- (i32.const 341)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 342)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 12
- (i32.const 372)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 373)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 13
- (i32.const 403)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 404)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 14
- (i32.const 434)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 435)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 15
- (i32.const 465)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 466)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 16
- (i32.const 496)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 497)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 17
- (i32.const 527)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 528)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 18
- (i32.const 558)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 559)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 19
- (i32.const 589)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 590)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 20
- (i32.const 620)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 621)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 21
- (i32.const 651)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 652)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 22
- (i32.const 682)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 683)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 23
- (i32.const 713)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 714)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 24
- (i32.const 744)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 745)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 25
- (i32.const 775)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 776)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 26
- (i32.const 806)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 807)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 27
- (i32.const 837)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 838)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 28
- (i32.const 868)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 869)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 29
- (i32.const 899)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 900)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 30
- (i32.const 930)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 931)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 31
- (i32.const 961)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 962)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 32
- (i32.const 992)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 993)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 33
- (i32.const 1023)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 1024)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 34
- (i32.const 1054)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 1055)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 35
- (i32.const 1085)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 1086)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 36
- (i32.const 1116)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 1117)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 37
- (i32.const 1147)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 1148)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 38
- (i32.const 1178)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 1179)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 39
- (i32.const 1209)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 1210)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 40
- (i32.const 1240)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 1241)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 41
- (i32.const 1271)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 1272)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 42
- (i32.const 1302)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 1303)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 43
- (i32.const 1333)
- (i32.const 0)
- (i32.const 1)
- )
- (memory.fill
- (i32.const 1334)
- (i32.const 0)
- (i32.const 11)
- )
- )
- (block
- (data.drop 0)
- (data.drop 1)
- (data.drop 2)
- (data.drop 3)
- (data.drop 4)
- (data.drop 5)
- (data.drop 6)
- (data.drop 7)
- (data.drop 8)
- (data.drop 9)
- (data.drop 10)
- (data.drop 11)
- (data.drop 12)
- (data.drop 13)
- (data.drop 14)
- (data.drop 15)
- (data.drop 16)
- (data.drop 17)
- (data.drop 18)
- (data.drop 19)
- (data.drop 20)
- (data.drop 21)
- (data.drop 22)
- (data.drop 23)
- (data.drop 24)
- (data.drop 25)
- (data.drop 26)
- (data.drop 27)
- (data.drop 28)
- (data.drop 29)
- (data.drop 30)
- (data.drop 31)
- (data.drop 32)
- (data.drop 33)
- (data.drop 34)
- (data.drop 35)
- (data.drop 36)
- (data.drop 37)
- (data.drop 38)
- (data.drop 39)
- (data.drop 40)
- (data.drop 41)
- (data.drop 42)
- (data.drop 43)
- (data.drop 44)
- (data.drop 45)
- (data.drop 46)
- (data.drop 47)
- (data.drop 48)
- (data.drop 49)
- (data.drop 50)
- (data.drop 51)
- (data.drop 52)
- (data.drop 53)
- (data.drop 54)
- (data.drop 55)
- (data.drop 56)
- (data.drop 57)
- (data.drop 58)
- (data.drop 59)
- (data.drop 60)
- (data.drop 61)
- (data.drop 62)
- (data.drop 63)
- (data.drop 64)
- )
- )
-)
-(module
- (memory $0 1 1)
- (data (i32.const 1024) "x")
- (data (i32.const 1024) "\00")
-)
-(module
- (memory $0 1 1)
- (data (i32.const 1024) "x")
-)
-(module
- (memory $0 1 1)
- (data (i32.const 1024) "x")
-)
-(module
- (memory $0 1 1)
- (data (i32.const 1024) "x")
- (data (i32.const 1024) "\00")
- (data (i32.const 4096) "\00")
-)
-(module
- (import "env" "memoryBase" (global $memoryBase i32))
- (memory $0 1 1)
- (data (i32.const 1024) "x")
- (data (global.get $memoryBase) "\00")
-)
-(module
- (import "env" "memoryBase" (global $memoryBase i32))
- (memory $0 1 1)
- (data (i32.const 1024) "\00")
- (data (global.get $memoryBase) "x")
-)
-(module
- (type $none_=>_none (func))
- (global $__mem_segment_drop_state (mut i32) (i32.const 0))
- (memory $0 1 1)
- (data "skipped")
- (data "included")
- (export "func_54" (func $0))
- (func $0
- (if
- (global.get $__mem_segment_drop_state)
- (unreachable)
- )
- (memory.fill
- (i32.const 0)
- (i32.const 0)
- (i32.const 30)
- )
- (memory.init 1
- (i32.const 30)
- (i32.const 0)
- (i32.const 8)
- )
- )
-)
-(module
- (import "env" "memory" (memory $0 1 1))
- (data (i32.const 1024) "x")
- (data (i32.const 2048) "\00")
-)
-(module
- (memory $0 1 1)
- (data (i32.const 1024) "x")
-)
diff --git a/test/passes/memory-packing_all-features.wast b/test/passes/memory-packing_all-features.wast
deleted file mode 100644
index 6869a85d6..000000000
--- a/test/passes/memory-packing_all-features.wast
+++ /dev/null
@@ -1,558 +0,0 @@
-(module
- (memory $0 2048 2048)
- (import "env" "memoryBase" (global $memoryBase i32))
- ;; nothing
-)
-
-(module
- (memory $0 2048 2048)
- (import "env" "memoryBase" (global $memoryBase i32))
- (data (i32.const 4066) "") ;; empty
-)
-
-(module
- (memory $0 2048 2048)
- (import "env" "memoryBase" (global $memoryBase i32))
-
- (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")
-)
-
-(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")
-
- (func $nonzero-size-init-of-active-will-trap
- (memory.init 0
- (i32.const 42)
- (i32.const 0)
- (i32.const 13)
- )
- (data.drop 0)
- )
-
- (func $nonzero-offset-init-of-active-will-trap
- (memory.init 0
- (i32.const 42)
- (i32.const 13)
- (i32.const 0)
- )
- (data.drop 0)
- )
-
- (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
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (func $only-zeroes
- (memory.init 12
- (i32.const 0)
- (i32.const 0)
- (i32.const 30)
- )
- (data.drop 12)
- )
-
- (data "no zeroes") ;; 13
-
- (func $no-zeroes
- (memory.init 13
- (i32.const 0)
- (i32.const 0)
- (i32.const 9)
- )
- (data.drop 13)
- )
-
- (data "") ;; 14
-
- (func $empty
- (memory.init 14
- (i32.const 13)
- (i32.const 0)
- (i32.const 0)
- )
- (data.drop 14)
- )
-
- (data "only dropped") ;; 15
-
- (func $only-dropped
- (data.drop 15)
- (data.drop 15)
- )
-
- (data "\00\00\00\00\00") ;; 16
-
- (func $only-dropped-zeroes
- (data.drop 16)
- (data.drop 16)
- )
-
- (data "") ;; not referenced
-
- (data "\00\00\00\00\00") ;; not referenced
-)
-
-(module
- (memory $0 2048 2048)
- (import "env" "param" (global $param i32))
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (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
-
- (func $zero-size-at-bounds-offset
- (memory.init 14
- (i32.const 0)
- (i32.const 134)
- (i32.const 0)
- )
- (data.drop 14)
- )
-)
-
-(module
- (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
-
- (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
-
- (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
-
- (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
-
- (func $zero-length-init-nonzeroes-2
- (memory.init 3
- (i32.const 13)
- (i32.const 31)
- (i32.const 0)
- )
- (data.drop 3)
- )
-)
-
-(module
- (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
-
- (func $init-lots
- (memory.init 0
- (i32.const 0)
- (i32.const 0)
- (i32.const 1345)
- )
- (data.drop 0)
- )
-)
-(module
- (memory $0 1 1)
- (data (i32.const 1024) "x")
- (data (i32.const 1024) "\00") ;; this tramples the "x", and so must be kept.
-)
-(module
- (memory $0 1 1)
- (data (i32.const 1024) "x")
- (data (i32.const 1025) "\00")
-)
-(module
- (memory $0 1 1)
- (data (i32.const 1024) "x")
- (data (i32.const 1023) "\00")
-)
-(module
- (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")
-)
-(module
- (memory $0 1 1)
- (import "env" "memoryBase" (global $memoryBase i32))
- (data (i32.const 1024) "x")
- (data (global.get $memoryBase) "\00") ;; this could trample, or not
-)
-(module
- (memory $0 1 1)
- (import "env" "memoryBase" (global $memoryBase i32))
- (data (i32.const 1024) "\00") ;; this could trample, or not
- (data (global.get $memoryBase) "x")
-)
-(module
- (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")
- (export "func_54" (func $0))
- (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.
- (import "env" "memory" (memory $0 1 1))
- (data (i32.const 1024) "x")
- (data (i32.const 2048) "\00")
-)
-(module
- ;; we can when not imported
- (memory $0 1 1)
- (data (i32.const 1024) "x")
- (data (i32.const 2048) "\00")
-)
diff --git a/test/passes/memory-packing_all-features_zero-filled-memory.txt b/test/passes/memory-packing_all-features_zero-filled-memory.txt
deleted file mode 100644
index 021a48b3d..000000000
--- a/test/passes/memory-packing_all-features_zero-filled-memory.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-(module
- (import "env" "memory" (memory $0 1 1))
- (data (i32.const 1024) "x")
-)
diff --git a/test/passes/memory-packing_all-features_zero-filled-memory.wast b/test/passes/memory-packing_all-features_zero-filled-memory.wast
deleted file mode 100644
index 34291cc7f..000000000
--- a/test/passes/memory-packing_all-features_zero-filled-memory.wast
+++ /dev/null
@@ -1,6 +0,0 @@
-(module
- ;; we can optimize on an imported memory with zeroFilledMemory being set.
- (import "env" "memory" (memory $0 1 1))
- (data (i32.const 1024) "x")
- (data (i32.const 1023) "\00")
-)