| ;; NOTE: Assertions have been generated by update_lit_checks.py --all-items and should not be edited. |
| |
| ;; RUN: foreach %s %t wasm-opt --memory64-lowering --enable-memory64 --enable-reference-types --enable-bulk-memory -S -o - | filecheck %s |
| |
| ;; Test that table.copy with mixed 32/64-bit tables correctly handles the |
| ;; size operand type. |
| (module |
| ;; CHECK: (type $0 (func)) |
| |
| ;; CHECK: (table $t64 10 funcref) |
| (table $t64 i64 10 funcref) |
| ;; CHECK: (table $t32 10 funcref) |
| (table $t32 10 funcref) |
| |
| ;; CHECK: (func $table-copy-mixed-64-to-32 |
| ;; CHECK-NEXT: (table.copy $t32 $t64 |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i32.wrap_i64 |
| ;; CHECK-NEXT: (i64.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.const 5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $table-copy-mixed-64-to-32 |
| ;; Copy from 64-bit table to 32-bit table. The size is i32 because not |
| ;; both tables are 64-bit, so no wrapping of size should occur. |
| (table.copy $t32 $t64 (i32.const 0) (i64.const 0) (i32.const 5)) |
| ) |
| |
| ;; CHECK: (func $table-copy-mixed-32-to-64 |
| ;; CHECK-NEXT: (table.copy $t64 $t32 |
| ;; CHECK-NEXT: (i32.wrap_i64 |
| ;; CHECK-NEXT: (i64.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.const 0) |
| ;; CHECK-NEXT: (i32.const 5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $table-copy-mixed-32-to-64 |
| ;; Copy from 32-bit table to 64-bit table. The size is i32 because not |
| ;; both tables are 64-bit, so no wrapping of size should occur. |
| (table.copy $t64 $t32 (i64.const 0) (i32.const 0) (i32.const 5)) |
| ) |
| |
| ;; CHECK: (func $table-copy-both-64 |
| ;; CHECK-NEXT: (table.copy $t64 $t64 |
| ;; CHECK-NEXT: (i32.wrap_i64 |
| ;; CHECK-NEXT: (i64.const 0) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.wrap_i64 |
| ;; CHECK-NEXT: (i64.const 5) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: (i32.wrap_i64 |
| ;; CHECK-NEXT: (i64.const 3) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| ;; CHECK-NEXT: ) |
| (func $table-copy-both-64 |
| ;; Copy between same 64-bit table. All operands including size are i64 |
| ;; and should be wrapped. |
| (table.copy $t64 $t64 (i64.const 0) (i64.const 5) (i64.const 3)) |
| ) |
| ) |