Add a new class to extract tracelogger data using chunked buffers and use this to write the data out to the profiler JSON output. Copying the data in chunks lets us minimize our memory overhead when writing out to the profiler so a large array of millions of elements does not need to be allocated ahead of time.
Differential Revision: https://phabricator.services.mozilla.com/D11791
--HG--
extra : moz-landing-system : lando
We now emit JSOP_CALLEE or JSOP_ENVCALLEE (a new op) to load the callee.
JSOP_SUPERFUN and JSOP_SUPERBASE no longer have to walk the scope/environment
chain.
Differential Revision: https://phabricator.services.mozilla.com/D13688
--HG--
extra : moz-landing-system : lando
This was added in bug 833076 because back then TypeScript::SetThis assumed
non-null script->types. However since bug 875276 we don't need this anymore.
Differential Revision: https://phabricator.services.mozilla.com/D13652
--HG--
extra : moz-landing-system : lando
This is just a minor optimization, but it makes the bug fixed by part 2
reproducible when running jit-tests.
Differential Revision: https://phabricator.services.mozilla.com/D13650
--HG--
extra : moz-landing-system : lando
Ensure that "a instanceof b" has Xray semantics, i.e. that when b is a
XrayWrapper, that the wrapped object's getters, `Symbol.hasInstance`
hook and proxy traps are not triggered.
The toolkit/components/mozintl/test/test_mozintlhelper.js test was
updated to explicitly waive Xrays, instead of relying on the previous
behavior where Xrays were automatically waived.
Depends on D11591
Depends on D11591
Differential Revision: https://phabricator.services.mozilla.com/D11592
--HG--
extra : moz-landing-system : lando
There is currently no public API to call the 'instanceof' handler
without triggering proxies. The public method, JS_HasInstance, may
skip the default logic if a class has a non-null JSHasInstanceOp.
(i.e. js/src/proxy/Proxy.cpp and js/src/ctypes/CTypes.cpp ).
To serve the need of the next patch (which needs to trigger the
instanceof logic without triggering the proxy), this patch publishes the
js::InstanceofOperator method.
JS::InstanceOfOperator is the new name, and the new capitalization
matches the name of the abstract operation in the ES6 specification.
Differential Revision: https://phabricator.services.mozilla.com/D11591
--HG--
extra : moz-landing-system : lando
BaseStackFrame is split into two parts:
- BaseStackFrameAllocator is now responsible for dealing with stack
allocation and deallocation in all complex cases (which means
everything except for the simple native masm.Push and masm.Pop
cases).
- What's left of BaseStackFrame is then a simple-to-use API for the
rest of the compiler that maintains and checks invariants and does
various kinds of bookkeeping and hides the remaining differences
between the chunky and non-chunky stacks.
The latter class inherits from the former because this is simplest
(and it's easy to accomplish with 'protected').
There are a couple of minor functional changes here:
- The variable maxFramePushed_ now actually records the maximum value
of masm.framePushed, not the maximum stack height. The new behavior
is correct even with the chunky stack, since this value is used for
stack overflow checking. There should however be no observable
changes because of this. (Trivial reason: only ARM64 is affected
and we have no ARM64 products. Deeper reason: stacks are aligned at
coarser boundaries than our stack chunks, and have lots of headroom.)
- Member variables tracking the stack height are now set up in a new
method, onFixedStackAllocated(), which is called after
beginFunction() has allocated the space for the Header and Local
areas of the frame. The old behavior was correct but very obscure.
The new code is easier to understand.
--HG--
extra : rebase_source : b3a06eb2a845a76c671d3060fa9e77cb0e4e4b69
We rely on TypedObjects for the experimental wasm GC feature, but that
feature is Nightly-only and we should not be touching TypedObjects if
we don't need them. Furthermore we should just fail to compile
outright if wasm GC is enabled but TypedObjects are not.
--HG--
extra : rebase_source : e76a01ea25158aa6d3bd8760339e06be41dbba80
ICEntries and the fallback stub space are now stored in ICScript. The ICScript*
is stored in TypeScript to not increase sizeof(JSScript).
We need this for bug 1499324 but it also lets us greatly simplify the
BaselineDebugModeOSR code as this patch shows.
Note: some ICScript method definitions are still in BaselineJIT.cpp instead of
BaselineIC.cpp to make this patch easier to review. We could move them to
BaselineIC.cpp as a follow-up change.
Differential Revision: https://phabricator.services.mozilla.com/D11746
--HG--
extra : moz-landing-system : lando
This spewer design has two goals:
1. Provide a spew mechanism that has first-class support for slicing and
dicing output. This means that filtering by script and channel should be
the dominant output mechanism.
2. Provide a simple powerful mechanism for getting information out of the
compiler and into tools. I'm inspired by tools like CacheIR analyzer,
IR Hydra, and the upcoming tracelogger integration into perf.html.
Differential Revision: https://phabricator.services.mozilla.com/D11787
--HG--
extra : moz-landing-system : lando
This is a best effort attempt at ensuring that the adverse impact of
reformatting the entire tree over the comments would be minimal. I've used a
combination of strategies including disabling of formatting, some manual
formatting and some changes to formatting to work around some clang-format
limitations.
Differential Revision: https://phabricator.services.mozilla.com/D13193
--HG--
extra : moz-landing-system : lando
These macros tend to be handled quite poorly since the clang-format
tokenizer cannot figure out how to handle them.
Differential Revision: https://phabricator.services.mozilla.com/D13179
--HG--
extra : moz-landing-system : lando