tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit ab38a0d28b97a40990366f47ce0c9f1373945e04
parent 7076134fd1bf9a8603ceafbdca199d2a5df52a15
Author: Hannes Verschore <hv1989@gmail.com>
Date:   Thu, 18 Dec 2025 16:07:14 +0000

Bug 1999828: Part 7 - Add tests. r=iain

Differential Revision: https://phabricator.services.mozilla.com/D274208

Diffstat:
Ajs/src/jit-test/tests/cacheir/guard-shape-to-offset-list.js | 27+++++++++++++++++++++++++++
Ajs/src/jit-test/tests/cacheir/ion-store-load-from-offset-scalar.js | 19+++++++++++++++++++
Ajs/src/jit-test/tests/cacheir/ion-store-load-from-offset.js | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ajs/src/jit-test/tests/cacheir/ops-guard-shapelist-to-offset.js | 37+++++++++++++++++++++++++++++++++++++
Ajs/src/jit-test/tests/cacheir/ops-using-from-offset.js | 29+++++++++++++++++++++++++++++
Ajs/src/jit-test/tests/cacheir/stored-dynamic-slot-from-offset.js | 34++++++++++++++++++++++++++++++++++
Ajs/src/jit-test/tests/cacheir/stored-fixed-slot-from-offset.js | 28++++++++++++++++++++++++++++
7 files changed, 232 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,27 @@ +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-scalar.js b/js/src/jit-test/tests/cacheir/ion-store-load-from-offset-scalar.js @@ -0,0 +1,19 @@ +// |jit-test| --ion-offthread-compile=off; +// +function test(k) { + + var a = {z:0, a:0, b:1, c:2, d:3, e:4, f:5, g:6, h:7, i:8, j:9, k:10}; + if (k%2 == 0) { + a.l = 1; + } else { + a.m = 1; + a.l = 1; + } + + return a.l; +} + +// LoadDynamicSlotFromOffset +for (let i=0; i<1000; i++) { + test(i); +} 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();