commit 437712a9e466460933a4d854eacb4d2ec87d5053
parent 374129481e266e1ed253d953ecee3182b20ac498
Author: Hannes Verschore <hv1989@gmail.com>
Date: Thu, 11 Dec 2025 22:43:13 +0000
Bug 1999828: Part 7 - Add tests. r=iain
Differential Revision: https://phabricator.services.mozilla.com/D274208
Diffstat:
6 files changed, 214 insertions(+), 0 deletions(-)
diff --git a/js/src/jit-test/tests/cacheir/guard-shape-to-offset-list.js b/js/src/jit-test/tests/cacheir/guard-shape-to-offset-list.js
@@ -0,0 +1,28 @@
+function test() {
+ var n = 3;
+ var arr = [];
+ for (var i = 0; i < n; i++) {
+ var obj = {};
+ for (var j = 0; j < i+4; j++) {
+ obj["x_" + i + "_" + j] = 1;
+ }
+ arr.push(obj);
+ }
+ for (var i = 0; i < n; i++) {
+ arr[i].a = -1;
+ arr[i].b = -1;
+ }
+
+ for (let i=0; i<10000; i++) {
+ arr[i%n].a = 0;
+ arr[i%n].b = 1;
+ }
+
+
+ for (var i = 0; i < n; i++) {
+ assertEq(arr[i].a, 0);
+ assertEq(arr[i].b, 1);
+ }
+}
+
+test();
diff --git a/js/src/jit-test/tests/cacheir/ion-store-load-from-offset.js b/js/src/jit-test/tests/cacheir/ion-store-load-from-offset.js
@@ -0,0 +1,58 @@
+// |jit-test| --ion-offthread-compile=off;
+//
+function test(arr, max) {
+
+ // LoadFixedFromOffset
+ var test = 0;
+ for (let i=0; i<20; i++) {
+ test = arr[i%max].a;
+ }
+
+ // StoreFixedFromOffset
+ var test = 0;
+ for (let i=0; i<20; i++) {
+ arr[i%max].a = i%max;
+ }
+
+ for (let i=0; i<max; i++) {
+ assertEq(arr[i].a, i);
+ }
+}
+
+var arr = [];
+arr[0] = {a:0};
+arr[1] = {b:0, a:1};
+arr[2] = {c:0, a:2};
+
+// GuardShapeListToOffset (3)
+for (let i=0; i<1000; i++) {
+ test(arr, arr.length);
+}
+
+arr[3] = {d:0, a:3};
+
+// GuardShapeListToOffset (4)
+for (let i=0; i<1000; i++) {
+ test(arr, arr.length);
+}
+
+arr[4] = {e:0, a:4};
+
+// GuardMultipleShapesToOffset (5)
+for (let i=0; i<1000; i++) {
+ test(arr, arr.length);
+}
+
+arr[5] = {f:0, a:4};
+
+// GuardMultipleShapesToOffset (6)
+for (let i=0; i<1000; i++) {
+ test(arr, arr.length);
+}
+
+arr[6] = {g:0, a:4};
+
+// GuardMultipleShapesToOffset (7)
+for (let i=0; i<1000; i++) {
+ test(arr, arr.length);
+}
diff --git a/js/src/jit-test/tests/cacheir/ops-guard-shapelist-to-offset.js b/js/src/jit-test/tests/cacheir/ops-guard-shapelist-to-offset.js
@@ -0,0 +1,37 @@
+function test() {
+ var arr = [];
+ var num = 2;
+ for (var i = 0; i < 20; i++) {
+ var obj = {};
+ for (var j = 0; j < i+4; j++) {
+ obj["x_" + i + "_" + j] = 1;
+ }
+ arr.push(obj);
+ }
+ for (var i = 0; i < arr.length; i++) {
+ arr[i].a = 0;
+ arr[i].b = -i;
+ }
+
+ for (let i=0; i<10000; i++) {
+ arr[i%num].a = i%num;
+ }
+
+ var t = 0;
+ for (let i=0; i<10000; i++) {
+ t = arr[i%num].a;
+ }
+
+ var t = 0;
+ for (let i=0; i<10000; i++) {
+ t = arr[i%num].a;
+ t = arr[i%num].b;
+ assertEq(t, -(i%num))
+ }
+
+ for (let i=0; i<num; i++) {
+ assertEq(arr[i].a, i);
+ }
+}
+
+test();
diff --git a/js/src/jit-test/tests/cacheir/ops-using-from-offset.js b/js/src/jit-test/tests/cacheir/ops-using-from-offset.js
@@ -0,0 +1,29 @@
+function test() {
+ var arr = [];
+ var num = 5;
+ for (var i = 0; i < 20; i++) {
+ var obj = {};
+ for (var j = 0; j < i+4; j++) {
+ obj["x_" + i + "_" + j] = 1;
+ }
+ arr.push(obj);
+ }
+ for (var i = 0; i < arr.length; i++) {
+ arr[i].a = 0;
+ }
+
+ for (let i=0; i<10000; i++) {
+ arr[i%num].a = i%num;
+ }
+
+ var t = 0;
+ for (let i=0; i<10000; i++) {
+ t = arr[i%num].a;
+ }
+
+ for (let i=0; i<num; i++) {
+ assertEq(arr[i].a, i);
+ }
+}
+
+test();
diff --git a/js/src/jit-test/tests/cacheir/stored-dynamic-slot-from-offset.js b/js/src/jit-test/tests/cacheir/stored-dynamic-slot-from-offset.js
@@ -0,0 +1,34 @@
+function test() {
+ var arr = [];
+ for (var i = 0; i < 20; i++) {
+ var obj = {};
+ for (var j = 0; j < i+4; j++) {
+ obj["x_" + i + "_" + j] = 1;
+ }
+ arr.push(obj);
+ }
+ for (var i = 0; i < arr.length; i++) {
+ arr[i].a = 0;
+ }
+
+ for (let i=0; i<10000; i++) {
+ arr[i%9].a = i%9;
+ }
+
+ assertEq(arr[0].a, 0);
+ assertEq(arr[1].a, 1);
+ assertEq(arr[2].a, 2);
+ assertEq(arr[3].a, 3);
+ assertEq(arr[4].a, 4);
+ assertEq(arr[5].a, 5);
+ assertEq(arr[6].a, 6);
+ assertEq(arr[7].a, 7);
+ assertEq(arr[8].a, 8);
+
+ for (let i=0; i<10000; i++) {
+ var a = arr[i%9].a;
+ assertEq(a, i%9);
+ }
+}
+
+test();
diff --git a/js/src/jit-test/tests/cacheir/stored-fixed-slot-from-offset.js b/js/src/jit-test/tests/cacheir/stored-fixed-slot-from-offset.js
@@ -0,0 +1,28 @@
+function test() {
+ var arr = [];
+ arr[0] = {a:0};
+ arr[1] = {b:0, a:0};
+ arr[2] = {c:0, a:0};
+ arr[3] = {d:0, a:0};
+ arr[4] = {e:0, a:0};
+ arr[5] = {f:0, a:0};
+ arr[6] = {g:0, a:0};
+ arr[7] = {h:0, a:0};
+ arr[8] = {i:0, a:0};
+
+ for (let i=0; i<10000; i++) {
+ arr[i%9].a = ((i%9)==8)?2:1;
+ }
+
+ assertEq(arr[0].a, 1);
+ assertEq(arr[1].a, 1);
+ assertEq(arr[2].a, 1);
+ assertEq(arr[3].a, 1);
+ assertEq(arr[4].a, 1);
+ assertEq(arr[5].a, 1);
+ assertEq(arr[6].a, 1);
+ assertEq(arr[7].a, 1);
+ assertEq(arr[8].a, 2);
+}
+
+test();