diff options
author | Thomas Lively <7121787+tlively@users.noreply.github.com> | 2021-07-14 16:12:08 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-14 16:12:08 -0700 |
commit | 3d4f128564a6ae2a378066112138a69b6414e521 (patch) | |
tree | 438c461c0a600d3e50eb2097179bf4836fdcbd5b | |
parent | 3130409376dff61eb7b1bec01166ff72e927bad6 (diff) | |
download | binaryen-3d4f128564a6ae2a378066112138a69b6414e521.tar.gz binaryen-3d4f128564a6ae2a378066112138a69b6414e521.tar.bz2 binaryen-3d4f128564a6ae2a378066112138a69b6414e521.zip |
Port test/passes/a* to lit (#3987)
-rw-r--r-- | test/lit/passes/alignment-lowering.wast | 2055 | ||||
-rw-r--r-- | test/lit/passes/alignment-lowering64.wast | 2055 | ||||
-rw-r--r-- | test/lit/passes/avoid-reinterprets.wast | 257 | ||||
-rw-r--r-- | test/lit/passes/avoid-reinterprets64.wast | 257 | ||||
-rw-r--r-- | test/passes/alignment-lowering.txt | 1948 | ||||
-rw-r--r-- | test/passes/alignment-lowering.wast | 103 | ||||
-rw-r--r-- | test/passes/alignment-lowering64.passes | 1 | ||||
-rw-r--r-- | test/passes/alignment-lowering64.txt | 1948 | ||||
-rw-r--r-- | test/passes/alignment-lowering64.wast | 103 | ||||
-rw-r--r-- | test/passes/avoid-reinterprets.txt | 182 | ||||
-rw-r--r-- | test/passes/avoid-reinterprets.wast | 69 | ||||
-rw-r--r-- | test/passes/avoid-reinterprets64.passes | 1 | ||||
-rw-r--r-- | test/passes/avoid-reinterprets64.txt | 182 | ||||
-rw-r--r-- | test/passes/avoid-reinterprets64.wast | 69 |
14 files changed, 4624 insertions, 4606 deletions
diff --git a/test/lit/passes/alignment-lowering.wast b/test/lit/passes/alignment-lowering.wast new file mode 100644 index 000000000..03abf79f3 --- /dev/null +++ b/test/lit/passes/alignment-lowering.wast @@ -0,0 +1,2055 @@ +;; 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 --alignment-lowering -S -o - | filecheck %s + +(module + ;; CHECK: (type $none_=>_none (func)) + + ;; CHECK: (memory $0 1 1) + (memory $0 1 1) + ;; CHECK: (func $func_4 + ;; CHECK-NEXT: (local $0 i32) + ;; CHECK-NEXT: (local $1 i32) + ;; CHECK-NEXT: (local $2 i32) + ;; CHECK-NEXT: (local $3 i32) + ;; CHECK-NEXT: (local $4 i32) + ;; CHECK-NEXT: (local $5 i32) + ;; CHECK-NEXT: (local $6 i32) + ;; CHECK-NEXT: (local $7 i32) + ;; CHECK-NEXT: (local $8 i32) + ;; CHECK-NEXT: (local $9 i32) + ;; CHECK-NEXT: (local $10 i32) + ;; CHECK-NEXT: (local $11 i32) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=100 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=101 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=102 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=103 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u offset=100 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=102 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=2 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=2 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=100 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=101 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=102 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=103 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=100 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=102 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $func_4 + (drop (i32.load (i32.const 4))) + (drop (i32.load align=1 (i32.const 4))) + (drop (i32.load align=2 (i32.const 4))) + (drop (i32.load align=4 (i32.const 4))) + (drop (i32.load offset=100 (i32.const 4))) + (drop (i32.load offset=100 align=1 (i32.const 4))) + (drop (i32.load offset=100 align=2 (i32.const 4))) + (drop (i32.load offset=100 align=4 (i32.const 4))) + (drop (i32.load offset=100 align=1 (unreachable))) + (i32.store (i32.const 4) (i32.const 8)) + (i32.store align=1 (i32.const 4) (i32.const 8)) + (i32.store align=2 (i32.const 4) (i32.const 8)) + (i32.store align=4 (i32.const 4) (i32.const 8)) + (i32.store offset=100 (i32.const 4) (i32.const 8)) + (i32.store offset=100 align=1 (i32.const 4) (i32.const 8)) + (i32.store offset=100 align=2 (i32.const 4) (i32.const 8)) + (i32.store offset=100 align=4 (i32.const 4) (i32.const 8)) + (i32.store offset=100 align=1 (unreachable) (i32.const 8)) + (i32.store offset=100 align=1 (i32.const 4) (unreachable)) + ) + ;; CHECK: (func $func_2 + ;; CHECK-NEXT: (local $0 i32) + ;; CHECK-NEXT: (local $1 i32) + ;; CHECK-NEXT: (local $2 i32) + ;; CHECK-NEXT: (local $3 i32) + ;; CHECK-NEXT: (local $4 i32) + ;; CHECK-NEXT: (local $5 i32) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_u offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=100 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=101 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_u offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=100 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=101 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $func_2 + (drop (i32.load16_u (i32.const 4))) + (drop (i32.load16_u align=1 (i32.const 4))) + (drop (i32.load16_u align=2 (i32.const 4))) + (drop (i32.load16_u offset=100 (i32.const 4))) + (drop (i32.load16_u offset=100 align=1 (i32.const 4))) + (drop (i32.load16_u offset=100 align=2 (i32.const 4))) + (drop (i32.load16_u offset=100 align=1 (unreachable))) + (i32.store16 (i32.const 4) (i32.const 8)) + (i32.store16 align=1 (i32.const 4) (i32.const 8)) + (i32.store16 align=2 (i32.const 4) (i32.const 8)) + (i32.store16 offset=100 (i32.const 4) (i32.const 8)) + (i32.store16 offset=100 align=1 (i32.const 4) (i32.const 8)) + (i32.store16 offset=100 align=2 (i32.const 4) (i32.const 8)) + (i32.store16 offset=100 align=1 (unreachable) (i32.const 8)) + (i32.store16 offset=100 align=1 (i32.const 4) (unreachable)) + ) + ;; CHECK: (func $func_1 + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load8_u offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load8_u offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $func_1 + (drop (i32.load8_u (i32.const 4))) + (drop (i32.load8_u align=1 (i32.const 4))) + (drop (i32.load8_u offset=100 (i32.const 4))) + (drop (i32.load8_u offset=100 align=1 (i32.const 4))) + (drop (i32.load8_u offset=100 align=1 (unreachable))) + (i32.store8 (i32.const 4) (i32.const 8)) + (i32.store8 align=1 (i32.const 4) (i32.const 8)) + (i32.store8 offset=100 (i32.const 4) (i32.const 8)) + (i32.store8 offset=100 align=1 (i32.const 4) (i32.const 8)) + (i32.store8 offset=100 align=1 (unreachable) (i32.const 8)) + (i32.store8 offset=100 align=1 (i32.const 4) (unreachable)) + ) + ;; CHECK: (func $func_signed + ;; CHECK-NEXT: (local $0 i32) + ;; CHECK-NEXT: (local $1 i32) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_s + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_s + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_s offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=100 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=101 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_s offset=100 + ;; CHECK-NEXT: (i32.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $func_signed + (drop (i32.load16_s (i32.const 4))) + (drop (i32.load16_s align=1 (i32.const 4))) + (drop (i32.load16_s align=2 (i32.const 4))) + (drop (i32.load16_s offset=100 (i32.const 4))) + (drop (i32.load16_s offset=100 align=1 (i32.const 4))) + (drop (i32.load16_s offset=100 align=2 (i32.const 4))) + (drop (i32.load16_s offset=100 align=1 (unreachable))) + ) + ;; CHECK: (func $i64-load + ;; CHECK-NEXT: (local $0 i32) + ;; CHECK-NEXT: (local $1 i32) + ;; CHECK-NEXT: (local $2 i32) + ;; CHECK-NEXT: (local $3 i32) + ;; CHECK-NEXT: (local $4 i32) + ;; CHECK-NEXT: (local $5 i32) + ;; CHECK-NEXT: (local $6 i32) + ;; CHECK-NEXT: (local $7 i32) + ;; CHECK-NEXT: (local $8 i32) + ;; CHECK-NEXT: (local $9 i32) + ;; CHECK-NEXT: (local $10 i32) + ;; CHECK-NEXT: (local $11 i32) + ;; CHECK-NEXT: (local $12 i32) + ;; CHECK-NEXT: (local $13 i32) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=4 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=5 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=6 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=7 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=2 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u offset=4 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=6 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (i32.load offset=4 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=4 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=5 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=6 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=7 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=8 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=9 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=10 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.extend_i32_s + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (i32.const 28) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.extend_i32_s + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i32.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=2 + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (i32.const 40) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: (i32.const 44) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=2 + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $i64-load + (drop (i64.load align=1 (i32.const 12))) + (drop (i64.load align=2 (i32.const 16))) + (drop (i64.load align=4 (i32.const 20))) + (drop (i64.load align=1 offset=3 (i32.const 20))) + (drop (i64.load16_s align=1 (i32.const 28))) + (drop (i64.load32_s align=1 (i32.const 32))) + (drop (i64.load16_u align=1 (i32.const 40))) + (drop (i64.load32_u align=1 (i32.const 44))) + ) + ;; CHECK: (func $f32-load + ;; CHECK-NEXT: (local $0 i32) + ;; CHECK-NEXT: (local $1 i32) + ;; CHECK-NEXT: (local $2 i32) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.reinterpret_i32 + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.reinterpret_i32 + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.reinterpret_i32 + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=4 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=5 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=6 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $f32-load + (drop (f32.load align=1 (i32.const 12))) + (drop (f32.load align=2 (i32.const 16))) + (drop (f32.load align=1 offset=3 (i32.const 20))) + ) + ;; CHECK: (func $f64-load + ;; CHECK-NEXT: (local $0 i32) + ;; CHECK-NEXT: (local $1 i32) + ;; CHECK-NEXT: (local $2 i32) + ;; CHECK-NEXT: (local $3 i32) + ;; CHECK-NEXT: (local $4 i32) + ;; CHECK-NEXT: (local $5 i32) + ;; CHECK-NEXT: (local $6 i32) + ;; CHECK-NEXT: (local $7 i32) + ;; CHECK-NEXT: (local $8 i32) + ;; CHECK-NEXT: (local $9 i32) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f64.reinterpret_i64 + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=4 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=5 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=6 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=7 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f64.reinterpret_i64 + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=2 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u offset=4 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=6 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f64.reinterpret_i64 + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (i32.load offset=4 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f64.reinterpret_i64 + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=4 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=5 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=6 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=7 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=8 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=9 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=10 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $f64-load + (drop (f64.load align=1 (i32.const 12))) + (drop (f64.load align=2 (i32.const 16))) + (drop (f64.load align=4 (i32.const 20))) + (drop (f64.load align=1 offset=3 (i32.const 20))) + ) + ;; CHECK: (func $i64-store + ;; CHECK-NEXT: (local $0 i32) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (local $2 i32) + ;; CHECK-NEXT: (local $3 i32) + ;; CHECK-NEXT: (local $4 i32) + ;; CHECK-NEXT: (local $5 i32) + ;; CHECK-NEXT: (local $6 i32) + ;; CHECK-NEXT: (local $7 i64) + ;; CHECK-NEXT: (local $8 i32) + ;; CHECK-NEXT: (local $9 i32) + ;; CHECK-NEXT: (local $10 i32) + ;; CHECK-NEXT: (local $11 i32) + ;; CHECK-NEXT: (local $12 i32) + ;; CHECK-NEXT: (local $13 i64) + ;; CHECK-NEXT: (local $14 i32) + ;; CHECK-NEXT: (local $15 i64) + ;; CHECK-NEXT: (local $16 i32) + ;; CHECK-NEXT: (local $17 i32) + ;; CHECK-NEXT: (local $18 i32) + ;; CHECK-NEXT: (local $19 i32) + ;; CHECK-NEXT: (local $20 i32) + ;; CHECK-NEXT: (local $21 i32) + ;; CHECK-NEXT: (local $22 i32) + ;; CHECK-NEXT: (local $23 i32) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i64.const 100) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=2 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=4 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=5 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=6 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=7 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i64.const 200) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=2 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=4 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=6 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: (i64.const 300) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=4 + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $14 + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $15 + ;; CHECK-NEXT: (i64.const 400) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $16 + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=4 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=5 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=6 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $18 + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $19 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=7 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=8 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=9 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=10 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $20 + ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $21 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.const 600) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $22 + ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $23 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.const 700) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (local.get $23) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $23) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=2 + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $23) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $23) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $i64-store + (i64.store align=1 (i32.const 12) (i64.const 100)) + (i64.store align=2 (i32.const 16) (i64.const 200)) + (i64.store align=4 (i32.const 20) (i64.const 300)) + (i64.store align=1 offset=3 (i32.const 24) (i64.const 400)) + (i64.store16 align=1 (i32.const 20) (i64.const 600)) + (i64.store32 align=1 (i32.const 20) (i64.const 700)) + ) + ;; CHECK: (func $f32-store + ;; CHECK-NEXT: (local $0 i32) + ;; CHECK-NEXT: (local $1 i32) + ;; CHECK-NEXT: (local $2 i32) + ;; CHECK-NEXT: (local $3 i32) + ;; CHECK-NEXT: (local $4 i32) + ;; CHECK-NEXT: (local $5 i32) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.reinterpret_f32 + ;; CHECK-NEXT: (f32.const 100) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.reinterpret_f32 + ;; CHECK-NEXT: (f32.const 200) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=2 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.reinterpret_f32 + ;; CHECK-NEXT: (f32.const 400) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=4 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=5 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=6 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $f32-store + (f32.store align=1 (i32.const 12) (f32.const 100)) + (f32.store align=2 (i32.const 16) (f32.const 200)) + (f32.store align=1 offset=3 (i32.const 24) (f32.const 400)) + ) + ;; CHECK: (func $f64-store + ;; CHECK-NEXT: (local $0 i32) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (local $2 i32) + ;; CHECK-NEXT: (local $3 i32) + ;; CHECK-NEXT: (local $4 i32) + ;; CHECK-NEXT: (local $5 i32) + ;; CHECK-NEXT: (local $6 i32) + ;; CHECK-NEXT: (local $7 i64) + ;; CHECK-NEXT: (local $8 i32) + ;; CHECK-NEXT: (local $9 i32) + ;; CHECK-NEXT: (local $10 i32) + ;; CHECK-NEXT: (local $11 i32) + ;; CHECK-NEXT: (local $12 i32) + ;; CHECK-NEXT: (local $13 i64) + ;; CHECK-NEXT: (local $14 i32) + ;; CHECK-NEXT: (local $15 i64) + ;; CHECK-NEXT: (local $16 i32) + ;; CHECK-NEXT: (local $17 i32) + ;; CHECK-NEXT: (local $18 i32) + ;; CHECK-NEXT: (local $19 i32) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i32.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i64.reinterpret_f64 + ;; CHECK-NEXT: (f64.const 100) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=2 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=4 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=5 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=6 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=7 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i64.reinterpret_f64 + ;; CHECK-NEXT: (f64.const 200) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=2 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=4 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=6 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (i32.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: (i64.reinterpret_f64 + ;; CHECK-NEXT: (f64.const 300) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=4 + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $14 + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $15 + ;; CHECK-NEXT: (i64.reinterpret_f64 + ;; CHECK-NEXT: (f64.const 400) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $16 + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=4 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=5 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=6 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $18 + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $19 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=7 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=8 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=9 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=10 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $f64-store + (f64.store align=1 (i32.const 12) (f64.const 100)) + (f64.store align=2 (i32.const 16) (f64.const 200)) + (f64.store align=4 (i32.const 20) (f64.const 300)) + (f64.store align=1 offset=3 (i32.const 24) (f64.const 400)) + ) +) diff --git a/test/lit/passes/alignment-lowering64.wast b/test/lit/passes/alignment-lowering64.wast new file mode 100644 index 000000000..61d9526f3 --- /dev/null +++ b/test/lit/passes/alignment-lowering64.wast @@ -0,0 +1,2055 @@ +;; 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 --alignment-lowering --enable-memory64 -S -o - | filecheck %s + +(module + ;; CHECK: (type $none_=>_none (func)) + + ;; CHECK: (memory $0 i64 1 1) + (memory $0 i64 1 1) + ;; CHECK: (func $func_4 + ;; CHECK-NEXT: (local $0 i64) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (local $2 i64) + ;; CHECK-NEXT: (local $3 i64) + ;; CHECK-NEXT: (local $4 i64) + ;; CHECK-NEXT: (local $5 i32) + ;; CHECK-NEXT: (local $6 i64) + ;; CHECK-NEXT: (local $7 i32) + ;; CHECK-NEXT: (local $8 i64) + ;; CHECK-NEXT: (local $9 i32) + ;; CHECK-NEXT: (local $10 i64) + ;; CHECK-NEXT: (local $11 i32) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=100 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=101 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=102 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=103 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u offset=100 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=102 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=2 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=2 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=100 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=101 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=102 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=103 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=100 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=102 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $func_4 + (drop (i32.load (i64.const 4))) + (drop (i32.load align=1 (i64.const 4))) + (drop (i32.load align=2 (i64.const 4))) + (drop (i32.load align=4 (i64.const 4))) + (drop (i32.load offset=100 (i64.const 4))) + (drop (i32.load offset=100 align=1 (i64.const 4))) + (drop (i32.load offset=100 align=2 (i64.const 4))) + (drop (i32.load offset=100 align=4 (i64.const 4))) + (drop (i32.load offset=100 align=1 (unreachable))) + (i32.store (i64.const 4) (i32.const 8)) + (i32.store align=1 (i64.const 4) (i32.const 8)) + (i32.store align=2 (i64.const 4) (i32.const 8)) + (i32.store align=4 (i64.const 4) (i32.const 8)) + (i32.store offset=100 (i64.const 4) (i32.const 8)) + (i32.store offset=100 align=1 (i64.const 4) (i32.const 8)) + (i32.store offset=100 align=2 (i64.const 4) (i32.const 8)) + (i32.store offset=100 align=4 (i64.const 4) (i32.const 8)) + (i32.store offset=100 align=1 (unreachable) (i32.const 8)) + (i32.store offset=100 align=1 (i64.const 4) (unreachable)) + ) + ;; CHECK: (func $func_2 + ;; CHECK-NEXT: (local $0 i64) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (local $2 i64) + ;; CHECK-NEXT: (local $3 i32) + ;; CHECK-NEXT: (local $4 i64) + ;; CHECK-NEXT: (local $5 i32) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_u offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=100 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=101 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_u offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=100 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=101 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $func_2 + (drop (i32.load16_u (i64.const 4))) + (drop (i32.load16_u align=1 (i64.const 4))) + (drop (i32.load16_u align=2 (i64.const 4))) + (drop (i32.load16_u offset=100 (i64.const 4))) + (drop (i32.load16_u offset=100 align=1 (i64.const 4))) + (drop (i32.load16_u offset=100 align=2 (i64.const 4))) + (drop (i32.load16_u offset=100 align=1 (unreachable))) + (i32.store16 (i64.const 4) (i32.const 8)) + (i32.store16 align=1 (i64.const 4) (i32.const 8)) + (i32.store16 align=2 (i64.const 4) (i32.const 8)) + (i32.store16 offset=100 (i64.const 4) (i32.const 8)) + (i32.store16 offset=100 align=1 (i64.const 4) (i32.const 8)) + (i32.store16 offset=100 align=2 (i64.const 4) (i32.const 8)) + (i32.store16 offset=100 align=1 (unreachable) (i32.const 8)) + (i32.store16 offset=100 align=1 (i64.const 4) (unreachable)) + ) + ;; CHECK: (func $func_1 + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load8_u offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load8_u offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $func_1 + (drop (i32.load8_u (i64.const 4))) + (drop (i32.load8_u align=1 (i64.const 4))) + (drop (i32.load8_u offset=100 (i64.const 4))) + (drop (i32.load8_u offset=100 align=1 (i64.const 4))) + (drop (i32.load8_u offset=100 align=1 (unreachable))) + (i32.store8 (i64.const 4) (i32.const 8)) + (i32.store8 align=1 (i64.const 4) (i32.const 8)) + (i32.store8 offset=100 (i64.const 4) (i32.const 8)) + (i32.store8 offset=100 align=1 (i64.const 4) (i32.const 8)) + (i32.store8 offset=100 align=1 (unreachable) (i32.const 8)) + (i32.store8 offset=100 align=1 (i64.const 4) (unreachable)) + ) + ;; CHECK: (func $func_signed + ;; CHECK-NEXT: (local $0 i64) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_s + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_s + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_s offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=100 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=101 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load16_s offset=100 + ;; CHECK-NEXT: (i64.const 4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (unreachable) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $func_signed + (drop (i32.load16_s (i64.const 4))) + (drop (i32.load16_s align=1 (i64.const 4))) + (drop (i32.load16_s align=2 (i64.const 4))) + (drop (i32.load16_s offset=100 (i64.const 4))) + (drop (i32.load16_s offset=100 align=1 (i64.const 4))) + (drop (i32.load16_s offset=100 align=2 (i64.const 4))) + (drop (i32.load16_s offset=100 align=1 (unreachable))) + ) + ;; CHECK: (func $i64-load + ;; CHECK-NEXT: (local $0 i64) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (local $2 i64) + ;; CHECK-NEXT: (local $3 i64) + ;; CHECK-NEXT: (local $4 i64) + ;; CHECK-NEXT: (local $5 i64) + ;; CHECK-NEXT: (local $6 i64) + ;; CHECK-NEXT: (local $7 i64) + ;; CHECK-NEXT: (local $8 i64) + ;; CHECK-NEXT: (local $9 i64) + ;; CHECK-NEXT: (local $10 i64) + ;; CHECK-NEXT: (local $11 i64) + ;; CHECK-NEXT: (local $12 i64) + ;; CHECK-NEXT: (local $13 i64) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i64.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=4 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=5 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=6 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=7 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i64.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=2 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u offset=4 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=6 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i64.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (i32.load offset=4 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i64.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=4 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=5 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=6 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=7 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=8 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=9 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=10 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.extend_i32_s + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (i64.const 28) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shr_s + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.extend_i32_s + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=2 + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (i64.const 40) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: (i64.const 44) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=2 + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $i64-load + (drop (i64.load align=1 (i64.const 12))) + (drop (i64.load align=2 (i64.const 16))) + (drop (i64.load align=4 (i64.const 20))) + (drop (i64.load align=1 offset=3 (i64.const 20))) + (drop (i64.load16_s align=1 (i64.const 28))) + (drop (i64.load32_s align=1 (i64.const 32))) + (drop (i64.load16_u align=1 (i64.const 40))) + (drop (i64.load32_u align=1 (i64.const 44))) + ) + ;; CHECK: (func $f32-load + ;; CHECK-NEXT: (local $0 i64) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (local $2 i64) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.reinterpret_i32 + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i64.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.reinterpret_i32 + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i64.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.reinterpret_i32 + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i64.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=4 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=5 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=6 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $f32-load + (drop (f32.load align=1 (i64.const 12))) + (drop (f32.load align=2 (i64.const 16))) + (drop (f32.load align=1 offset=3 (i64.const 20))) + ) + ;; CHECK: (func $f64-load + ;; CHECK-NEXT: (local $0 i64) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (local $2 i64) + ;; CHECK-NEXT: (local $3 i64) + ;; CHECK-NEXT: (local $4 i64) + ;; CHECK-NEXT: (local $5 i64) + ;; CHECK-NEXT: (local $6 i64) + ;; CHECK-NEXT: (local $7 i64) + ;; CHECK-NEXT: (local $8 i64) + ;; CHECK-NEXT: (local $9 i64) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f64.reinterpret_i64 + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i64.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=1 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=2 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=4 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=5 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=6 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=7 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f64.reinterpret_i64 + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i64.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=2 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load16_u offset=4 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load16_u offset=6 + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f64.reinterpret_i64 + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i64.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (i32.load offset=4 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f64.reinterpret_i64 + ;; CHECK-NEXT: (block (result i64) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i64.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.or + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=3 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=4 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=5 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=6 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.shl + ;; CHECK-NEXT: (i64.extend_i32_u + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.load8_u offset=7 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=8 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.or + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=9 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.shl + ;; CHECK-NEXT: (i32.load8_u offset=10 + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $f64-load + (drop (f64.load align=1 (i64.const 12))) + (drop (f64.load align=2 (i64.const 16))) + (drop (f64.load align=4 (i64.const 20))) + (drop (f64.load align=1 offset=3 (i64.const 20))) + ) + ;; CHECK: (func $i64-store + ;; CHECK-NEXT: (local $0 i64) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (local $2 i64) + ;; CHECK-NEXT: (local $3 i32) + ;; CHECK-NEXT: (local $4 i64) + ;; CHECK-NEXT: (local $5 i32) + ;; CHECK-NEXT: (local $6 i64) + ;; CHECK-NEXT: (local $7 i64) + ;; CHECK-NEXT: (local $8 i64) + ;; CHECK-NEXT: (local $9 i32) + ;; CHECK-NEXT: (local $10 i64) + ;; CHECK-NEXT: (local $11 i32) + ;; CHECK-NEXT: (local $12 i64) + ;; CHECK-NEXT: (local $13 i64) + ;; CHECK-NEXT: (local $14 i64) + ;; CHECK-NEXT: (local $15 i64) + ;; CHECK-NEXT: (local $16 i64) + ;; CHECK-NEXT: (local $17 i32) + ;; CHECK-NEXT: (local $18 i64) + ;; CHECK-NEXT: (local $19 i32) + ;; CHECK-NEXT: (local $20 i64) + ;; CHECK-NEXT: (local $21 i32) + ;; CHECK-NEXT: (local $22 i64) + ;; CHECK-NEXT: (local $23 i32) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i64.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i64.const 100) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=2 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=4 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=5 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=6 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=7 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i64.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i64.const 200) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=2 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=4 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=6 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (i64.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: (i64.const 300) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=4 + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $14 + ;; CHECK-NEXT: (i64.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $15 + ;; CHECK-NEXT: (i64.const 400) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $16 + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=4 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=5 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=6 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $18 + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $19 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=7 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=8 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=9 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=10 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $20 + ;; CHECK-NEXT: (i64.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $21 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.const 600) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $20) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $21) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $22 + ;; CHECK-NEXT: (i64.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $23 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.const 700) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (local.get $23) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $23) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=2 + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $23) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $22) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $23) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $i64-store + (i64.store align=1 (i64.const 12) (i64.const 100)) + (i64.store align=2 (i64.const 16) (i64.const 200)) + (i64.store align=4 (i64.const 20) (i64.const 300)) + (i64.store align=1 offset=3 (i64.const 24) (i64.const 400)) + (i64.store16 align=1 (i64.const 20) (i64.const 600)) + (i64.store32 align=1 (i64.const 20) (i64.const 700)) + ) + ;; CHECK: (func $f32-store + ;; CHECK-NEXT: (local $0 i64) + ;; CHECK-NEXT: (local $1 i32) + ;; CHECK-NEXT: (local $2 i64) + ;; CHECK-NEXT: (local $3 i32) + ;; CHECK-NEXT: (local $4 i64) + ;; CHECK-NEXT: (local $5 i32) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i64.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.reinterpret_f32 + ;; CHECK-NEXT: (f32.const 100) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i64.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.reinterpret_f32 + ;; CHECK-NEXT: (f32.const 200) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=2 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (i64.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.reinterpret_f32 + ;; CHECK-NEXT: (f32.const 400) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=4 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=5 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=6 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $f32-store + (f32.store align=1 (i64.const 12) (f32.const 100)) + (f32.store align=2 (i64.const 16) (f32.const 200)) + (f32.store align=1 offset=3 (i64.const 24) (f32.const 400)) + ) + ;; CHECK: (func $f64-store + ;; CHECK-NEXT: (local $0 i64) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (local $2 i64) + ;; CHECK-NEXT: (local $3 i32) + ;; CHECK-NEXT: (local $4 i64) + ;; CHECK-NEXT: (local $5 i32) + ;; CHECK-NEXT: (local $6 i64) + ;; CHECK-NEXT: (local $7 i64) + ;; CHECK-NEXT: (local $8 i64) + ;; CHECK-NEXT: (local $9 i32) + ;; CHECK-NEXT: (local $10 i64) + ;; CHECK-NEXT: (local $11 i32) + ;; CHECK-NEXT: (local $12 i64) + ;; CHECK-NEXT: (local $13 i64) + ;; CHECK-NEXT: (local $14 i64) + ;; CHECK-NEXT: (local $15 i64) + ;; CHECK-NEXT: (local $16 i64) + ;; CHECK-NEXT: (local $17 i32) + ;; CHECK-NEXT: (local $18 i64) + ;; CHECK-NEXT: (local $19 i32) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $0 + ;; CHECK-NEXT: (i64.const 12) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i64.reinterpret_f64 + ;; CHECK-NEXT: (f64.const 100) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=1 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=2 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $4 + ;; CHECK-NEXT: (local.get $0) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $5 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=4 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=5 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=6 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=7 + ;; CHECK-NEXT: (local.get $4) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $5) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $6 + ;; CHECK-NEXT: (i64.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $7 + ;; CHECK-NEXT: (i64.reinterpret_f64 + ;; CHECK-NEXT: (f64.const 200) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $8 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $9 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=2 + ;; CHECK-NEXT: (local.get $8) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $9) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $10 + ;; CHECK-NEXT: (local.get $6) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $11 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $7) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=4 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store16 offset=6 + ;; CHECK-NEXT: (local.get $10) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $11) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $12 + ;; CHECK-NEXT: (i64.const 20) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $13 + ;; CHECK-NEXT: (i64.reinterpret_f64 + ;; CHECK-NEXT: (f64.const 300) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store offset=4 + ;; CHECK-NEXT: (local.get $12) + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $13) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $14 + ;; CHECK-NEXT: (i64.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $15 + ;; CHECK-NEXT: (i64.reinterpret_f64 + ;; CHECK-NEXT: (f64.const 400) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $16 + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $17 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=3 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=4 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=5 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=6 + ;; CHECK-NEXT: (local.get $16) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $17) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (block + ;; CHECK-NEXT: (local.set $18 + ;; CHECK-NEXT: (local.get $14) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $19 + ;; CHECK-NEXT: (i32.wrap_i64 + ;; CHECK-NEXT: (i64.shr_u + ;; CHECK-NEXT: (local.get $15) + ;; CHECK-NEXT: (i64.const 32) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=7 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=8 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 8) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=9 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 16) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.store8 offset=10 + ;; CHECK-NEXT: (local.get $18) + ;; CHECK-NEXT: (i32.shr_u + ;; CHECK-NEXT: (local.get $19) + ;; CHECK-NEXT: (i32.const 24) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $f64-store + (f64.store align=1 (i64.const 12) (f64.const 100)) + (f64.store align=2 (i64.const 16) (f64.const 200)) + (f64.store align=4 (i64.const 20) (f64.const 300)) + (f64.store align=1 offset=3 (i64.const 24) (f64.const 400)) + ) +) diff --git a/test/lit/passes/avoid-reinterprets.wast b/test/lit/passes/avoid-reinterprets.wast new file mode 100644 index 000000000..4a6bb92e9 --- /dev/null +++ b/test/lit/passes/avoid-reinterprets.wast @@ -0,0 +1,257 @@ +;; 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 --avoid-reinterprets -S -o - | filecheck %s + +(module + (memory 1) + ;; CHECK: (type $none_=>_none (func)) + + ;; CHECK: (type $none_=>_f32 (func (result f32))) + + ;; CHECK: (memory $0 1) + + ;; CHECK: (func $simple + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (i32.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f64.load + ;; CHECK-NEXT: (i32.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.load + ;; CHECK-NEXT: (i32.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $simple + (drop (f32.reinterpret_i32 (i32.load (i32.const 1024)))) + (drop (i32.reinterpret_f32 (f32.load (i32.const 1024)))) + (drop (f64.reinterpret_i64 (i64.load (i32.const 1024)))) + (drop (i64.reinterpret_f64 (f64.load (i32.const 1024)))) + ) + ;; CHECK: (func $one + ;; CHECK-NEXT: (local $x i32) + ;; CHECK-NEXT: (local $1 i32) + ;; CHECK-NEXT: (local $2 f32) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $one + (local $x i32) + (local.set $x (i32.load (i32.const 1024))) + (drop (f32.reinterpret_i32 (local.get $x))) + ) + ;; CHECK: (func $one-b + ;; CHECK-NEXT: (local $x f32) + ;; CHECK-NEXT: (local $1 i32) + ;; CHECK-NEXT: (local $2 i32) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (block (result f32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $one-b + (local $x f32) + (local.set $x (f32.load (i32.const 1024))) + (drop (i32.reinterpret_f32 (local.get $x))) + ) + ;; CHECK: (func $both + ;; CHECK-NEXT: (local $x i32) + ;; CHECK-NEXT: (local $1 i32) + ;; CHECK-NEXT: (local $2 f32) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $both + (local $x i32) + (local.set $x (i32.load (i32.const 1024))) + (drop (f32.reinterpret_i32 (local.get $x))) + (drop (f32.reinterpret_i32 (local.get $x))) + ) + ;; CHECK: (func $half + ;; CHECK-NEXT: (local $x i32) + ;; CHECK-NEXT: (local $1 i32) + ;; CHECK-NEXT: (local $2 f32) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i32.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $half + (local $x i32) + (local.set $x (i32.load (i32.const 1024))) + (drop (local.get $x)) + (drop (f32.reinterpret_i32 (local.get $x))) + ) + ;; CHECK: (func $copy + ;; CHECK-NEXT: (local $x i32) + ;; CHECK-NEXT: (local $y i32) + ;; CHECK-NEXT: (local $2 i32) + ;; CHECK-NEXT: (local $3 f32) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $y + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $copy + (local $x i32) + (local $y i32) + (local.set $x (i32.load (i32.const 1024))) + (local.set $y (local.get $x)) + (drop (f32.reinterpret_i32 (local.get $y))) + ) + ;; CHECK: (func $partial1 (result f32) + ;; CHECK-NEXT: (f32.reinterpret_i32 + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $partial1 (result f32) + (f32.reinterpret_i32 + (i32.load16_u + (i32.const 3) + ) + ) + ) + ;; CHECK: (func $partial2 (result f32) + ;; CHECK-NEXT: (f32.reinterpret_i32 + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (i32.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $partial2 (result f32) + (f32.reinterpret_i32 + (i32.load8_u + (i32.const 3) + ) + ) + ) + ;; CHECK: (func $nofallthrough + ;; CHECK-NEXT: (local $x i32) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i32.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.reinterpret_i32 + ;; CHECK-NEXT: (block $block (result i32) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $nofallthrough + (local $x i32) + (local.set $x + (i32.load + (i32.const 1024) + ) + ) + (drop + (f32.reinterpret_i32 + (block (result i32) + (nop) ;; this would be removed by other opts, but in general, we can't + ;; just look at the fallthrough, as we can't just remove code here + (local.get $x) + ) + ) + ) + ) +) diff --git a/test/lit/passes/avoid-reinterprets64.wast b/test/lit/passes/avoid-reinterprets64.wast new file mode 100644 index 000000000..80950b30b --- /dev/null +++ b/test/lit/passes/avoid-reinterprets64.wast @@ -0,0 +1,257 @@ +;; 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 --avoid-reinterprets --enable-memory64 -S -o - | filecheck %s + +(module + (memory i64 1) + ;; CHECK: (type $none_=>_none (func)) + + ;; CHECK: (type $none_=>_f32 (func (result f32))) + + ;; CHECK: (memory $0 i64 1) + + ;; CHECK: (func $simple + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (i64.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i64.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f64.load + ;; CHECK-NEXT: (i64.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (i64.load + ;; CHECK-NEXT: (i64.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $simple + (drop (f32.reinterpret_i32 (i32.load (i64.const 1024)))) + (drop (i32.reinterpret_f32 (f32.load (i64.const 1024)))) + (drop (f64.reinterpret_i64 (i64.load (i64.const 1024)))) + (drop (i64.reinterpret_f64 (f64.load (i64.const 1024)))) + ) + ;; CHECK: (func $one + ;; CHECK-NEXT: (local $x i32) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (local $2 f32) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i64.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $one + (local $x i32) + (local.set $x (i32.load (i64.const 1024))) + (drop (f32.reinterpret_i32 (local.get $x))) + ) + ;; CHECK: (func $one-b + ;; CHECK-NEXT: (local $x f32) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (local $2 i32) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (block (result f32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i64.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $one-b + (local $x f32) + (local.set $x (f32.load (i64.const 1024))) + (drop (i32.reinterpret_f32 (local.get $x))) + ) + ;; CHECK: (func $both + ;; CHECK-NEXT: (local $x i32) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (local $2 f32) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i64.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $both + (local $x i32) + (local.set $x (i32.load (i64.const 1024))) + (drop (f32.reinterpret_i32 (local.get $x))) + (drop (f32.reinterpret_i32 (local.get $x))) + ) + ;; CHECK: (func $half + ;; CHECK-NEXT: (local $x i32) + ;; CHECK-NEXT: (local $1 i64) + ;; CHECK-NEXT: (local $2 f32) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $1 + ;; CHECK-NEXT: (i64.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $1) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $half + (local $x i32) + (local.set $x (i32.load (i64.const 1024))) + (drop (local.get $x)) + (drop (f32.reinterpret_i32 (local.get $x))) + ) + ;; CHECK: (func $copy + ;; CHECK-NEXT: (local $x i32) + ;; CHECK-NEXT: (local $y i32) + ;; CHECK-NEXT: (local $2 i64) + ;; CHECK-NEXT: (local $3 f32) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (block (result i32) + ;; CHECK-NEXT: (local.set $2 + ;; CHECK-NEXT: (i64.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $3 + ;; CHECK-NEXT: (f32.load + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (local.get $2) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (local.set $y + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (local.get $3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $copy + (local $x i32) + (local $y i32) + (local.set $x (i32.load (i64.const 1024))) + (local.set $y (local.get $x)) + (drop (f32.reinterpret_i32 (local.get $y))) + ) + ;; CHECK: (func $partial1 (result f32) + ;; CHECK-NEXT: (f32.reinterpret_i32 + ;; CHECK-NEXT: (i32.load16_u + ;; CHECK-NEXT: (i64.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $partial1 (result f32) + (f32.reinterpret_i32 + (i32.load16_u + (i64.const 3) + ) + ) + ) + ;; CHECK: (func $partial2 (result f32) + ;; CHECK-NEXT: (f32.reinterpret_i32 + ;; CHECK-NEXT: (i32.load8_u + ;; CHECK-NEXT: (i64.const 3) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $partial2 (result f32) + (f32.reinterpret_i32 + (i32.load8_u + (i64.const 3) + ) + ) + ) + ;; CHECK: (func $nofallthrough + ;; CHECK-NEXT: (local $x i32) + ;; CHECK-NEXT: (local.set $x + ;; CHECK-NEXT: (i32.load + ;; CHECK-NEXT: (i64.const 1024) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: (drop + ;; CHECK-NEXT: (f32.reinterpret_i32 + ;; CHECK-NEXT: (block $block (result i32) + ;; CHECK-NEXT: (nop) + ;; CHECK-NEXT: (local.get $x) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + ;; CHECK-NEXT: ) + (func $nofallthrough + (local $x i32) + (local.set $x + (i32.load + (i64.const 1024) + ) + ) + (drop + (f32.reinterpret_i32 + (block (result i32) + (nop) ;; this would be removed by other opts, but in general, we can't + ;; just look at the fallthrough, as we can't just remove code here + (local.get $x) + ) + ) + ) + ) +) diff --git a/test/passes/alignment-lowering.txt b/test/passes/alignment-lowering.txt deleted file mode 100644 index 0ea97136f..000000000 --- a/test/passes/alignment-lowering.txt +++ /dev/null @@ -1,1948 +0,0 @@ -(module - (type $none_=>_none (func)) - (memory $0 1 1) - (func $func_4 - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (drop - (i32.load - (i32.const 4) - ) - ) - (drop - (block (result i32) - (local.set $0 - (i32.const 4) - ) - (i32.or - (i32.or - (i32.load8_u - (local.get $0) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $0) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=2 - (local.get $0) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=3 - (local.get $0) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (drop - (block (result i32) - (local.set $1 - (i32.const 4) - ) - (i32.or - (i32.load16_u - (local.get $1) - ) - (i32.shl - (i32.load16_u offset=2 - (local.get $1) - ) - (i32.const 16) - ) - ) - ) - ) - (drop - (i32.load - (i32.const 4) - ) - ) - (drop - (i32.load offset=100 - (i32.const 4) - ) - ) - (drop - (block (result i32) - (local.set $2 - (i32.const 4) - ) - (i32.or - (i32.or - (i32.load8_u offset=100 - (local.get $2) - ) - (i32.shl - (i32.load8_u offset=101 - (local.get $2) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=102 - (local.get $2) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=103 - (local.get $2) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (drop - (block (result i32) - (local.set $3 - (i32.const 4) - ) - (i32.or - (i32.load16_u offset=100 - (local.get $3) - ) - (i32.shl - (i32.load16_u offset=102 - (local.get $3) - ) - (i32.const 16) - ) - ) - ) - ) - (drop - (i32.load offset=100 - (i32.const 4) - ) - ) - (drop - (unreachable) - ) - (i32.store - (i32.const 4) - (i32.const 8) - ) - (block - (local.set $4 - (i32.const 4) - ) - (local.set $5 - (i32.const 8) - ) - (i32.store8 - (local.get $4) - (local.get $5) - ) - (i32.store8 offset=1 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 8) - ) - ) - (i32.store8 offset=2 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 16) - ) - ) - (i32.store8 offset=3 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 24) - ) - ) - ) - (block - (local.set $6 - (i32.const 4) - ) - (local.set $7 - (i32.const 8) - ) - (i32.store16 - (local.get $6) - (local.get $7) - ) - (i32.store16 offset=2 - (local.get $6) - (i32.shr_u - (local.get $7) - (i32.const 16) - ) - ) - ) - (i32.store - (i32.const 4) - (i32.const 8) - ) - (i32.store offset=100 - (i32.const 4) - (i32.const 8) - ) - (block - (local.set $8 - (i32.const 4) - ) - (local.set $9 - (i32.const 8) - ) - (i32.store8 offset=100 - (local.get $8) - (local.get $9) - ) - (i32.store8 offset=101 - (local.get $8) - (i32.shr_u - (local.get $9) - (i32.const 8) - ) - ) - (i32.store8 offset=102 - (local.get $8) - (i32.shr_u - (local.get $9) - (i32.const 16) - ) - ) - (i32.store8 offset=103 - (local.get $8) - (i32.shr_u - (local.get $9) - (i32.const 24) - ) - ) - ) - (block - (local.set $10 - (i32.const 4) - ) - (local.set $11 - (i32.const 8) - ) - (i32.store16 offset=100 - (local.get $10) - (local.get $11) - ) - (i32.store16 offset=102 - (local.get $10) - (i32.shr_u - (local.get $11) - (i32.const 16) - ) - ) - ) - (i32.store offset=100 - (i32.const 4) - (i32.const 8) - ) - (block - (drop - (unreachable) - ) - (drop - (i32.const 8) - ) - ) - (block - (drop - (i32.const 4) - ) - (drop - (unreachable) - ) - ) - ) - (func $func_2 - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (drop - (i32.load16_u - (i32.const 4) - ) - ) - (drop - (block (result i32) - (local.set $0 - (i32.const 4) - ) - (i32.or - (i32.load8_u - (local.get $0) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $0) - ) - (i32.const 8) - ) - ) - ) - ) - (drop - (i32.load16_u - (i32.const 4) - ) - ) - (drop - (i32.load16_u offset=100 - (i32.const 4) - ) - ) - (drop - (block (result i32) - (local.set $1 - (i32.const 4) - ) - (i32.or - (i32.load8_u offset=100 - (local.get $1) - ) - (i32.shl - (i32.load8_u offset=101 - (local.get $1) - ) - (i32.const 8) - ) - ) - ) - ) - (drop - (i32.load16_u offset=100 - (i32.const 4) - ) - ) - (drop - (unreachable) - ) - (i32.store16 - (i32.const 4) - (i32.const 8) - ) - (block - (local.set $2 - (i32.const 4) - ) - (local.set $3 - (i32.const 8) - ) - (i32.store8 - (local.get $2) - (local.get $3) - ) - (i32.store8 offset=1 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 8) - ) - ) - ) - (i32.store16 - (i32.const 4) - (i32.const 8) - ) - (i32.store16 offset=100 - (i32.const 4) - (i32.const 8) - ) - (block - (local.set $4 - (i32.const 4) - ) - (local.set $5 - (i32.const 8) - ) - (i32.store8 offset=100 - (local.get $4) - (local.get $5) - ) - (i32.store8 offset=101 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 8) - ) - ) - ) - (i32.store16 offset=100 - (i32.const 4) - (i32.const 8) - ) - (block - (drop - (unreachable) - ) - (drop - (i32.const 8) - ) - ) - (block - (drop - (i32.const 4) - ) - (drop - (unreachable) - ) - ) - ) - (func $func_1 - (drop - (i32.load8_u - (i32.const 4) - ) - ) - (drop - (i32.load8_u - (i32.const 4) - ) - ) - (drop - (i32.load8_u offset=100 - (i32.const 4) - ) - ) - (drop - (i32.load8_u offset=100 - (i32.const 4) - ) - ) - (drop - (unreachable) - ) - (i32.store8 - (i32.const 4) - (i32.const 8) - ) - (i32.store8 - (i32.const 4) - (i32.const 8) - ) - (i32.store8 offset=100 - (i32.const 4) - (i32.const 8) - ) - (i32.store8 offset=100 - (i32.const 4) - (i32.const 8) - ) - (block - (drop - (unreachable) - ) - (drop - (i32.const 8) - ) - ) - (block - (drop - (i32.const 4) - ) - (drop - (unreachable) - ) - ) - ) - (func $func_signed - (local $0 i32) - (local $1 i32) - (drop - (i32.load16_s - (i32.const 4) - ) - ) - (drop - (block (result i32) - (local.set $0 - (i32.const 4) - ) - (i32.shr_s - (i32.shl - (i32.or - (i32.load8_u - (local.get $0) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $0) - ) - (i32.const 8) - ) - ) - (i32.const 16) - ) - (i32.const 16) - ) - ) - ) - (drop - (i32.load16_s - (i32.const 4) - ) - ) - (drop - (i32.load16_s offset=100 - (i32.const 4) - ) - ) - (drop - (block (result i32) - (local.set $1 - (i32.const 4) - ) - (i32.shr_s - (i32.shl - (i32.or - (i32.load8_u offset=100 - (local.get $1) - ) - (i32.shl - (i32.load8_u offset=101 - (local.get $1) - ) - (i32.const 8) - ) - ) - (i32.const 16) - ) - (i32.const 16) - ) - ) - ) - (drop - (i32.load16_s offset=100 - (i32.const 4) - ) - ) - (drop - (unreachable) - ) - ) - (func $i64-load - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) - (drop - (block (result i64) - (local.set $0 - (i32.const 12) - ) - (i64.or - (i64.extend_i32_u - (block (result i32) - (local.set $1 - (local.get $0) - ) - (i32.or - (i32.or - (i32.load8_u - (local.get $1) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $1) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=2 - (local.get $1) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=3 - (local.get $1) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.shl - (i64.extend_i32_u - (block (result i32) - (local.set $2 - (local.get $0) - ) - (i32.or - (i32.or - (i32.load8_u offset=4 - (local.get $2) - ) - (i32.shl - (i32.load8_u offset=5 - (local.get $2) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=6 - (local.get $2) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=7 - (local.get $2) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.const 32) - ) - ) - ) - ) - (drop - (block (result i64) - (local.set $3 - (i32.const 16) - ) - (i64.or - (i64.extend_i32_u - (block (result i32) - (local.set $4 - (local.get $3) - ) - (i32.or - (i32.load16_u - (local.get $4) - ) - (i32.shl - (i32.load16_u offset=2 - (local.get $4) - ) - (i32.const 16) - ) - ) - ) - ) - (i64.shl - (i64.extend_i32_u - (block (result i32) - (local.set $5 - (local.get $3) - ) - (i32.or - (i32.load16_u offset=4 - (local.get $5) - ) - (i32.shl - (i32.load16_u offset=6 - (local.get $5) - ) - (i32.const 16) - ) - ) - ) - ) - (i64.const 32) - ) - ) - ) - ) - (drop - (block (result i64) - (local.set $6 - (i32.const 20) - ) - (i64.or - (i64.extend_i32_u - (i32.load - (local.get $6) - ) - ) - (i64.shl - (i64.extend_i32_u - (i32.load offset=4 - (local.get $6) - ) - ) - (i64.const 32) - ) - ) - ) - ) - (drop - (block (result i64) - (local.set $7 - (i32.const 20) - ) - (i64.or - (i64.extend_i32_u - (block (result i32) - (local.set $8 - (local.get $7) - ) - (i32.or - (i32.or - (i32.load8_u offset=3 - (local.get $8) - ) - (i32.shl - (i32.load8_u offset=4 - (local.get $8) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=5 - (local.get $8) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=6 - (local.get $8) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.shl - (i64.extend_i32_u - (block (result i32) - (local.set $9 - (local.get $7) - ) - (i32.or - (i32.or - (i32.load8_u offset=7 - (local.get $9) - ) - (i32.shl - (i32.load8_u offset=8 - (local.get $9) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=9 - (local.get $9) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=10 - (local.get $9) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.const 32) - ) - ) - ) - ) - (drop - (i64.extend_i32_s - (block (result i32) - (local.set $10 - (i32.const 28) - ) - (i32.shr_s - (i32.shl - (i32.or - (i32.load8_u - (local.get $10) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $10) - ) - (i32.const 8) - ) - ) - (i32.const 16) - ) - (i32.const 16) - ) - ) - ) - ) - (drop - (i64.extend_i32_s - (block (result i32) - (local.set $11 - (i32.const 32) - ) - (i32.or - (i32.or - (i32.load8_u - (local.get $11) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $11) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=2 - (local.get $11) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=3 - (local.get $11) - ) - (i32.const 24) - ) - ) - ) - ) - ) - ) - (drop - (i64.extend_i32_u - (block (result i32) - (local.set $12 - (i32.const 40) - ) - (i32.or - (i32.load8_u - (local.get $12) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $12) - ) - (i32.const 8) - ) - ) - ) - ) - ) - (drop - (i64.extend_i32_u - (block (result i32) - (local.set $13 - (i32.const 44) - ) - (i32.or - (i32.or - (i32.load8_u - (local.get $13) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $13) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=2 - (local.get $13) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=3 - (local.get $13) - ) - (i32.const 24) - ) - ) - ) - ) - ) - ) - ) - (func $f32-load - (local $0 i32) - (local $1 i32) - (local $2 i32) - (drop - (f32.reinterpret_i32 - (block (result i32) - (local.set $0 - (i32.const 12) - ) - (i32.or - (i32.or - (i32.load8_u - (local.get $0) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $0) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=2 - (local.get $0) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=3 - (local.get $0) - ) - (i32.const 24) - ) - ) - ) - ) - ) - ) - (drop - (f32.reinterpret_i32 - (block (result i32) - (local.set $1 - (i32.const 16) - ) - (i32.or - (i32.load16_u - (local.get $1) - ) - (i32.shl - (i32.load16_u offset=2 - (local.get $1) - ) - (i32.const 16) - ) - ) - ) - ) - ) - (drop - (f32.reinterpret_i32 - (block (result i32) - (local.set $2 - (i32.const 20) - ) - (i32.or - (i32.or - (i32.load8_u offset=3 - (local.get $2) - ) - (i32.shl - (i32.load8_u offset=4 - (local.get $2) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=5 - (local.get $2) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=6 - (local.get $2) - ) - (i32.const 24) - ) - ) - ) - ) - ) - ) - ) - (func $f64-load - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - (local $9 i32) - (drop - (f64.reinterpret_i64 - (block (result i64) - (local.set $0 - (i32.const 12) - ) - (i64.or - (i64.extend_i32_u - (block (result i32) - (local.set $1 - (local.get $0) - ) - (i32.or - (i32.or - (i32.load8_u - (local.get $1) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $1) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=2 - (local.get $1) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=3 - (local.get $1) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.shl - (i64.extend_i32_u - (block (result i32) - (local.set $2 - (local.get $0) - ) - (i32.or - (i32.or - (i32.load8_u offset=4 - (local.get $2) - ) - (i32.shl - (i32.load8_u offset=5 - (local.get $2) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=6 - (local.get $2) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=7 - (local.get $2) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.const 32) - ) - ) - ) - ) - ) - (drop - (f64.reinterpret_i64 - (block (result i64) - (local.set $3 - (i32.const 16) - ) - (i64.or - (i64.extend_i32_u - (block (result i32) - (local.set $4 - (local.get $3) - ) - (i32.or - (i32.load16_u - (local.get $4) - ) - (i32.shl - (i32.load16_u offset=2 - (local.get $4) - ) - (i32.const 16) - ) - ) - ) - ) - (i64.shl - (i64.extend_i32_u - (block (result i32) - (local.set $5 - (local.get $3) - ) - (i32.or - (i32.load16_u offset=4 - (local.get $5) - ) - (i32.shl - (i32.load16_u offset=6 - (local.get $5) - ) - (i32.const 16) - ) - ) - ) - ) - (i64.const 32) - ) - ) - ) - ) - ) - (drop - (f64.reinterpret_i64 - (block (result i64) - (local.set $6 - (i32.const 20) - ) - (i64.or - (i64.extend_i32_u - (i32.load - (local.get $6) - ) - ) - (i64.shl - (i64.extend_i32_u - (i32.load offset=4 - (local.get $6) - ) - ) - (i64.const 32) - ) - ) - ) - ) - ) - (drop - (f64.reinterpret_i64 - (block (result i64) - (local.set $7 - (i32.const 20) - ) - (i64.or - (i64.extend_i32_u - (block (result i32) - (local.set $8 - (local.get $7) - ) - (i32.or - (i32.or - (i32.load8_u offset=3 - (local.get $8) - ) - (i32.shl - (i32.load8_u offset=4 - (local.get $8) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=5 - (local.get $8) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=6 - (local.get $8) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.shl - (i64.extend_i32_u - (block (result i32) - (local.set $9 - (local.get $7) - ) - (i32.or - (i32.or - (i32.load8_u offset=7 - (local.get $9) - ) - (i32.shl - (i32.load8_u offset=8 - (local.get $9) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=9 - (local.get $9) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=10 - (local.get $9) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.const 32) - ) - ) - ) - ) - ) - ) - (func $i64-store - (local $0 i32) - (local $1 i64) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i64) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i64) - (local $14 i32) - (local $15 i64) - (local $16 i32) - (local $17 i32) - (local $18 i32) - (local $19 i32) - (local $20 i32) - (local $21 i32) - (local $22 i32) - (local $23 i32) - (block - (local.set $0 - (i32.const 12) - ) - (local.set $1 - (i64.const 100) - ) - (block - (local.set $2 - (local.get $0) - ) - (local.set $3 - (i32.wrap_i64 - (local.get $1) - ) - ) - (i32.store8 - (local.get $2) - (local.get $3) - ) - (i32.store8 offset=1 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 8) - ) - ) - (i32.store8 offset=2 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 16) - ) - ) - (i32.store8 offset=3 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 24) - ) - ) - ) - (block - (local.set $4 - (local.get $0) - ) - (local.set $5 - (i32.wrap_i64 - (i64.shr_u - (local.get $1) - (i64.const 32) - ) - ) - ) - (i32.store8 offset=4 - (local.get $4) - (local.get $5) - ) - (i32.store8 offset=5 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 8) - ) - ) - (i32.store8 offset=6 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 16) - ) - ) - (i32.store8 offset=7 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 24) - ) - ) - ) - ) - (block - (local.set $6 - (i32.const 16) - ) - (local.set $7 - (i64.const 200) - ) - (block - (local.set $8 - (local.get $6) - ) - (local.set $9 - (i32.wrap_i64 - (local.get $7) - ) - ) - (i32.store16 - (local.get $8) - (local.get $9) - ) - (i32.store16 offset=2 - (local.get $8) - (i32.shr_u - (local.get $9) - (i32.const 16) - ) - ) - ) - (block - (local.set $10 - (local.get $6) - ) - (local.set $11 - (i32.wrap_i64 - (i64.shr_u - (local.get $7) - (i64.const 32) - ) - ) - ) - (i32.store16 offset=4 - (local.get $10) - (local.get $11) - ) - (i32.store16 offset=6 - (local.get $10) - (i32.shr_u - (local.get $11) - (i32.const 16) - ) - ) - ) - ) - (block - (local.set $12 - (i32.const 20) - ) - (local.set $13 - (i64.const 300) - ) - (i32.store - (local.get $12) - (i32.wrap_i64 - (local.get $13) - ) - ) - (i32.store offset=4 - (local.get $12) - (i32.wrap_i64 - (i64.shr_u - (local.get $13) - (i64.const 32) - ) - ) - ) - ) - (block - (local.set $14 - (i32.const 24) - ) - (local.set $15 - (i64.const 400) - ) - (block - (local.set $16 - (local.get $14) - ) - (local.set $17 - (i32.wrap_i64 - (local.get $15) - ) - ) - (i32.store8 offset=3 - (local.get $16) - (local.get $17) - ) - (i32.store8 offset=4 - (local.get $16) - (i32.shr_u - (local.get $17) - (i32.const 8) - ) - ) - (i32.store8 offset=5 - (local.get $16) - (i32.shr_u - (local.get $17) - (i32.const 16) - ) - ) - (i32.store8 offset=6 - (local.get $16) - (i32.shr_u - (local.get $17) - (i32.const 24) - ) - ) - ) - (block - (local.set $18 - (local.get $14) - ) - (local.set $19 - (i32.wrap_i64 - (i64.shr_u - (local.get $15) - (i64.const 32) - ) - ) - ) - (i32.store8 offset=7 - (local.get $18) - (local.get $19) - ) - (i32.store8 offset=8 - (local.get $18) - (i32.shr_u - (local.get $19) - (i32.const 8) - ) - ) - (i32.store8 offset=9 - (local.get $18) - (i32.shr_u - (local.get $19) - (i32.const 16) - ) - ) - (i32.store8 offset=10 - (local.get $18) - (i32.shr_u - (local.get $19) - (i32.const 24) - ) - ) - ) - ) - (block - (local.set $20 - (i32.const 20) - ) - (local.set $21 - (i32.wrap_i64 - (i64.const 600) - ) - ) - (i32.store8 - (local.get $20) - (local.get $21) - ) - (i32.store8 offset=1 - (local.get $20) - (i32.shr_u - (local.get $21) - (i32.const 8) - ) - ) - ) - (block - (local.set $22 - (i32.const 20) - ) - (local.set $23 - (i32.wrap_i64 - (i64.const 700) - ) - ) - (i32.store8 - (local.get $22) - (local.get $23) - ) - (i32.store8 offset=1 - (local.get $22) - (i32.shr_u - (local.get $23) - (i32.const 8) - ) - ) - (i32.store8 offset=2 - (local.get $22) - (i32.shr_u - (local.get $23) - (i32.const 16) - ) - ) - (i32.store8 offset=3 - (local.get $22) - (i32.shr_u - (local.get $23) - (i32.const 24) - ) - ) - ) - ) - (func $f32-store - (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (block - (local.set $0 - (i32.const 12) - ) - (local.set $1 - (i32.reinterpret_f32 - (f32.const 100) - ) - ) - (i32.store8 - (local.get $0) - (local.get $1) - ) - (i32.store8 offset=1 - (local.get $0) - (i32.shr_u - (local.get $1) - (i32.const 8) - ) - ) - (i32.store8 offset=2 - (local.get $0) - (i32.shr_u - (local.get $1) - (i32.const 16) - ) - ) - (i32.store8 offset=3 - (local.get $0) - (i32.shr_u - (local.get $1) - (i32.const 24) - ) - ) - ) - (block - (local.set $2 - (i32.const 16) - ) - (local.set $3 - (i32.reinterpret_f32 - (f32.const 200) - ) - ) - (i32.store16 - (local.get $2) - (local.get $3) - ) - (i32.store16 offset=2 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 16) - ) - ) - ) - (block - (local.set $4 - (i32.const 24) - ) - (local.set $5 - (i32.reinterpret_f32 - (f32.const 400) - ) - ) - (i32.store8 offset=3 - (local.get $4) - (local.get $5) - ) - (i32.store8 offset=4 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 8) - ) - ) - (i32.store8 offset=5 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 16) - ) - ) - (i32.store8 offset=6 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 24) - ) - ) - ) - ) - (func $f64-store - (local $0 i32) - (local $1 i64) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i64) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i64) - (local $14 i32) - (local $15 i64) - (local $16 i32) - (local $17 i32) - (local $18 i32) - (local $19 i32) - (block - (local.set $0 - (i32.const 12) - ) - (local.set $1 - (i64.reinterpret_f64 - (f64.const 100) - ) - ) - (block - (local.set $2 - (local.get $0) - ) - (local.set $3 - (i32.wrap_i64 - (local.get $1) - ) - ) - (i32.store8 - (local.get $2) - (local.get $3) - ) - (i32.store8 offset=1 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 8) - ) - ) - (i32.store8 offset=2 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 16) - ) - ) - (i32.store8 offset=3 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 24) - ) - ) - ) - (block - (local.set $4 - (local.get $0) - ) - (local.set $5 - (i32.wrap_i64 - (i64.shr_u - (local.get $1) - (i64.const 32) - ) - ) - ) - (i32.store8 offset=4 - (local.get $4) - (local.get $5) - ) - (i32.store8 offset=5 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 8) - ) - ) - (i32.store8 offset=6 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 16) - ) - ) - (i32.store8 offset=7 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 24) - ) - ) - ) - ) - (block - (local.set $6 - (i32.const 16) - ) - (local.set $7 - (i64.reinterpret_f64 - (f64.const 200) - ) - ) - (block - (local.set $8 - (local.get $6) - ) - (local.set $9 - (i32.wrap_i64 - (local.get $7) - ) - ) - (i32.store16 - (local.get $8) - (local.get $9) - ) - (i32.store16 offset=2 - (local.get $8) - (i32.shr_u - (local.get $9) - (i32.const 16) - ) - ) - ) - (block - (local.set $10 - (local.get $6) - ) - (local.set $11 - (i32.wrap_i64 - (i64.shr_u - (local.get $7) - (i64.const 32) - ) - ) - ) - (i32.store16 offset=4 - (local.get $10) - (local.get $11) - ) - (i32.store16 offset=6 - (local.get $10) - (i32.shr_u - (local.get $11) - (i32.const 16) - ) - ) - ) - ) - (block - (local.set $12 - (i32.const 20) - ) - (local.set $13 - (i64.reinterpret_f64 - (f64.const 300) - ) - ) - (i32.store - (local.get $12) - (i32.wrap_i64 - (local.get $13) - ) - ) - (i32.store offset=4 - (local.get $12) - (i32.wrap_i64 - (i64.shr_u - (local.get $13) - (i64.const 32) - ) - ) - ) - ) - (block - (local.set $14 - (i32.const 24) - ) - (local.set $15 - (i64.reinterpret_f64 - (f64.const 400) - ) - ) - (block - (local.set $16 - (local.get $14) - ) - (local.set $17 - (i32.wrap_i64 - (local.get $15) - ) - ) - (i32.store8 offset=3 - (local.get $16) - (local.get $17) - ) - (i32.store8 offset=4 - (local.get $16) - (i32.shr_u - (local.get $17) - (i32.const 8) - ) - ) - (i32.store8 offset=5 - (local.get $16) - (i32.shr_u - (local.get $17) - (i32.const 16) - ) - ) - (i32.store8 offset=6 - (local.get $16) - (i32.shr_u - (local.get $17) - (i32.const 24) - ) - ) - ) - (block - (local.set $18 - (local.get $14) - ) - (local.set $19 - (i32.wrap_i64 - (i64.shr_u - (local.get $15) - (i64.const 32) - ) - ) - ) - (i32.store8 offset=7 - (local.get $18) - (local.get $19) - ) - (i32.store8 offset=8 - (local.get $18) - (i32.shr_u - (local.get $19) - (i32.const 8) - ) - ) - (i32.store8 offset=9 - (local.get $18) - (i32.shr_u - (local.get $19) - (i32.const 16) - ) - ) - (i32.store8 offset=10 - (local.get $18) - (i32.shr_u - (local.get $19) - (i32.const 24) - ) - ) - ) - ) - ) -) diff --git a/test/passes/alignment-lowering.wast b/test/passes/alignment-lowering.wast deleted file mode 100644 index bbfdd5cb2..000000000 --- a/test/passes/alignment-lowering.wast +++ /dev/null @@ -1,103 +0,0 @@ -(module - (memory $0 1 1) - (func $func_4 - (drop (i32.load (i32.const 4))) - (drop (i32.load align=1 (i32.const 4))) - (drop (i32.load align=2 (i32.const 4))) - (drop (i32.load align=4 (i32.const 4))) - (drop (i32.load offset=100 (i32.const 4))) - (drop (i32.load offset=100 align=1 (i32.const 4))) - (drop (i32.load offset=100 align=2 (i32.const 4))) - (drop (i32.load offset=100 align=4 (i32.const 4))) - (drop (i32.load offset=100 align=1 (unreachable))) - (i32.store (i32.const 4) (i32.const 8)) - (i32.store align=1 (i32.const 4) (i32.const 8)) - (i32.store align=2 (i32.const 4) (i32.const 8)) - (i32.store align=4 (i32.const 4) (i32.const 8)) - (i32.store offset=100 (i32.const 4) (i32.const 8)) - (i32.store offset=100 align=1 (i32.const 4) (i32.const 8)) - (i32.store offset=100 align=2 (i32.const 4) (i32.const 8)) - (i32.store offset=100 align=4 (i32.const 4) (i32.const 8)) - (i32.store offset=100 align=1 (unreachable) (i32.const 8)) - (i32.store offset=100 align=1 (i32.const 4) (unreachable)) - ) - (func $func_2 - (drop (i32.load16_u (i32.const 4))) - (drop (i32.load16_u align=1 (i32.const 4))) - (drop (i32.load16_u align=2 (i32.const 4))) - (drop (i32.load16_u offset=100 (i32.const 4))) - (drop (i32.load16_u offset=100 align=1 (i32.const 4))) - (drop (i32.load16_u offset=100 align=2 (i32.const 4))) - (drop (i32.load16_u offset=100 align=1 (unreachable))) - (i32.store16 (i32.const 4) (i32.const 8)) - (i32.store16 align=1 (i32.const 4) (i32.const 8)) - (i32.store16 align=2 (i32.const 4) (i32.const 8)) - (i32.store16 offset=100 (i32.const 4) (i32.const 8)) - (i32.store16 offset=100 align=1 (i32.const 4) (i32.const 8)) - (i32.store16 offset=100 align=2 (i32.const 4) (i32.const 8)) - (i32.store16 offset=100 align=1 (unreachable) (i32.const 8)) - (i32.store16 offset=100 align=1 (i32.const 4) (unreachable)) - ) - (func $func_1 - (drop (i32.load8_u (i32.const 4))) - (drop (i32.load8_u align=1 (i32.const 4))) - (drop (i32.load8_u offset=100 (i32.const 4))) - (drop (i32.load8_u offset=100 align=1 (i32.const 4))) - (drop (i32.load8_u offset=100 align=1 (unreachable))) - (i32.store8 (i32.const 4) (i32.const 8)) - (i32.store8 align=1 (i32.const 4) (i32.const 8)) - (i32.store8 offset=100 (i32.const 4) (i32.const 8)) - (i32.store8 offset=100 align=1 (i32.const 4) (i32.const 8)) - (i32.store8 offset=100 align=1 (unreachable) (i32.const 8)) - (i32.store8 offset=100 align=1 (i32.const 4) (unreachable)) - ) - (func $func_signed - (drop (i32.load16_s (i32.const 4))) - (drop (i32.load16_s align=1 (i32.const 4))) - (drop (i32.load16_s align=2 (i32.const 4))) - (drop (i32.load16_s offset=100 (i32.const 4))) - (drop (i32.load16_s offset=100 align=1 (i32.const 4))) - (drop (i32.load16_s offset=100 align=2 (i32.const 4))) - (drop (i32.load16_s offset=100 align=1 (unreachable))) - ) - (func $i64-load - (drop (i64.load align=1 (i32.const 12))) - (drop (i64.load align=2 (i32.const 16))) - (drop (i64.load align=4 (i32.const 20))) - (drop (i64.load align=1 offset=3 (i32.const 20))) - (drop (i64.load16_s align=1 (i32.const 28))) - (drop (i64.load32_s align=1 (i32.const 32))) - (drop (i64.load16_u align=1 (i32.const 40))) - (drop (i64.load32_u align=1 (i32.const 44))) - ) - (func $f32-load - (drop (f32.load align=1 (i32.const 12))) - (drop (f32.load align=2 (i32.const 16))) - (drop (f32.load align=1 offset=3 (i32.const 20))) - ) - (func $f64-load - (drop (f64.load align=1 (i32.const 12))) - (drop (f64.load align=2 (i32.const 16))) - (drop (f64.load align=4 (i32.const 20))) - (drop (f64.load align=1 offset=3 (i32.const 20))) - ) - (func $i64-store - (i64.store align=1 (i32.const 12) (i64.const 100)) - (i64.store align=2 (i32.const 16) (i64.const 200)) - (i64.store align=4 (i32.const 20) (i64.const 300)) - (i64.store align=1 offset=3 (i32.const 24) (i64.const 400)) - (i64.store16 align=1 (i32.const 20) (i64.const 600)) - (i64.store32 align=1 (i32.const 20) (i64.const 700)) - ) - (func $f32-store - (f32.store align=1 (i32.const 12) (f32.const 100)) - (f32.store align=2 (i32.const 16) (f32.const 200)) - (f32.store align=1 offset=3 (i32.const 24) (f32.const 400)) - ) - (func $f64-store - (f64.store align=1 (i32.const 12) (f64.const 100)) - (f64.store align=2 (i32.const 16) (f64.const 200)) - (f64.store align=4 (i32.const 20) (f64.const 300)) - (f64.store align=1 offset=3 (i32.const 24) (f64.const 400)) - ) -) diff --git a/test/passes/alignment-lowering64.passes b/test/passes/alignment-lowering64.passes deleted file mode 100644 index 7a5b6600a..000000000 --- a/test/passes/alignment-lowering64.passes +++ /dev/null @@ -1 +0,0 @@ -alignment-lowering_enable-memory64 diff --git a/test/passes/alignment-lowering64.txt b/test/passes/alignment-lowering64.txt deleted file mode 100644 index 31f6fd368..000000000 --- a/test/passes/alignment-lowering64.txt +++ /dev/null @@ -1,1948 +0,0 @@ -(module - (type $none_=>_none (func)) - (memory $0 i64 1 1) - (func $func_4 - (local $0 i64) - (local $1 i64) - (local $2 i64) - (local $3 i64) - (local $4 i64) - (local $5 i32) - (local $6 i64) - (local $7 i32) - (local $8 i64) - (local $9 i32) - (local $10 i64) - (local $11 i32) - (drop - (i32.load - (i64.const 4) - ) - ) - (drop - (block (result i32) - (local.set $0 - (i64.const 4) - ) - (i32.or - (i32.or - (i32.load8_u - (local.get $0) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $0) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=2 - (local.get $0) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=3 - (local.get $0) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (drop - (block (result i32) - (local.set $1 - (i64.const 4) - ) - (i32.or - (i32.load16_u - (local.get $1) - ) - (i32.shl - (i32.load16_u offset=2 - (local.get $1) - ) - (i32.const 16) - ) - ) - ) - ) - (drop - (i32.load - (i64.const 4) - ) - ) - (drop - (i32.load offset=100 - (i64.const 4) - ) - ) - (drop - (block (result i32) - (local.set $2 - (i64.const 4) - ) - (i32.or - (i32.or - (i32.load8_u offset=100 - (local.get $2) - ) - (i32.shl - (i32.load8_u offset=101 - (local.get $2) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=102 - (local.get $2) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=103 - (local.get $2) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (drop - (block (result i32) - (local.set $3 - (i64.const 4) - ) - (i32.or - (i32.load16_u offset=100 - (local.get $3) - ) - (i32.shl - (i32.load16_u offset=102 - (local.get $3) - ) - (i32.const 16) - ) - ) - ) - ) - (drop - (i32.load offset=100 - (i64.const 4) - ) - ) - (drop - (unreachable) - ) - (i32.store - (i64.const 4) - (i32.const 8) - ) - (block - (local.set $4 - (i64.const 4) - ) - (local.set $5 - (i32.const 8) - ) - (i32.store8 - (local.get $4) - (local.get $5) - ) - (i32.store8 offset=1 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 8) - ) - ) - (i32.store8 offset=2 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 16) - ) - ) - (i32.store8 offset=3 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 24) - ) - ) - ) - (block - (local.set $6 - (i64.const 4) - ) - (local.set $7 - (i32.const 8) - ) - (i32.store16 - (local.get $6) - (local.get $7) - ) - (i32.store16 offset=2 - (local.get $6) - (i32.shr_u - (local.get $7) - (i32.const 16) - ) - ) - ) - (i32.store - (i64.const 4) - (i32.const 8) - ) - (i32.store offset=100 - (i64.const 4) - (i32.const 8) - ) - (block - (local.set $8 - (i64.const 4) - ) - (local.set $9 - (i32.const 8) - ) - (i32.store8 offset=100 - (local.get $8) - (local.get $9) - ) - (i32.store8 offset=101 - (local.get $8) - (i32.shr_u - (local.get $9) - (i32.const 8) - ) - ) - (i32.store8 offset=102 - (local.get $8) - (i32.shr_u - (local.get $9) - (i32.const 16) - ) - ) - (i32.store8 offset=103 - (local.get $8) - (i32.shr_u - (local.get $9) - (i32.const 24) - ) - ) - ) - (block - (local.set $10 - (i64.const 4) - ) - (local.set $11 - (i32.const 8) - ) - (i32.store16 offset=100 - (local.get $10) - (local.get $11) - ) - (i32.store16 offset=102 - (local.get $10) - (i32.shr_u - (local.get $11) - (i32.const 16) - ) - ) - ) - (i32.store offset=100 - (i64.const 4) - (i32.const 8) - ) - (block - (drop - (unreachable) - ) - (drop - (i32.const 8) - ) - ) - (block - (drop - (i64.const 4) - ) - (drop - (unreachable) - ) - ) - ) - (func $func_2 - (local $0 i64) - (local $1 i64) - (local $2 i64) - (local $3 i32) - (local $4 i64) - (local $5 i32) - (drop - (i32.load16_u - (i64.const 4) - ) - ) - (drop - (block (result i32) - (local.set $0 - (i64.const 4) - ) - (i32.or - (i32.load8_u - (local.get $0) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $0) - ) - (i32.const 8) - ) - ) - ) - ) - (drop - (i32.load16_u - (i64.const 4) - ) - ) - (drop - (i32.load16_u offset=100 - (i64.const 4) - ) - ) - (drop - (block (result i32) - (local.set $1 - (i64.const 4) - ) - (i32.or - (i32.load8_u offset=100 - (local.get $1) - ) - (i32.shl - (i32.load8_u offset=101 - (local.get $1) - ) - (i32.const 8) - ) - ) - ) - ) - (drop - (i32.load16_u offset=100 - (i64.const 4) - ) - ) - (drop - (unreachable) - ) - (i32.store16 - (i64.const 4) - (i32.const 8) - ) - (block - (local.set $2 - (i64.const 4) - ) - (local.set $3 - (i32.const 8) - ) - (i32.store8 - (local.get $2) - (local.get $3) - ) - (i32.store8 offset=1 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 8) - ) - ) - ) - (i32.store16 - (i64.const 4) - (i32.const 8) - ) - (i32.store16 offset=100 - (i64.const 4) - (i32.const 8) - ) - (block - (local.set $4 - (i64.const 4) - ) - (local.set $5 - (i32.const 8) - ) - (i32.store8 offset=100 - (local.get $4) - (local.get $5) - ) - (i32.store8 offset=101 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 8) - ) - ) - ) - (i32.store16 offset=100 - (i64.const 4) - (i32.const 8) - ) - (block - (drop - (unreachable) - ) - (drop - (i32.const 8) - ) - ) - (block - (drop - (i64.const 4) - ) - (drop - (unreachable) - ) - ) - ) - (func $func_1 - (drop - (i32.load8_u - (i64.const 4) - ) - ) - (drop - (i32.load8_u - (i64.const 4) - ) - ) - (drop - (i32.load8_u offset=100 - (i64.const 4) - ) - ) - (drop - (i32.load8_u offset=100 - (i64.const 4) - ) - ) - (drop - (unreachable) - ) - (i32.store8 - (i64.const 4) - (i32.const 8) - ) - (i32.store8 - (i64.const 4) - (i32.const 8) - ) - (i32.store8 offset=100 - (i64.const 4) - (i32.const 8) - ) - (i32.store8 offset=100 - (i64.const 4) - (i32.const 8) - ) - (block - (drop - (unreachable) - ) - (drop - (i32.const 8) - ) - ) - (block - (drop - (i64.const 4) - ) - (drop - (unreachable) - ) - ) - ) - (func $func_signed - (local $0 i64) - (local $1 i64) - (drop - (i32.load16_s - (i64.const 4) - ) - ) - (drop - (block (result i32) - (local.set $0 - (i64.const 4) - ) - (i32.shr_s - (i32.shl - (i32.or - (i32.load8_u - (local.get $0) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $0) - ) - (i32.const 8) - ) - ) - (i32.const 16) - ) - (i32.const 16) - ) - ) - ) - (drop - (i32.load16_s - (i64.const 4) - ) - ) - (drop - (i32.load16_s offset=100 - (i64.const 4) - ) - ) - (drop - (block (result i32) - (local.set $1 - (i64.const 4) - ) - (i32.shr_s - (i32.shl - (i32.or - (i32.load8_u offset=100 - (local.get $1) - ) - (i32.shl - (i32.load8_u offset=101 - (local.get $1) - ) - (i32.const 8) - ) - ) - (i32.const 16) - ) - (i32.const 16) - ) - ) - ) - (drop - (i32.load16_s offset=100 - (i64.const 4) - ) - ) - (drop - (unreachable) - ) - ) - (func $i64-load - (local $0 i64) - (local $1 i64) - (local $2 i64) - (local $3 i64) - (local $4 i64) - (local $5 i64) - (local $6 i64) - (local $7 i64) - (local $8 i64) - (local $9 i64) - (local $10 i64) - (local $11 i64) - (local $12 i64) - (local $13 i64) - (drop - (block (result i64) - (local.set $0 - (i64.const 12) - ) - (i64.or - (i64.extend_i32_u - (block (result i32) - (local.set $1 - (local.get $0) - ) - (i32.or - (i32.or - (i32.load8_u - (local.get $1) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $1) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=2 - (local.get $1) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=3 - (local.get $1) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.shl - (i64.extend_i32_u - (block (result i32) - (local.set $2 - (local.get $0) - ) - (i32.or - (i32.or - (i32.load8_u offset=4 - (local.get $2) - ) - (i32.shl - (i32.load8_u offset=5 - (local.get $2) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=6 - (local.get $2) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=7 - (local.get $2) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.const 32) - ) - ) - ) - ) - (drop - (block (result i64) - (local.set $3 - (i64.const 16) - ) - (i64.or - (i64.extend_i32_u - (block (result i32) - (local.set $4 - (local.get $3) - ) - (i32.or - (i32.load16_u - (local.get $4) - ) - (i32.shl - (i32.load16_u offset=2 - (local.get $4) - ) - (i32.const 16) - ) - ) - ) - ) - (i64.shl - (i64.extend_i32_u - (block (result i32) - (local.set $5 - (local.get $3) - ) - (i32.or - (i32.load16_u offset=4 - (local.get $5) - ) - (i32.shl - (i32.load16_u offset=6 - (local.get $5) - ) - (i32.const 16) - ) - ) - ) - ) - (i64.const 32) - ) - ) - ) - ) - (drop - (block (result i64) - (local.set $6 - (i64.const 20) - ) - (i64.or - (i64.extend_i32_u - (i32.load - (local.get $6) - ) - ) - (i64.shl - (i64.extend_i32_u - (i32.load offset=4 - (local.get $6) - ) - ) - (i64.const 32) - ) - ) - ) - ) - (drop - (block (result i64) - (local.set $7 - (i64.const 20) - ) - (i64.or - (i64.extend_i32_u - (block (result i32) - (local.set $8 - (local.get $7) - ) - (i32.or - (i32.or - (i32.load8_u offset=3 - (local.get $8) - ) - (i32.shl - (i32.load8_u offset=4 - (local.get $8) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=5 - (local.get $8) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=6 - (local.get $8) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.shl - (i64.extend_i32_u - (block (result i32) - (local.set $9 - (local.get $7) - ) - (i32.or - (i32.or - (i32.load8_u offset=7 - (local.get $9) - ) - (i32.shl - (i32.load8_u offset=8 - (local.get $9) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=9 - (local.get $9) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=10 - (local.get $9) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.const 32) - ) - ) - ) - ) - (drop - (i64.extend_i32_s - (block (result i32) - (local.set $10 - (i64.const 28) - ) - (i32.shr_s - (i32.shl - (i32.or - (i32.load8_u - (local.get $10) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $10) - ) - (i32.const 8) - ) - ) - (i32.const 16) - ) - (i32.const 16) - ) - ) - ) - ) - (drop - (i64.extend_i32_s - (block (result i32) - (local.set $11 - (i64.const 32) - ) - (i32.or - (i32.or - (i32.load8_u - (local.get $11) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $11) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=2 - (local.get $11) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=3 - (local.get $11) - ) - (i32.const 24) - ) - ) - ) - ) - ) - ) - (drop - (i64.extend_i32_u - (block (result i32) - (local.set $12 - (i64.const 40) - ) - (i32.or - (i32.load8_u - (local.get $12) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $12) - ) - (i32.const 8) - ) - ) - ) - ) - ) - (drop - (i64.extend_i32_u - (block (result i32) - (local.set $13 - (i64.const 44) - ) - (i32.or - (i32.or - (i32.load8_u - (local.get $13) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $13) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=2 - (local.get $13) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=3 - (local.get $13) - ) - (i32.const 24) - ) - ) - ) - ) - ) - ) - ) - (func $f32-load - (local $0 i64) - (local $1 i64) - (local $2 i64) - (drop - (f32.reinterpret_i32 - (block (result i32) - (local.set $0 - (i64.const 12) - ) - (i32.or - (i32.or - (i32.load8_u - (local.get $0) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $0) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=2 - (local.get $0) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=3 - (local.get $0) - ) - (i32.const 24) - ) - ) - ) - ) - ) - ) - (drop - (f32.reinterpret_i32 - (block (result i32) - (local.set $1 - (i64.const 16) - ) - (i32.or - (i32.load16_u - (local.get $1) - ) - (i32.shl - (i32.load16_u offset=2 - (local.get $1) - ) - (i32.const 16) - ) - ) - ) - ) - ) - (drop - (f32.reinterpret_i32 - (block (result i32) - (local.set $2 - (i64.const 20) - ) - (i32.or - (i32.or - (i32.load8_u offset=3 - (local.get $2) - ) - (i32.shl - (i32.load8_u offset=4 - (local.get $2) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=5 - (local.get $2) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=6 - (local.get $2) - ) - (i32.const 24) - ) - ) - ) - ) - ) - ) - ) - (func $f64-load - (local $0 i64) - (local $1 i64) - (local $2 i64) - (local $3 i64) - (local $4 i64) - (local $5 i64) - (local $6 i64) - (local $7 i64) - (local $8 i64) - (local $9 i64) - (drop - (f64.reinterpret_i64 - (block (result i64) - (local.set $0 - (i64.const 12) - ) - (i64.or - (i64.extend_i32_u - (block (result i32) - (local.set $1 - (local.get $0) - ) - (i32.or - (i32.or - (i32.load8_u - (local.get $1) - ) - (i32.shl - (i32.load8_u offset=1 - (local.get $1) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=2 - (local.get $1) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=3 - (local.get $1) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.shl - (i64.extend_i32_u - (block (result i32) - (local.set $2 - (local.get $0) - ) - (i32.or - (i32.or - (i32.load8_u offset=4 - (local.get $2) - ) - (i32.shl - (i32.load8_u offset=5 - (local.get $2) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=6 - (local.get $2) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=7 - (local.get $2) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.const 32) - ) - ) - ) - ) - ) - (drop - (f64.reinterpret_i64 - (block (result i64) - (local.set $3 - (i64.const 16) - ) - (i64.or - (i64.extend_i32_u - (block (result i32) - (local.set $4 - (local.get $3) - ) - (i32.or - (i32.load16_u - (local.get $4) - ) - (i32.shl - (i32.load16_u offset=2 - (local.get $4) - ) - (i32.const 16) - ) - ) - ) - ) - (i64.shl - (i64.extend_i32_u - (block (result i32) - (local.set $5 - (local.get $3) - ) - (i32.or - (i32.load16_u offset=4 - (local.get $5) - ) - (i32.shl - (i32.load16_u offset=6 - (local.get $5) - ) - (i32.const 16) - ) - ) - ) - ) - (i64.const 32) - ) - ) - ) - ) - ) - (drop - (f64.reinterpret_i64 - (block (result i64) - (local.set $6 - (i64.const 20) - ) - (i64.or - (i64.extend_i32_u - (i32.load - (local.get $6) - ) - ) - (i64.shl - (i64.extend_i32_u - (i32.load offset=4 - (local.get $6) - ) - ) - (i64.const 32) - ) - ) - ) - ) - ) - (drop - (f64.reinterpret_i64 - (block (result i64) - (local.set $7 - (i64.const 20) - ) - (i64.or - (i64.extend_i32_u - (block (result i32) - (local.set $8 - (local.get $7) - ) - (i32.or - (i32.or - (i32.load8_u offset=3 - (local.get $8) - ) - (i32.shl - (i32.load8_u offset=4 - (local.get $8) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=5 - (local.get $8) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=6 - (local.get $8) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.shl - (i64.extend_i32_u - (block (result i32) - (local.set $9 - (local.get $7) - ) - (i32.or - (i32.or - (i32.load8_u offset=7 - (local.get $9) - ) - (i32.shl - (i32.load8_u offset=8 - (local.get $9) - ) - (i32.const 8) - ) - ) - (i32.or - (i32.shl - (i32.load8_u offset=9 - (local.get $9) - ) - (i32.const 16) - ) - (i32.shl - (i32.load8_u offset=10 - (local.get $9) - ) - (i32.const 24) - ) - ) - ) - ) - ) - (i64.const 32) - ) - ) - ) - ) - ) - ) - (func $i64-store - (local $0 i64) - (local $1 i64) - (local $2 i64) - (local $3 i32) - (local $4 i64) - (local $5 i32) - (local $6 i64) - (local $7 i64) - (local $8 i64) - (local $9 i32) - (local $10 i64) - (local $11 i32) - (local $12 i64) - (local $13 i64) - (local $14 i64) - (local $15 i64) - (local $16 i64) - (local $17 i32) - (local $18 i64) - (local $19 i32) - (local $20 i64) - (local $21 i32) - (local $22 i64) - (local $23 i32) - (block - (local.set $0 - (i64.const 12) - ) - (local.set $1 - (i64.const 100) - ) - (block - (local.set $2 - (local.get $0) - ) - (local.set $3 - (i32.wrap_i64 - (local.get $1) - ) - ) - (i32.store8 - (local.get $2) - (local.get $3) - ) - (i32.store8 offset=1 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 8) - ) - ) - (i32.store8 offset=2 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 16) - ) - ) - (i32.store8 offset=3 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 24) - ) - ) - ) - (block - (local.set $4 - (local.get $0) - ) - (local.set $5 - (i32.wrap_i64 - (i64.shr_u - (local.get $1) - (i64.const 32) - ) - ) - ) - (i32.store8 offset=4 - (local.get $4) - (local.get $5) - ) - (i32.store8 offset=5 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 8) - ) - ) - (i32.store8 offset=6 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 16) - ) - ) - (i32.store8 offset=7 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 24) - ) - ) - ) - ) - (block - (local.set $6 - (i64.const 16) - ) - (local.set $7 - (i64.const 200) - ) - (block - (local.set $8 - (local.get $6) - ) - (local.set $9 - (i32.wrap_i64 - (local.get $7) - ) - ) - (i32.store16 - (local.get $8) - (local.get $9) - ) - (i32.store16 offset=2 - (local.get $8) - (i32.shr_u - (local.get $9) - (i32.const 16) - ) - ) - ) - (block - (local.set $10 - (local.get $6) - ) - (local.set $11 - (i32.wrap_i64 - (i64.shr_u - (local.get $7) - (i64.const 32) - ) - ) - ) - (i32.store16 offset=4 - (local.get $10) - (local.get $11) - ) - (i32.store16 offset=6 - (local.get $10) - (i32.shr_u - (local.get $11) - (i32.const 16) - ) - ) - ) - ) - (block - (local.set $12 - (i64.const 20) - ) - (local.set $13 - (i64.const 300) - ) - (i32.store - (local.get $12) - (i32.wrap_i64 - (local.get $13) - ) - ) - (i32.store offset=4 - (local.get $12) - (i32.wrap_i64 - (i64.shr_u - (local.get $13) - (i64.const 32) - ) - ) - ) - ) - (block - (local.set $14 - (i64.const 24) - ) - (local.set $15 - (i64.const 400) - ) - (block - (local.set $16 - (local.get $14) - ) - (local.set $17 - (i32.wrap_i64 - (local.get $15) - ) - ) - (i32.store8 offset=3 - (local.get $16) - (local.get $17) - ) - (i32.store8 offset=4 - (local.get $16) - (i32.shr_u - (local.get $17) - (i32.const 8) - ) - ) - (i32.store8 offset=5 - (local.get $16) - (i32.shr_u - (local.get $17) - (i32.const 16) - ) - ) - (i32.store8 offset=6 - (local.get $16) - (i32.shr_u - (local.get $17) - (i32.const 24) - ) - ) - ) - (block - (local.set $18 - (local.get $14) - ) - (local.set $19 - (i32.wrap_i64 - (i64.shr_u - (local.get $15) - (i64.const 32) - ) - ) - ) - (i32.store8 offset=7 - (local.get $18) - (local.get $19) - ) - (i32.store8 offset=8 - (local.get $18) - (i32.shr_u - (local.get $19) - (i32.const 8) - ) - ) - (i32.store8 offset=9 - (local.get $18) - (i32.shr_u - (local.get $19) - (i32.const 16) - ) - ) - (i32.store8 offset=10 - (local.get $18) - (i32.shr_u - (local.get $19) - (i32.const 24) - ) - ) - ) - ) - (block - (local.set $20 - (i64.const 20) - ) - (local.set $21 - (i32.wrap_i64 - (i64.const 600) - ) - ) - (i32.store8 - (local.get $20) - (local.get $21) - ) - (i32.store8 offset=1 - (local.get $20) - (i32.shr_u - (local.get $21) - (i32.const 8) - ) - ) - ) - (block - (local.set $22 - (i64.const 20) - ) - (local.set $23 - (i32.wrap_i64 - (i64.const 700) - ) - ) - (i32.store8 - (local.get $22) - (local.get $23) - ) - (i32.store8 offset=1 - (local.get $22) - (i32.shr_u - (local.get $23) - (i32.const 8) - ) - ) - (i32.store8 offset=2 - (local.get $22) - (i32.shr_u - (local.get $23) - (i32.const 16) - ) - ) - (i32.store8 offset=3 - (local.get $22) - (i32.shr_u - (local.get $23) - (i32.const 24) - ) - ) - ) - ) - (func $f32-store - (local $0 i64) - (local $1 i32) - (local $2 i64) - (local $3 i32) - (local $4 i64) - (local $5 i32) - (block - (local.set $0 - (i64.const 12) - ) - (local.set $1 - (i32.reinterpret_f32 - (f32.const 100) - ) - ) - (i32.store8 - (local.get $0) - (local.get $1) - ) - (i32.store8 offset=1 - (local.get $0) - (i32.shr_u - (local.get $1) - (i32.const 8) - ) - ) - (i32.store8 offset=2 - (local.get $0) - (i32.shr_u - (local.get $1) - (i32.const 16) - ) - ) - (i32.store8 offset=3 - (local.get $0) - (i32.shr_u - (local.get $1) - (i32.const 24) - ) - ) - ) - (block - (local.set $2 - (i64.const 16) - ) - (local.set $3 - (i32.reinterpret_f32 - (f32.const 200) - ) - ) - (i32.store16 - (local.get $2) - (local.get $3) - ) - (i32.store16 offset=2 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 16) - ) - ) - ) - (block - (local.set $4 - (i64.const 24) - ) - (local.set $5 - (i32.reinterpret_f32 - (f32.const 400) - ) - ) - (i32.store8 offset=3 - (local.get $4) - (local.get $5) - ) - (i32.store8 offset=4 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 8) - ) - ) - (i32.store8 offset=5 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 16) - ) - ) - (i32.store8 offset=6 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 24) - ) - ) - ) - ) - (func $f64-store - (local $0 i64) - (local $1 i64) - (local $2 i64) - (local $3 i32) - (local $4 i64) - (local $5 i32) - (local $6 i64) - (local $7 i64) - (local $8 i64) - (local $9 i32) - (local $10 i64) - (local $11 i32) - (local $12 i64) - (local $13 i64) - (local $14 i64) - (local $15 i64) - (local $16 i64) - (local $17 i32) - (local $18 i64) - (local $19 i32) - (block - (local.set $0 - (i64.const 12) - ) - (local.set $1 - (i64.reinterpret_f64 - (f64.const 100) - ) - ) - (block - (local.set $2 - (local.get $0) - ) - (local.set $3 - (i32.wrap_i64 - (local.get $1) - ) - ) - (i32.store8 - (local.get $2) - (local.get $3) - ) - (i32.store8 offset=1 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 8) - ) - ) - (i32.store8 offset=2 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 16) - ) - ) - (i32.store8 offset=3 - (local.get $2) - (i32.shr_u - (local.get $3) - (i32.const 24) - ) - ) - ) - (block - (local.set $4 - (local.get $0) - ) - (local.set $5 - (i32.wrap_i64 - (i64.shr_u - (local.get $1) - (i64.const 32) - ) - ) - ) - (i32.store8 offset=4 - (local.get $4) - (local.get $5) - ) - (i32.store8 offset=5 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 8) - ) - ) - (i32.store8 offset=6 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 16) - ) - ) - (i32.store8 offset=7 - (local.get $4) - (i32.shr_u - (local.get $5) - (i32.const 24) - ) - ) - ) - ) - (block - (local.set $6 - (i64.const 16) - ) - (local.set $7 - (i64.reinterpret_f64 - (f64.const 200) - ) - ) - (block - (local.set $8 - (local.get $6) - ) - (local.set $9 - (i32.wrap_i64 - (local.get $7) - ) - ) - (i32.store16 - (local.get $8) - (local.get $9) - ) - (i32.store16 offset=2 - (local.get $8) - (i32.shr_u - (local.get $9) - (i32.const 16) - ) - ) - ) - (block - (local.set $10 - (local.get $6) - ) - (local.set $11 - (i32.wrap_i64 - (i64.shr_u - (local.get $7) - (i64.const 32) - ) - ) - ) - (i32.store16 offset=4 - (local.get $10) - (local.get $11) - ) - (i32.store16 offset=6 - (local.get $10) - (i32.shr_u - (local.get $11) - (i32.const 16) - ) - ) - ) - ) - (block - (local.set $12 - (i64.const 20) - ) - (local.set $13 - (i64.reinterpret_f64 - (f64.const 300) - ) - ) - (i32.store - (local.get $12) - (i32.wrap_i64 - (local.get $13) - ) - ) - (i32.store offset=4 - (local.get $12) - (i32.wrap_i64 - (i64.shr_u - (local.get $13) - (i64.const 32) - ) - ) - ) - ) - (block - (local.set $14 - (i64.const 24) - ) - (local.set $15 - (i64.reinterpret_f64 - (f64.const 400) - ) - ) - (block - (local.set $16 - (local.get $14) - ) - (local.set $17 - (i32.wrap_i64 - (local.get $15) - ) - ) - (i32.store8 offset=3 - (local.get $16) - (local.get $17) - ) - (i32.store8 offset=4 - (local.get $16) - (i32.shr_u - (local.get $17) - (i32.const 8) - ) - ) - (i32.store8 offset=5 - (local.get $16) - (i32.shr_u - (local.get $17) - (i32.const 16) - ) - ) - (i32.store8 offset=6 - (local.get $16) - (i32.shr_u - (local.get $17) - (i32.const 24) - ) - ) - ) - (block - (local.set $18 - (local.get $14) - ) - (local.set $19 - (i32.wrap_i64 - (i64.shr_u - (local.get $15) - (i64.const 32) - ) - ) - ) - (i32.store8 offset=7 - (local.get $18) - (local.get $19) - ) - (i32.store8 offset=8 - (local.get $18) - (i32.shr_u - (local.get $19) - (i32.const 8) - ) - ) - (i32.store8 offset=9 - (local.get $18) - (i32.shr_u - (local.get $19) - (i32.const 16) - ) - ) - (i32.store8 offset=10 - (local.get $18) - (i32.shr_u - (local.get $19) - (i32.const 24) - ) - ) - ) - ) - ) -) diff --git a/test/passes/alignment-lowering64.wast b/test/passes/alignment-lowering64.wast deleted file mode 100644 index c31eb8256..000000000 --- a/test/passes/alignment-lowering64.wast +++ /dev/null @@ -1,103 +0,0 @@ -(module - (memory $0 i64 1 1) - (func $func_4 - (drop (i32.load (i64.const 4))) - (drop (i32.load align=1 (i64.const 4))) - (drop (i32.load align=2 (i64.const 4))) - (drop (i32.load align=4 (i64.const 4))) - (drop (i32.load offset=100 (i64.const 4))) - (drop (i32.load offset=100 align=1 (i64.const 4))) - (drop (i32.load offset=100 align=2 (i64.const 4))) - (drop (i32.load offset=100 align=4 (i64.const 4))) - (drop (i32.load offset=100 align=1 (unreachable))) - (i32.store (i64.const 4) (i32.const 8)) - (i32.store align=1 (i64.const 4) (i32.const 8)) - (i32.store align=2 (i64.const 4) (i32.const 8)) - (i32.store align=4 (i64.const 4) (i32.const 8)) - (i32.store offset=100 (i64.const 4) (i32.const 8)) - (i32.store offset=100 align=1 (i64.const 4) (i32.const 8)) - (i32.store offset=100 align=2 (i64.const 4) (i32.const 8)) - (i32.store offset=100 align=4 (i64.const 4) (i32.const 8)) - (i32.store offset=100 align=1 (unreachable) (i32.const 8)) - (i32.store offset=100 align=1 (i64.const 4) (unreachable)) - ) - (func $func_2 - (drop (i32.load16_u (i64.const 4))) - (drop (i32.load16_u align=1 (i64.const 4))) - (drop (i32.load16_u align=2 (i64.const 4))) - (drop (i32.load16_u offset=100 (i64.const 4))) - (drop (i32.load16_u offset=100 align=1 (i64.const 4))) - (drop (i32.load16_u offset=100 align=2 (i64.const 4))) - (drop (i32.load16_u offset=100 align=1 (unreachable))) - (i32.store16 (i64.const 4) (i32.const 8)) - (i32.store16 align=1 (i64.const 4) (i32.const 8)) - (i32.store16 align=2 (i64.const 4) (i32.const 8)) - (i32.store16 offset=100 (i64.const 4) (i32.const 8)) - (i32.store16 offset=100 align=1 (i64.const 4) (i32.const 8)) - (i32.store16 offset=100 align=2 (i64.const 4) (i32.const 8)) - (i32.store16 offset=100 align=1 (unreachable) (i32.const 8)) - (i32.store16 offset=100 align=1 (i64.const 4) (unreachable)) - ) - (func $func_1 - (drop (i32.load8_u (i64.const 4))) - (drop (i32.load8_u align=1 (i64.const 4))) - (drop (i32.load8_u offset=100 (i64.const 4))) - (drop (i32.load8_u offset=100 align=1 (i64.const 4))) - (drop (i32.load8_u offset=100 align=1 (unreachable))) - (i32.store8 (i64.const 4) (i32.const 8)) - (i32.store8 align=1 (i64.const 4) (i32.const 8)) - (i32.store8 offset=100 (i64.const 4) (i32.const 8)) - (i32.store8 offset=100 align=1 (i64.const 4) (i32.const 8)) - (i32.store8 offset=100 align=1 (unreachable) (i32.const 8)) - (i32.store8 offset=100 align=1 (i64.const 4) (unreachable)) - ) - (func $func_signed - (drop (i32.load16_s (i64.const 4))) - (drop (i32.load16_s align=1 (i64.const 4))) - (drop (i32.load16_s align=2 (i64.const 4))) - (drop (i32.load16_s offset=100 (i64.const 4))) - (drop (i32.load16_s offset=100 align=1 (i64.const 4))) - (drop (i32.load16_s offset=100 align=2 (i64.const 4))) - (drop (i32.load16_s offset=100 align=1 (unreachable))) - ) - (func $i64-load - (drop (i64.load align=1 (i64.const 12))) - (drop (i64.load align=2 (i64.const 16))) - (drop (i64.load align=4 (i64.const 20))) - (drop (i64.load align=1 offset=3 (i64.const 20))) - (drop (i64.load16_s align=1 (i64.const 28))) - (drop (i64.load32_s align=1 (i64.const 32))) - (drop (i64.load16_u align=1 (i64.const 40))) - (drop (i64.load32_u align=1 (i64.const 44))) - ) - (func $f32-load - (drop (f32.load align=1 (i64.const 12))) - (drop (f32.load align=2 (i64.const 16))) - (drop (f32.load align=1 offset=3 (i64.const 20))) - ) - (func $f64-load - (drop (f64.load align=1 (i64.const 12))) - (drop (f64.load align=2 (i64.const 16))) - (drop (f64.load align=4 (i64.const 20))) - (drop (f64.load align=1 offset=3 (i64.const 20))) - ) - (func $i64-store - (i64.store align=1 (i64.const 12) (i64.const 100)) - (i64.store align=2 (i64.const 16) (i64.const 200)) - (i64.store align=4 (i64.const 20) (i64.const 300)) - (i64.store align=1 offset=3 (i64.const 24) (i64.const 400)) - (i64.store16 align=1 (i64.const 20) (i64.const 600)) - (i64.store32 align=1 (i64.const 20) (i64.const 700)) - ) - (func $f32-store - (f32.store align=1 (i64.const 12) (f32.const 100)) - (f32.store align=2 (i64.const 16) (f32.const 200)) - (f32.store align=1 offset=3 (i64.const 24) (f32.const 400)) - ) - (func $f64-store - (f64.store align=1 (i64.const 12) (f64.const 100)) - (f64.store align=2 (i64.const 16) (f64.const 200)) - (f64.store align=4 (i64.const 20) (f64.const 300)) - (f64.store align=1 offset=3 (i64.const 24) (f64.const 400)) - ) -) diff --git a/test/passes/avoid-reinterprets.txt b/test/passes/avoid-reinterprets.txt deleted file mode 100644 index d14484460..000000000 --- a/test/passes/avoid-reinterprets.txt +++ /dev/null @@ -1,182 +0,0 @@ -(module - (type $none_=>_none (func)) - (type $none_=>_f32 (func (result f32))) - (memory $0 1) - (func $simple - (drop - (f32.load - (i32.const 1024) - ) - ) - (drop - (i32.load - (i32.const 1024) - ) - ) - (drop - (f64.load - (i32.const 1024) - ) - ) - (drop - (i64.load - (i32.const 1024) - ) - ) - ) - (func $one - (local $x i32) - (local $1 i32) - (local $2 f32) - (local.set $x - (block (result i32) - (local.set $1 - (i32.const 1024) - ) - (local.set $2 - (f32.load - (local.get $1) - ) - ) - (i32.load - (local.get $1) - ) - ) - ) - (drop - (local.get $2) - ) - ) - (func $one-b - (local $x f32) - (local $1 i32) - (local $2 i32) - (local.set $x - (block (result f32) - (local.set $1 - (i32.const 1024) - ) - (local.set $2 - (i32.load - (local.get $1) - ) - ) - (f32.load - (local.get $1) - ) - ) - ) - (drop - (local.get $2) - ) - ) - (func $both - (local $x i32) - (local $1 i32) - (local $2 f32) - (local.set $x - (block (result i32) - (local.set $1 - (i32.const 1024) - ) - (local.set $2 - (f32.load - (local.get $1) - ) - ) - (i32.load - (local.get $1) - ) - ) - ) - (drop - (local.get $2) - ) - (drop - (local.get $2) - ) - ) - (func $half - (local $x i32) - (local $1 i32) - (local $2 f32) - (local.set $x - (block (result i32) - (local.set $1 - (i32.const 1024) - ) - (local.set $2 - (f32.load - (local.get $1) - ) - ) - (i32.load - (local.get $1) - ) - ) - ) - (drop - (local.get $x) - ) - (drop - (local.get $2) - ) - ) - (func $copy - (local $x i32) - (local $y i32) - (local $2 i32) - (local $3 f32) - (local.set $x - (block (result i32) - (local.set $2 - (i32.const 1024) - ) - (local.set $3 - (f32.load - (local.get $2) - ) - ) - (i32.load - (local.get $2) - ) - ) - ) - (local.set $y - (local.get $x) - ) - (drop - (local.get $3) - ) - ) - (func $partial1 (result f32) - (f32.reinterpret_i32 - (i32.load16_u - (i32.const 3) - ) - ) - ) - (func $partial2 (result f32) - (f32.reinterpret_i32 - (i32.load8_u - (i32.const 3) - ) - ) - ) - (func $nofallthrough - (local $x i32) - (local.set $x - (i32.load - (i32.const 1024) - ) - ) - (drop - (f32.reinterpret_i32 - (block $block (result i32) - (nop) - (local.get $x) - ) - ) - ) - ) -) diff --git a/test/passes/avoid-reinterprets.wast b/test/passes/avoid-reinterprets.wast deleted file mode 100644 index 068df437c..000000000 --- a/test/passes/avoid-reinterprets.wast +++ /dev/null @@ -1,69 +0,0 @@ -(module - (memory 1) - (func $simple - (drop (f32.reinterpret_i32 (i32.load (i32.const 1024)))) - (drop (i32.reinterpret_f32 (f32.load (i32.const 1024)))) - (drop (f64.reinterpret_i64 (i64.load (i32.const 1024)))) - (drop (i64.reinterpret_f64 (f64.load (i32.const 1024)))) - ) - (func $one - (local $x i32) - (local.set $x (i32.load (i32.const 1024))) - (drop (f32.reinterpret_i32 (local.get $x))) - ) - (func $one-b - (local $x f32) - (local.set $x (f32.load (i32.const 1024))) - (drop (i32.reinterpret_f32 (local.get $x))) - ) - (func $both - (local $x i32) - (local.set $x (i32.load (i32.const 1024))) - (drop (f32.reinterpret_i32 (local.get $x))) - (drop (f32.reinterpret_i32 (local.get $x))) - ) - (func $half - (local $x i32) - (local.set $x (i32.load (i32.const 1024))) - (drop (local.get $x)) - (drop (f32.reinterpret_i32 (local.get $x))) - ) - (func $copy - (local $x i32) - (local $y i32) - (local.set $x (i32.load (i32.const 1024))) - (local.set $y (local.get $x)) - (drop (f32.reinterpret_i32 (local.get $y))) - ) - (func $partial1 (result f32) - (f32.reinterpret_i32 - (i32.load16_u - (i32.const 3) - ) - ) - ) - (func $partial2 (result f32) - (f32.reinterpret_i32 - (i32.load8_u - (i32.const 3) - ) - ) - ) - (func $nofallthrough - (local $x i32) - (local.set $x - (i32.load - (i32.const 1024) - ) - ) - (drop - (f32.reinterpret_i32 - (block (result i32) - (nop) ;; this would be removed by other opts, but in general, we can't - ;; just look at the fallthrough, as we can't just remove code here - (local.get $x) - ) - ) - ) - ) -) diff --git a/test/passes/avoid-reinterprets64.passes b/test/passes/avoid-reinterprets64.passes deleted file mode 100644 index c562577f7..000000000 --- a/test/passes/avoid-reinterprets64.passes +++ /dev/null @@ -1 +0,0 @@ -avoid-reinterprets_enable-memory64 diff --git a/test/passes/avoid-reinterprets64.txt b/test/passes/avoid-reinterprets64.txt deleted file mode 100644 index 1b6f05948..000000000 --- a/test/passes/avoid-reinterprets64.txt +++ /dev/null @@ -1,182 +0,0 @@ -(module - (type $none_=>_none (func)) - (type $none_=>_f32 (func (result f32))) - (memory $0 i64 1) - (func $simple - (drop - (f32.load - (i64.const 1024) - ) - ) - (drop - (i32.load - (i64.const 1024) - ) - ) - (drop - (f64.load - (i64.const 1024) - ) - ) - (drop - (i64.load - (i64.const 1024) - ) - ) - ) - (func $one - (local $x i32) - (local $1 i64) - (local $2 f32) - (local.set $x - (block (result i32) - (local.set $1 - (i64.const 1024) - ) - (local.set $2 - (f32.load - (local.get $1) - ) - ) - (i32.load - (local.get $1) - ) - ) - ) - (drop - (local.get $2) - ) - ) - (func $one-b - (local $x f32) - (local $1 i64) - (local $2 i32) - (local.set $x - (block (result f32) - (local.set $1 - (i64.const 1024) - ) - (local.set $2 - (i32.load - (local.get $1) - ) - ) - (f32.load - (local.get $1) - ) - ) - ) - (drop - (local.get $2) - ) - ) - (func $both - (local $x i32) - (local $1 i64) - (local $2 f32) - (local.set $x - (block (result i32) - (local.set $1 - (i64.const 1024) - ) - (local.set $2 - (f32.load - (local.get $1) - ) - ) - (i32.load - (local.get $1) - ) - ) - ) - (drop - (local.get $2) - ) - (drop - (local.get $2) - ) - ) - (func $half - (local $x i32) - (local $1 i64) - (local $2 f32) - (local.set $x - (block (result i32) - (local.set $1 - (i64.const 1024) - ) - (local.set $2 - (f32.load - (local.get $1) - ) - ) - (i32.load - (local.get $1) - ) - ) - ) - (drop - (local.get $x) - ) - (drop - (local.get $2) - ) - ) - (func $copy - (local $x i32) - (local $y i32) - (local $2 i64) - (local $3 f32) - (local.set $x - (block (result i32) - (local.set $2 - (i64.const 1024) - ) - (local.set $3 - (f32.load - (local.get $2) - ) - ) - (i32.load - (local.get $2) - ) - ) - ) - (local.set $y - (local.get $x) - ) - (drop - (local.get $3) - ) - ) - (func $partial1 (result f32) - (f32.reinterpret_i32 - (i32.load16_u - (i64.const 3) - ) - ) - ) - (func $partial2 (result f32) - (f32.reinterpret_i32 - (i32.load8_u - (i64.const 3) - ) - ) - ) - (func $nofallthrough - (local $x i32) - (local.set $x - (i32.load - (i64.const 1024) - ) - ) - (drop - (f32.reinterpret_i32 - (block $block (result i32) - (nop) - (local.get $x) - ) - ) - ) - ) -) diff --git a/test/passes/avoid-reinterprets64.wast b/test/passes/avoid-reinterprets64.wast deleted file mode 100644 index cfc1843de..000000000 --- a/test/passes/avoid-reinterprets64.wast +++ /dev/null @@ -1,69 +0,0 @@ -(module - (memory i64 1) - (func $simple - (drop (f32.reinterpret_i32 (i32.load (i64.const 1024)))) - (drop (i32.reinterpret_f32 (f32.load (i64.const 1024)))) - (drop (f64.reinterpret_i64 (i64.load (i64.const 1024)))) - (drop (i64.reinterpret_f64 (f64.load (i64.const 1024)))) - ) - (func $one - (local $x i32) - (local.set $x (i32.load (i64.const 1024))) - (drop (f32.reinterpret_i32 (local.get $x))) - ) - (func $one-b - (local $x f32) - (local.set $x (f32.load (i64.const 1024))) - (drop (i32.reinterpret_f32 (local.get $x))) - ) - (func $both - (local $x i32) - (local.set $x (i32.load (i64.const 1024))) - (drop (f32.reinterpret_i32 (local.get $x))) - (drop (f32.reinterpret_i32 (local.get $x))) - ) - (func $half - (local $x i32) - (local.set $x (i32.load (i64.const 1024))) - (drop (local.get $x)) - (drop (f32.reinterpret_i32 (local.get $x))) - ) - (func $copy - (local $x i32) - (local $y i32) - (local.set $x (i32.load (i64.const 1024))) - (local.set $y (local.get $x)) - (drop (f32.reinterpret_i32 (local.get $y))) - ) - (func $partial1 (result f32) - (f32.reinterpret_i32 - (i32.load16_u - (i64.const 3) - ) - ) - ) - (func $partial2 (result f32) - (f32.reinterpret_i32 - (i32.load8_u - (i64.const 3) - ) - ) - ) - (func $nofallthrough - (local $x i32) - (local.set $x - (i32.load - (i64.const 1024) - ) - ) - (drop - (f32.reinterpret_i32 - (block (result i32) - (nop) ;; this would be removed by other opts, but in general, we can't - ;; just look at the fallthrough, as we can't just remove code here - (local.get $x) - ) - ) - ) - ) -) |