summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/wasm/regress/bug1770335.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/wasm/regress/bug1770335.js')
-rw-r--r--js/src/jit-test/tests/wasm/regress/bug1770335.js33
1 files changed, 33 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/regress/bug1770335.js b/js/src/jit-test/tests/wasm/regress/bug1770335.js
new file mode 100644
index 0000000000..569d7bd35e
--- /dev/null
+++ b/js/src/jit-test/tests/wasm/regress/bug1770335.js
@@ -0,0 +1,33 @@
+// |jit-test| skip-if: !wasmSimdEnabled()
+
+// Check if GVN indentifies two non-indentical shuffles. During value numbering
+// the control field/data might look the same. Shuffle or permute kind, and
+// operands order have to be taking into account during value numbering.
+// If GVN fails to recognize the following shuffles as different, the v128.xor
+// produces zero output.
+var ins = wasmEvalText(`(module
+ (memory (export "memory") 1 1)
+ (func $test (param v128) (result v128)
+ local.get 0
+ v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000
+ i8x16.shuffle 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
+ v128.const i32x4 0x00000000 0x00000000 0x00000000 0x00000000
+ local.get 0
+ i8x16.shuffle 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
+ v128.xor
+ )
+ (func (export "run")
+ i32.const 16
+ i32.const 0
+ v128.load
+ call $test
+ v128.store
+ )
+)`);
+
+const mem64 = new BigInt64Array(ins.exports.memory.buffer, 0, 4);
+mem64[0] = 0x123456789n;
+mem64[1] = -0xFDCBA000n;
+ins.exports.run();
+assertEq(mem64[2], -0xFDCBA000n);
+assertEq(mem64[3], 0x123456789n);