Add CacheIR support for calling getters on primitive values
Categories
(Core :: JavaScript Engine: JIT, enhancement, P1)
Tracking
()
Tracking | Status | |
---|---|---|
firefox68 | --- | fixed |
People
(Reporter: anba, Assigned: anba)
Details
Attachments
(1 file)
Neither Ion nor CacheIR support calling getters on primitive values, which makes the access to Symbol.prototype.description
really slow in comparison to JSC and V8. As a first step we should add CacheIR support here.
µ-benchmark:
if (typeof dateNow === "undefined") {
if (typeof preciseTime === "function") {
dateNow = () => preciseTime() * 1000;
} else if (typeof performance === "object" && typeof performance.now ===
"function") {
dateNow = performance.now;
} else {
dateNow = Date.now;
}
}
function f() {
var xs = [
Symbol(""),
Symbol(""),
];
var q = 0;
var t = dateNow();
for (var i = 0; i < 1000000; ++i) {
q += xs[i & 1].description.length;
}
return [dateNow() - t, q]
}
Engine | Time |
---|---|
SM | ~300ms |
SM (with patch) | 25ms |
JSC | 12ms |
V8 | 8ms |
Assignee | ||
Comment 1•2 years ago
|
||
Updated•2 years ago
|
Assignee | ||
Comment 2•2 years ago
|
||
Try: https://treeherder.mozilla.org/#/jobs?repo=try&revision=b8c886c458f7a0f5d2b76df65de51cce5c58a894
Pushed by dluca@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/1f47ae47ceac
Add CacheIR support for calling getters on primitive values. r=mgaudet
Comment 4•2 years ago
|
||
Backed out changeset 1f47ae47ceac (bug 1546383) for Spidermonkey failures in js\src\jit-test\tests\cacheir\getter-primitive-value.js. CLOSED TREE
Log:
https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=244938670&repo=autoland&lineNumber=13495
Push with failures:
https://treeherder.mozilla.org/#/jobs?repo=autoland&revision=1f47ae47ceacd9bb1df12c3dd8987b93bd44f608
Backout:
https://hg.mozilla.org/integration/autoland/rev/f776e9e5e817c9f1acd0451e915042089e80ce14
Assignee | ||
Comment 5•2 years ago
|
||
Running the builds linked at comment #4 locally, I see the following assertion:
C:\Users\andre\Downloads\target.jsshell>js.exe --ion-eager ..\cacheir-getter-primitive.js
Assertion failure: !availableRegs_.empty(), at z:/build/build/src/js/src/jit/CacheIRCompiler.cpp:422
So there are too few registers available on 32-bit builds. New try build: https://treeherder.mozilla.org/#/jobs?repo=try&revision=d72f1838dd432fbfbdd65c9ddd672552942d06f2
Pushed by nbeleuzu@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/15178f63cc19
Add CacheIR support for calling getters on primitive values. r=mgaudet
Comment 8•2 years ago
|
||
bugherder |
Description
•