From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- js/src/jit-test/tests/ion/getprop-primitive.js | 59 ++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 js/src/jit-test/tests/ion/getprop-primitive.js (limited to 'js/src/jit-test/tests/ion/getprop-primitive.js') diff --git a/js/src/jit-test/tests/ion/getprop-primitive.js b/js/src/jit-test/tests/ion/getprop-primitive.js new file mode 100644 index 0000000000..d85ba11f10 --- /dev/null +++ b/js/src/jit-test/tests/ion/getprop-primitive.js @@ -0,0 +1,59 @@ +// |jit-test| --ion-warmup-threshold=50 +setJitCompilerOption("offthread-compilation.enable", 0); +gcPreserveCode(); + +var testSet1 = [1, "", Symbol("a"), true]; +var testSet2 = [1, "", Symbol("a"), true, { bar: 5 }]; + +Number.prototype.bar = 1; +String.prototype.bar = 2; +Symbol.prototype.bar = 3; +Boolean.prototype.bar = 4; + +function assertEqIf(prev, curr, expected) { + // Branch pruning absolutely want to get rid of the next branch + // which causes bailouts, so we forbid inlining of this function. + with({}){} + if (prev) { + assertEq(curr, expected); + return false; + } + return true; +} + +var f; +var template = function (set) { + var lastX = 0, x = 0, i = 0, y = 0; + var cont = true; + while (cont) { // OSR here. + for (var i = 0; i < set.length; i++) { + x = x + (inIon() ? 1 : 0); + if (set[i].placeholder != set[(i + 1) % set.length].placeholder) + y += 1; + } + + // If we bailout in the inner loop, then x will have a smaller value + // than the number of iterations. + cont = assertEqIf(lastX > 0, x, set.length); + if (inIon()) + lastX = x; + x = 0; + } + return y; +} + +// Set 1, Non existing properties. +f = eval(`(${template})`.replace(".placeholder", ".foo")); +f(testSet1); + +// Set 2, Non existing properties. +f = eval(`(${template})`.replace(".placeholder", ".foo")); +f(testSet2); + +// Set 1, Existing properties. +f = eval(`(${template})`.replace(".placeholder", ".bar")); +f(testSet1); + +// Set 2, Existing properties. +f = eval(`(${template})`.replace(".placeholder", ".bar")); +f(testSet2); -- cgit v1.2.3