Unreviewed, rolling in r243948 with test fix
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>
2
3         Unreviewed, rolling in r243948 with test fix
4         https://bugs.webkit.org/show_bug.cgi?id=196486
5
6         * parser/ASTBuilder.h:
7         (JSC::ASTBuilder::createString):
8         * parser/Lexer.cpp:
9         (JSC::Lexer<T>::parseMultilineComment):
10         (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
11         (JSC::Lexer<T>::lex): Deleted.
12         * parser/Lexer.h:
13         (JSC::Lexer::hasLineTerminatorBeforeToken const):
14         (JSC::Lexer::setHasLineTerminatorBeforeToken):
15         (JSC::Lexer<T>::lex):
16         (JSC::Lexer::prevTerminator const): Deleted.
17         (JSC::Lexer::setTerminator): Deleted.
18         * parser/Parser.cpp:
19         (JSC::Parser<LexerType>::allowAutomaticSemicolon):
20         (JSC::Parser<LexerType>::parseSingleFunction):
21         (JSC::Parser<LexerType>::parseStatementListItem):
22         (JSC::Parser<LexerType>::maybeParseAsyncFunctionDeclarationStatement):
23         (JSC::Parser<LexerType>::parseFunctionInfo):
24         (JSC::Parser<LexerType>::parseClass):
25         (JSC::Parser<LexerType>::parseExportDeclaration):
26         (JSC::Parser<LexerType>::parseAssignmentExpression):
27         (JSC::Parser<LexerType>::parseYieldExpression):
28         (JSC::Parser<LexerType>::parseProperty):
29         (JSC::Parser<LexerType>::parsePrimaryExpression):
30         (JSC::Parser<LexerType>::parseMemberExpression):
31         * parser/Parser.h:
32         (JSC::Parser::nextWithoutClearingLineTerminator):
33         (JSC::Parser::lexCurrentTokenAgainUnderCurrentContext):
34         (JSC::Parser::internalSaveLexerState):
35         (JSC::Parser::restoreLexerState):
36
37 2019-04-08  Ryan Haddad  <ryanhaddad@apple.com>
38
39         Unreviewed, rolling out r243948.
40
41         Caused inspector/runtime/parse.html to fail
42
43         Reverted changeset:
44
45         "SIGSEGV in JSC::BytecodeGenerator::addStringConstant"
46         https://bugs.webkit.org/show_bug.cgi?id=196486
47         https://trac.webkit.org/changeset/243948
48
49 2019-04-08  Ryan Haddad  <ryanhaddad@apple.com>
50
51         Unreviewed, rolling out r243943.
52
53         Caused test262 failures.
54
55         Reverted changeset:
56
57         "[JSC] Filter DontEnum properties in
58         ProxyObject::getOwnPropertyNames()"
59         https://bugs.webkit.org/show_bug.cgi?id=176810
60         https://trac.webkit.org/changeset/243943
61
62 2019-04-08  Claudio Saavedra  <csaavedra@igalia.com>
63
64         [JSC] Partially fix the build with unified builds disabled
65         https://bugs.webkit.org/show_bug.cgi?id=196647
66
67         Reviewed by Konstantin Tokarev.
68
69         If you disable unified builds you find all kind of build
70         errors. This partially tries to fix them but there's a lot
71         more.
72
73         * API/JSBaseInternal.h:
74         * b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp:
75         * b3/air/AirHandleCalleeSaves.h:
76         * bytecode/ExecutableToCodeBlockEdge.cpp:
77         * bytecode/ExitFlag.h:
78         * bytecode/ICStatusUtils.h:
79         * bytecode/UnlinkedMetadataTable.h:
80         * dfg/DFGPureValue.h:
81         * heap/IsoAlignedMemoryAllocator.cpp:
82         * heap/IsoAlignedMemoryAllocator.h:
83
84 2019-04-08  Guillaume Emont  <guijemont@igalia.com>
85
86         Enable DFG on MIPS
87         https://bugs.webkit.org/show_bug.cgi?id=196689
88
89         Reviewed by Žan Doberšek.
90
91         Since the bytecode change, we enabled the baseline JIT on mips in
92         r240432, but DFG is still missing. With this change, all tests are
93         passing on a ci20 board.
94
95         * jit/RegisterSet.cpp:
96         (JSC::RegisterSet::calleeSaveRegisters):
97         Added s0, which is used in llint.
98
99 2019-04-08  Xan Lopez  <xan@igalia.com>
100
101         [CMake] Detect SSE2 at compile time
102         https://bugs.webkit.org/show_bug.cgi?id=196488
103
104         Reviewed by Carlos Garcia Campos.
105
106         * assembler/MacroAssemblerX86Common.cpp: Remove unnecessary (and
107         incorrect) static_assert.
108
109 2019-04-07  Michael Saboff  <msaboff@apple.com>
110
111         REGRESSION (r243642): Crash in reddit.com page
112         https://bugs.webkit.org/show_bug.cgi?id=196684
113
114         Reviewed by Geoffrey Garen.
115
116         In r243642, the code that saves and restores the count for non-greedy character classes
117         was inadvertently put inside an if statement.  This code should be generated for all
118         non-greedy character classes.
119
120         * yarr/YarrJIT.cpp:
121         (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
122         (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
123
124 2019-04-07  Yusuke Suzuki  <ysuzuki@apple.com>
125
126         [JSC] CallLinkInfo should clear Callee or CodeBlock even if it is unlinked by jettison
127         https://bugs.webkit.org/show_bug.cgi?id=196683
128
129         Reviewed by Saam Barati.
130
131         In r243626, we stop repatching CallLinkInfo when the CallLinkInfo is held by jettisoned CodeBlock.
132         But we still need to clear the Callee or CodeBlock since they are now dead. Otherwise, CodeBlock's
133         visitWeak eventually accesses this dead cells and crashes because the owner CodeBlock of CallLinkInfo
134         can be still live.
135
136         We also move all repatching operations from CallLinkInfo.cpp to Repatch.cpp for consistency because the
137         other repatching operations in CallLinkInfo are implemented in Repatch.cpp side.
138
139         * bytecode/CallLinkInfo.cpp:
140         (JSC::CallLinkInfo::setCallee):
141         (JSC::CallLinkInfo::clearCallee):
142         * jit/Repatch.cpp:
143         (JSC::linkFor):
144         (JSC::revertCall):
145
146 2019-04-05  Yusuke Suzuki  <ysuzuki@apple.com>
147
148         [JSC] OSRExit recovery for SpeculativeAdd does not consier "A = A + A" pattern
149         https://bugs.webkit.org/show_bug.cgi?id=196582
150
151         Reviewed by Saam Barati.
152
153         In DFG, our ArithAdd with overflow is executed speculatively, and we recover the value when overflow flag is set.
154         The recovery is subtracting the operand from the destination to get the original two operands. Our recovery code
155         handles A + B = A, A + B = B cases. But it misses A + A = A case (here, A and B are GPRReg). Our recovery code
156         attempts to produce the original operand by performing A - A, and it always produces zero accidentally.
157
158         This patch adds the recovery code for A + A = A case. Because we know that this ArithAdd overflows, and operands were
159         same values, we can calculate the original operand from the destination value by `((int32_t)value >> 1) ^ 0x80000000`.
160
161         We also found that FTL recovery code is dead. We remove them in this patch.
162
163         * dfg/DFGOSRExit.cpp:
164         (JSC::DFG::OSRExit::executeOSRExit):
165         (JSC::DFG::OSRExit::compileExit):
166         * dfg/DFGOSRExit.h:
167         (JSC::DFG::SpeculationRecovery::SpeculationRecovery):
168         * dfg/DFGSpeculativeJIT.cpp:
169         (JSC::DFG::SpeculativeJIT::compileArithAdd):
170         * ftl/FTLExitValue.cpp:
171         (JSC::FTL::ExitValue::dataFormat const):
172         (JSC::FTL::ExitValue::dumpInContext const):
173         * ftl/FTLExitValue.h:
174         (JSC::FTL::ExitValue::isArgument const):
175         (JSC::FTL::ExitValue::hasIndexInStackmapLocations const):
176         (JSC::FTL::ExitValue::adjustStackmapLocationsIndexByOffset):
177         (JSC::FTL::ExitValue::recovery): Deleted.
178         (JSC::FTL::ExitValue::isRecovery const): Deleted.
179         (JSC::FTL::ExitValue::leftRecoveryArgument const): Deleted.
180         (JSC::FTL::ExitValue::rightRecoveryArgument const): Deleted.
181         (JSC::FTL::ExitValue::recoveryFormat const): Deleted.
182         (JSC::FTL::ExitValue::recoveryOpcode const): Deleted.
183         * ftl/FTLLowerDFGToB3.cpp:
184         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
185         (JSC::FTL::DFG::LowerDFGToB3::preparePatchpointForExceptions):
186         (JSC::FTL::DFG::LowerDFGToB3::appendOSRExit):
187         (JSC::FTL::DFG::LowerDFGToB3::exitValueForNode):
188         (JSC::FTL::DFG::LowerDFGToB3::addAvailableRecovery): Deleted.
189         * ftl/FTLOSRExitCompiler.cpp:
190         (JSC::FTL::compileRecovery):
191
192 2019-04-05  Ryan Haddad  <ryanhaddad@apple.com>
193
194         Unreviewed, rolling out r243665.
195
196         Caused iOS JSC tests to exit with an exception.
197
198         Reverted changeset:
199
200         "Assertion failed in JSC::createError"
201         https://bugs.webkit.org/show_bug.cgi?id=196305
202         https://trac.webkit.org/changeset/243665
203
204 2019-04-05  Yusuke Suzuki  <ysuzuki@apple.com>
205
206         SIGSEGV in JSC::BytecodeGenerator::addStringConstant
207         https://bugs.webkit.org/show_bug.cgi?id=196486
208
209         Reviewed by Saam Barati.
210
211         When parsing a FunctionExpression / FunctionDeclaration etc., we use SyntaxChecker for the body of the function because we do not have any interest on the nodes of the body at that time.
212         The nodes will be parsed with the ASTBuilder when the function itself is parsed for code generation. This works well previously because all the function ends with "}" previously.
213         SyntaxChecker lexes this "}" token, and parser restores the context back to ASTBuilder and continues parsing.
214
215         But now, we have ArrowFunctionExpression without braces `arrow => expr`. Let's consider the following code.
216
217                 arrow => expr
218                 "string!"
219
220         We parse arrow function's body with SyntaxChecker. At that time, we lex "string!" token under the SyntaxChecker context. But this means that we may not build string content for this token
221         since SyntaxChecker may not have interest on string content itself in certain case. After the parser is back to ASTBuilder, we parse "string!" as ExpressionStatement with string constant,
222         generate StringNode with non-built identifier (nullptr), and we accidentally create StringNode with nullptr.
223
224         This patch fixes this problem. The root cause of this problem is that the last token lexed in the previous context is used. We add lexCurrentTokenAgainUnderCurrentContext which will re-lex
225         the current token under the current context (may be ASTBuilder). This should be done only when the caller's context is different from SyntaxChecker, which avoids unnecessary lexing.
226         We leverage existing SavePoint mechanism to implement lexCurrentTokenAgainUnderCurrentContext cleanly.
227
228         And we also fix the bug in the existing SavePoint mechanism, which is shown in the attached test script. When we save LexerState, we do not save line terminator status. This patch also introduces
229         lexWithoutClearingLineTerminator, which lex the token without clearing line terminator status.
230
231         * parser/ASTBuilder.h:
232         (JSC::ASTBuilder::createString):
233         * parser/Lexer.cpp:
234         (JSC::Lexer<T>::parseMultilineComment):
235         (JSC::Lexer<T>::lexWithoutClearingLineTerminator): EOF token also should record offset information. This offset information is correctly handled in Lexer::setOffset too.
236         (JSC::Lexer<T>::lex): Deleted.
237         * parser/Lexer.h:
238         (JSC::Lexer::hasLineTerminatorBeforeToken const):
239         (JSC::Lexer::setHasLineTerminatorBeforeToken):
240         (JSC::Lexer<T>::lex):
241         (JSC::Lexer::prevTerminator const): Deleted.
242         (JSC::Lexer::setTerminator): Deleted.
243         * parser/Parser.cpp:
244         (JSC::Parser<LexerType>::allowAutomaticSemicolon):
245         (JSC::Parser<LexerType>::parseSingleFunction):
246         (JSC::Parser<LexerType>::parseStatementListItem):
247         (JSC::Parser<LexerType>::maybeParseAsyncFunctionDeclarationStatement):
248         (JSC::Parser<LexerType>::parseFunctionInfo):
249         (JSC::Parser<LexerType>::parseClass):
250         (JSC::Parser<LexerType>::parseExportDeclaration):
251         (JSC::Parser<LexerType>::parseAssignmentExpression):
252         (JSC::Parser<LexerType>::parseYieldExpression):
253         (JSC::Parser<LexerType>::parseProperty):
254         (JSC::Parser<LexerType>::parsePrimaryExpression):
255         (JSC::Parser<LexerType>::parseMemberExpression):
256         * parser/Parser.h:
257         (JSC::Parser::nextWithoutClearingLineTerminator):
258         (JSC::Parser::lexCurrentTokenAgainUnderCurrentContext):
259         (JSC::Parser::internalSaveLexerState):
260         (JSC::Parser::restoreLexerState):
261
262 2019-04-05  Caitlin Potter  <caitp@igalia.com>
263
264         [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames()
265         https://bugs.webkit.org/show_bug.cgi?id=176810
266
267         Reviewed by Saam Barati.
268
269         This adds conditional logic following the invariant checks, to perform
270         filtering in common uses of getOwnPropertyNames.
271
272         While this would ideally only be done in JSPropertyNameEnumerator, adding
273         the filtering to ProxyObject::performGetOwnPropertyNames maintains the
274         invariant that the EnumerationMode is properly followed.
275
276         * runtime/PropertyNameArray.h:
277         (JSC::PropertyNameArray::reset):
278         * runtime/ProxyObject.cpp:
279         (JSC::ProxyObject::performGetOwnPropertyNames):
280
281 2019-04-05  Commit Queue  <commit-queue@webkit.org>
282
283         Unreviewed, rolling out r243833.
284         https://bugs.webkit.org/show_bug.cgi?id=196645
285
286         This change breaks build of WPE and GTK ports (Requested by
287         annulen on #webkit).
288
289         Reverted changeset:
290
291         "[CMake][WTF] Mirror XCode header directories"
292         https://bugs.webkit.org/show_bug.cgi?id=191662
293         https://trac.webkit.org/changeset/243833
294
295 2019-04-05  Caitlin Potter  <caitp@igalia.com>
296
297         [JSC] throw if ownKeys Proxy trap result contains duplicate keys
298         https://bugs.webkit.org/show_bug.cgi?id=185211
299
300         Reviewed by Saam Barati.
301
302         Implements the normative spec change in https://github.com/tc39/ecma262/pull/833
303
304         This involves tracking duplicate keys returned from the ownKeys trap in yet
305         another HashTable, and may incur a minor performance penalty in some cases. This
306         is not expected to significantly affect web performance.
307
308         * runtime/ProxyObject.cpp:
309         (JSC::ProxyObject::performGetOwnPropertyNames):
310
311 2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>
312
313         [JSC] makeBoundFunction should not assume incoming "length" value is Int32 because it performs some calculation in bytecode
314         https://bugs.webkit.org/show_bug.cgi?id=196631
315
316         Reviewed by Saam Barati.
317
318         makeBoundFunction assumes that "length" argument is always Int32. But this should not be done since this "length" value is calculated in builtin JS code.
319         DFG may store this value in Double format so that we should not rely on that this value is Int32. This patch fixes makeBoundFunction function to perform
320         toInt32 operation. We also insert a missing exception check for `JSString::value(ExecState*)` in makeBoundFunction.
321
322         * JavaScriptCore.xcodeproj/project.pbxproj:
323         * Sources.txt:
324         * interpreter/CallFrameInlines.h:
325         * runtime/DoublePredictionFuzzerAgent.cpp: Copied from Source/JavaScriptCore/interpreter/CallFrameInlines.h.
326         (JSC::DoublePredictionFuzzerAgent::DoublePredictionFuzzerAgent):
327         (JSC::DoublePredictionFuzzerAgent::getPrediction):
328         * runtime/DoublePredictionFuzzerAgent.h: Copied from Source/JavaScriptCore/interpreter/CallFrameInlines.h.
329         * runtime/JSGlobalObject.cpp:
330         (JSC::makeBoundFunction):
331         * runtime/Options.h:
332         * runtime/VM.cpp:
333         (JSC::VM::VM):
334
335 2019-04-04  Robin Morisset  <rmorisset@apple.com>
336
337         B3ReduceStrength should know that Mul distributes over Add and Sub
338         https://bugs.webkit.org/show_bug.cgi?id=196325
339         <rdar://problem/49441650>
340
341         Reviewed by Saam Barati.
342
343         Fix some obviously wrong code that was due to an accidental copy-paste.
344         It made the entire optimization dead code that never ran.
345
346         * b3/B3ReduceStrength.cpp:
347
348 2019-04-04  Saam Barati  <sbarati@apple.com>
349
350         Unreviewed, build fix for CLoop after r243886
351
352         * interpreter/Interpreter.cpp:
353         (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const):
354         * interpreter/StackVisitor.cpp:
355         (JSC::StackVisitor::Frame::calleeSaveRegistersForUnwinding):
356         * interpreter/StackVisitor.h:
357
358 2019-04-04  Commit Queue  <commit-queue@webkit.org>
359
360         Unreviewed, rolling out r243898.
361         https://bugs.webkit.org/show_bug.cgi?id=196624
362
363         `#if !ENABLE(C_LOOP) && NUMBER_OF_CALLEE_SAVES_REGISTERS > 0`
364         does not work well (Requested by yusukesuzuki on #webkit).
365
366         Reverted changeset:
367
368         "Unreviewed, build fix for CLoop and Windows after r243886"
369         https://bugs.webkit.org/show_bug.cgi?id=196387
370         https://trac.webkit.org/changeset/243898
371
372 2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>
373
374         Unreviewed, build fix for CLoop and Windows after r243886
375         https://bugs.webkit.org/show_bug.cgi?id=196387
376
377         RegisterAtOffsetList does not exist if ENABLE(ASSEMBLER) is false.
378
379         * interpreter/StackVisitor.cpp:
380         (JSC::StackVisitor::Frame::calleeSaveRegistersForUnwinding):
381         * interpreter/StackVisitor.h:
382
383 2019-04-04  Saam barati  <sbarati@apple.com>
384
385         Teach Call ICs how to call Wasm
386         https://bugs.webkit.org/show_bug.cgi?id=196387
387
388         Reviewed by Filip Pizlo.
389
390         This patch teaches JS to call Wasm without going through the native thunk.
391         Currently, we emit a JIT "JS" callee stub which marshals arguments from
392         JS to Wasm. Like the native version of this, this thunk is responsible
393         for saving and restoring the VM's current Wasm context. Instead of emitting
394         an exception handler, we also teach the unwinder how to read the previous
395         wasm context to restore it as it unwindws past this frame.
396         
397         This patch is straight forward, and leaves some areas for perf improvement:
398         - We can teach the DFG/FTL to directly use the Wasm calling convention when
399           it knows it's calling a single Wasm function. This way we don't shuffle
400           registers to the stack and then back into registers.
401         - We bail out to the slow path for mismatched arity. I opened a bug to fix
402           optimize arity check failures: https://bugs.webkit.org/show_bug.cgi?id=196564
403         - We bail out to the slow path Double JSValues flowing into i32 arguments.
404           We should teach this thunk how to do that conversion directly.
405         
406         This patch also refactors the code to explicitly have a single pinned size register.
407         We used pretend in some places that we could have more than one pinned size register.
408         However, there was other code that just asserted the size was one. This patch just rips
409         out this code since we never moved to having more than one pinned size register. Doing
410         this refactoring cleans up the various places where we set up the size register.
411         
412         This patch is a 50-60% progression on JetStream 2's richards-wasm.
413
414         * JavaScriptCore.xcodeproj/project.pbxproj:
415         * Sources.txt:
416         * assembler/MacroAssemblerCodeRef.h:
417         (JSC::MacroAssemblerCodeRef::operator=):
418         (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef):
419         * interpreter/Interpreter.cpp:
420         (JSC::UnwindFunctor::operator() const):
421         (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const):
422         * interpreter/StackVisitor.cpp:
423         (JSC::StackVisitor::Frame::calleeSaveRegistersForUnwinding):
424         (JSC::StackVisitor::Frame::calleeSaveRegisters): Deleted.
425         * interpreter/StackVisitor.h:
426         * jit/JITOperations.cpp:
427         * jit/RegisterSet.cpp:
428         (JSC::RegisterSet::runtimeTagRegisters):
429         (JSC::RegisterSet::specialRegisters):
430         (JSC::RegisterSet::runtimeRegisters): Deleted.
431         * jit/RegisterSet.h:
432         * jit/Repatch.cpp:
433         (JSC::linkPolymorphicCall):
434         * runtime/JSFunction.cpp:
435         (JSC::getCalculatedDisplayName):
436         * runtime/JSGlobalObject.cpp:
437         (JSC::JSGlobalObject::init):
438         (JSC::JSGlobalObject::visitChildren):
439         * runtime/JSGlobalObject.h:
440         (JSC::JSGlobalObject::jsToWasmICCalleeStructure const):
441         * runtime/VM.cpp:
442         (JSC::VM::VM):
443         * runtime/VM.h:
444         * wasm/WasmAirIRGenerator.cpp:
445         (JSC::Wasm::AirIRGenerator::AirIRGenerator):
446         (JSC::Wasm::AirIRGenerator::restoreWebAssemblyGlobalState):
447         (JSC::Wasm::AirIRGenerator::addCallIndirect):
448         * wasm/WasmB3IRGenerator.cpp:
449         (JSC::Wasm::B3IRGenerator::B3IRGenerator):
450         (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
451         (JSC::Wasm::B3IRGenerator::addCallIndirect):
452         * wasm/WasmBinding.cpp:
453         (JSC::Wasm::wasmToWasm):
454         * wasm/WasmContext.h:
455         (JSC::Wasm::Context::pointerToInstance):
456         * wasm/WasmContextInlines.h:
457         (JSC::Wasm::Context::store):
458         * wasm/WasmMemoryInformation.cpp:
459         (JSC::Wasm::getPinnedRegisters):
460         (JSC::Wasm::PinnedRegisterInfo::get):
461         (JSC::Wasm::PinnedRegisterInfo::PinnedRegisterInfo):
462         * wasm/WasmMemoryInformation.h:
463         (JSC::Wasm::PinnedRegisterInfo::toSave const):
464         * wasm/WasmOMGPlan.cpp:
465         (JSC::Wasm::OMGPlan::work):
466         * wasm/js/JSToWasm.cpp:
467         (JSC::Wasm::createJSToWasmWrapper):
468         * wasm/js/JSToWasmICCallee.cpp: Added.
469         (JSC::JSToWasmICCallee::create):
470         (JSC::JSToWasmICCallee::createStructure):
471         (JSC::JSToWasmICCallee::visitChildren):
472         * wasm/js/JSToWasmICCallee.h: Added.
473         (JSC::JSToWasmICCallee::function):
474         (JSC::JSToWasmICCallee::JSToWasmICCallee):
475         * wasm/js/WebAssemblyFunction.cpp:
476         (JSC::WebAssemblyFunction::useTagRegisters const):
477         (JSC::WebAssemblyFunction::calleeSaves const):
478         (JSC::WebAssemblyFunction::usedCalleeSaveRegisters const):
479         (JSC::WebAssemblyFunction::previousInstanceOffset const):
480         (JSC::WebAssemblyFunction::previousInstance):
481         (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
482         (JSC::WebAssemblyFunction::visitChildren):
483         (JSC::WebAssemblyFunction::destroy):
484         * wasm/js/WebAssemblyFunction.h:
485         * wasm/js/WebAssemblyFunctionHeapCellType.cpp: Added.
486         (JSC::WebAssemblyFunctionDestroyFunc::operator() const):
487         (JSC::WebAssemblyFunctionHeapCellType::WebAssemblyFunctionHeapCellType):
488         (JSC::WebAssemblyFunctionHeapCellType::~WebAssemblyFunctionHeapCellType):
489         (JSC::WebAssemblyFunctionHeapCellType::finishSweep):
490         (JSC::WebAssemblyFunctionHeapCellType::destroy):
491         * wasm/js/WebAssemblyFunctionHeapCellType.h: Added.
492         * wasm/js/WebAssemblyPrototype.h:
493
494 2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>
495
496         [JSC] Pass CodeOrigin to FuzzerAgent
497         https://bugs.webkit.org/show_bug.cgi?id=196590
498
499         Reviewed by Saam Barati.
500
501         Pass CodeOrigin instead of bytecodeIndex. CodeOrigin includes richer information (InlineCallFrame*).
502         We also mask prediction with SpecBytecodeTop in DFGByteCodeParser. The fuzzer can produce any SpeculatedTypes,
503         but DFGByteCodeParser should only see predictions that can be actually produced from the bytecode execution.
504
505         * dfg/DFGByteCodeParser.cpp:
506         (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
507         * runtime/FuzzerAgent.cpp:
508         (JSC::FuzzerAgent::getPrediction):
509         * runtime/FuzzerAgent.h:
510         * runtime/RandomizingFuzzerAgent.cpp:
511         (JSC::RandomizingFuzzerAgent::getPrediction):
512         * runtime/RandomizingFuzzerAgent.h:
513
514 2019-04-04  Caio Lima  <ticaiolima@gmail.com>
515
516         [JSC] We should consider moving UnlinkedFunctionExecutable::m_parentScopeTDZVariables to RareData
517         https://bugs.webkit.org/show_bug.cgi?id=194944
518
519         Reviewed by Keith Miller.
520
521         Based on profile data collected on JetStream2, Speedometer 2 and
522         other benchmarks, it is very rare having non-empty
523         UnlinkedFunctionExecutable::m_parentScopeTDZVariables.
524
525         - Data collected from Speedometer2
526             Total number of UnlinkedFunctionExecutable: 39463
527             Total number of non-empty parentScopeTDZVars: 428 (~1%)
528
529         - Data collected from JetStream2
530             Total number of UnlinkedFunctionExecutable: 83715
531             Total number of non-empty parentScopeTDZVars: 5285 (~6%)
532
533         We also collected numbers on 6 of top 10 Alexia sites.
534
535         - Data collected from youtube.com
536             Total number of UnlinkedFunctionExecutable: 29599
537             Total number of non-empty parentScopeTDZVars: 97 (~0.3%)
538
539         - Data collected from twitter.com
540             Total number of UnlinkedFunctionExecutable: 23774
541             Total number of non-empty parentScopeTDZVars: 172 (~0.7%)
542
543         - Data collected from google.com
544             Total number of UnlinkedFunctionExecutable: 33209
545             Total number of non-empty parentScopeTDZVars: 174 (~0.5%)
546
547         - Data collected from amazon.com:
548             Total number of UnlinkedFunctionExecutable: 15182
549             Total number of non-empty parentScopeTDZVars: 166 (~1%)
550
551         - Data collected from facebook.com:
552             Total number of UnlinkedFunctionExecutable: 54443
553             Total number of non-empty parentScopeTDZVars: 269 (~0.4%)
554
555         - Data collected from netflix.com:
556             Total number of UnlinkedFunctionExecutable: 39266
557             Total number of non-empty parentScopeTDZVars: 97 (~0.2%)
558
559         Considering such numbers, this patch is moving `m_parentScopeTDZVariables`
560         to RareData. This decreases sizeof(UnlinkedFunctionExecutable) by
561         16 bytes. With this change, now UnlinkedFunctionExecutable constructors
562         receives an `Optional<VariableEnvironmentMap::Handle>` and only stores
563         it when `value != WTF::nullopt`. We also changed
564         UnlinkedFunctionExecutable::parentScopeTDZVariables() and it returns
565         `VariableEnvironment()` whenever the Executable doesn't have RareData,
566         or VariableEnvironmentMap::Handle is unitialized. This is required
567         because RareData is instantiated when any of its field is stored and
568         we can have an unitialized `Handle` even on cases when parentScopeTDZVariables
569         is `WTF::nullopt`.
570
571         Results on memory usage on JetStrem2 is neutral.
572
573             Mean of memory peak on ToT: 4258633728 bytes (confidence interval: 249720072.95)
574             Mean of memory peak on Changes: 4367325184 bytes (confidence interval: 321285583.61)
575
576         * builtins/BuiltinExecutables.cpp:
577         (JSC::BuiltinExecutables::createExecutable):
578         * bytecode/UnlinkedFunctionExecutable.cpp:
579         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
580         * bytecode/UnlinkedFunctionExecutable.h:
581         * bytecompiler/BytecodeGenerator.cpp:
582         (JSC::BytecodeGenerator::getVariablesUnderTDZ):
583
584         BytecodeGenerator::getVariablesUnderTDZ now also caches if m_cachedVariablesUnderTDZ
585         is empty, so we can properly return `WTF::nullopt` without the
586         reconstruction of a VariableEnvironment to check if it is empty.
587
588         * bytecompiler/BytecodeGenerator.h:
589         (JSC::BytecodeGenerator::makeFunction):
590         * parser/VariableEnvironment.h:
591         (JSC::VariableEnvironment::isEmpty const):
592         * runtime/CachedTypes.cpp:
593         (JSC::CachedCompactVariableMapHandle::decode const):
594
595         It returns an unitialized Handle when there is no
596         CompactVariableEnvironment. This can happen when RareData is ensured
597         because of another field.
598
599         (JSC::CachedFunctionExecutableRareData::encode):
600         (JSC::CachedFunctionExecutableRareData::decode const):
601         (JSC::CachedFunctionExecutable::encode):
602         (JSC::CachedFunctionExecutable::decode const):
603         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
604         * runtime/CodeCache.cpp:
605
606         Instead of creating a dummyVariablesUnderTDZ, we simply pass
607         WTF::nullopt.
608
609         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
610
611 2019-04-04  Tadeu Zagallo  <tzagallo@apple.com>
612
613         Cache bytecode for jsc.cpp helpers and fix CachedStringImpl
614         https://bugs.webkit.org/show_bug.cgi?id=196409
615
616         Reviewed by Saam Barati.
617
618         Some of the helpers in jsc.cpp, such as `functionRunString`, were stll using
619         using `makeSource` instead of `jscSource`, which does not use the ShellSourceProvider
620         and therefore does not write the bytecode cache to disk.
621
622         Changing that revealed a bug in bytecode cache. The Encoder keeps a mapping
623         of pointers to offsets of already cached objects, in order to avoid caching
624         the same object twice. Similarly, the Decoder keeps a mapping from offsets
625         to pointers, in order to avoid creating multiple objects in memory for the
626         same cached object. The following was happening:
627         1) A StringImpl* S was cached as CachedPtr<CachedStringImpl> at offset O. We add
628         an entry in the Encoder mapping that S has already been encoded at O.
629         2) We cache StringImpl* S again, but now as CachedPtr<CachedUniquedStringImpl>.
630         We find an entry in the Encoder mapping for S, and return the offset O. However,
631         the object cached at O is a CachedPtr<CachedStringImpl> (i.e. not Uniqued).
632
633         3) When decoding, there are 2 possibilities:
634         3.1) We find S for the first time through a CachedPtr<CachedStringImpl>. In
635         this case, everything works as expected since we add an entry in the decoder
636         mapping from the offset O to the decoded StringImpl* S. The next time we find
637         S through the uniqued version, we'll return the already decoded S.
638         3.2) We find S through a CachedPtr<CachedUniquedStringImpl>. Now we have a
639         problem, since the CachedPtr has the offset of a CachedStringImpl (not uniqued),
640         which has a different shape and we crash.
641
642         We fix this by making CachedStringImpl and CachedUniquedStringImpl share the
643         same implementation. Since it doesn't matter whether a string is uniqued for
644         encoding, and we always decode strings as uniqued either way, they can be used
645         interchangeably.
646
647         * jsc.cpp:
648         (functionRunString):
649         (functionLoadString):
650         (functionDollarAgentStart):
651         (functionCheckModuleSyntax):
652         (runInteractive):
653         * runtime/CachedTypes.cpp:
654         (JSC::CachedUniquedStringImplBase::decode const):
655         (JSC::CachedFunctionExecutable::rareData const):
656         (JSC::CachedCodeBlock::rareData const):
657         (JSC::CachedFunctionExecutable::encode):
658         (JSC::CachedCodeBlock<CodeBlockType>::encode):
659         (JSC::CachedUniquedStringImpl::encode): Deleted.
660         (JSC::CachedUniquedStringImpl::decode const): Deleted.
661         (JSC::CachedStringImpl::encode): Deleted.
662         (JSC::CachedStringImpl::decode const): Deleted.
663
664 2019-04-04  Tadeu Zagallo  <tzagallo@apple.com>
665
666         UnlinkedCodeBlock constructor from cache should initialize m_didOptimize
667         https://bugs.webkit.org/show_bug.cgi?id=196396
668
669         Reviewed by Saam Barati.
670
671         The UnlinkedCodeBlock constructor in CachedTypes was missing the initialization
672         for m_didOptimize, which leads to crashes in CodeBlock::thresholdForJIT.
673
674         * runtime/CachedTypes.cpp:
675         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
676
677 2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>
678
679         Unreviewed, rolling in r243843 with the build fix
680         https://bugs.webkit.org/show_bug.cgi?id=196586
681
682         * runtime/Options.cpp:
683         (JSC::recomputeDependentOptions):
684         * runtime/Options.h:
685         * runtime/RandomizingFuzzerAgent.cpp:
686         (JSC::RandomizingFuzzerAgent::getPrediction):
687
688 2019-04-03  Ryan Haddad  <ryanhaddad@apple.com>
689
690         Unreviewed, rolling out r243843.
691
692         Broke CLoop and Windows builds.
693
694         Reverted changeset:
695
696         "[JSC] Add dump feature for RandomizingFuzzerAgent"
697         https://bugs.webkit.org/show_bug.cgi?id=196586
698         https://trac.webkit.org/changeset/243843
699
700 2019-04-03  Robin Morisset  <rmorisset@apple.com>
701
702         B3 should use associativity to optimize expression trees
703         https://bugs.webkit.org/show_bug.cgi?id=194081
704
705         Reviewed by Filip Pizlo.
706
707         This patch adds a new B3 pass, that tries to find and optimize expression trees made purely of any one associative and commutative operator (Add/Mul/BitOr/BitAnd/BitXor).
708         The pass only runs in O2, and runs once, after lowerMacros and just before a run of B3ReduceStrength (which helps clean up the dead code it tends to leave behind).
709         I had to separate killDeadCode out of B3ReduceStrength (as a new B3EliminateDeadCode pass) to run it before B3OptimizeAssociativeExpressionTrees, as otherwise it is stopped by high use counts
710         inherited from CSE.
711         This extra run of DCE is by itself a win, most notably on microbenchmarks/instanceof-always-hit-two (1.5x faster), and on microbenchmarks/licm-dragons(-out-of-bounds) (both get 1.16x speedup).
712         I suspect it is because it runs between CSE and tail-dedup, and as a result allows a lot more tail-dedup to occur.
713
714         The pass is currently extremely conservative, not trying anything if it would cause _any_ code duplication.
715         For this purpose, it starts by computing use counts for the potentially interesting nodes (those with the right opcodes), and segregate them into expression trees.
716         The root of an expression tree is a node that is either used in multiple places, or is used by a value with a different opcode.
717         The leaves of an expression tree are nodes that are either used in multiple places, or have a different opcode.
718         All constant leaves of a tree are combined, as well as all leaves that are identical. What remains is then laid out into a balanced binary tree, hopefully maximizing ILP.
719
720         This optimization was implemented as a stand-alone pass and not as part of B3ReduceStrength mostly because it needs use counts to avoid code duplication.
721         It also benefits from finding all tree roots first, and not trying to repeatedly optimize subtrees.
722
723         I added several tests to testB3 with varying patterns of trees. It is also tested in a less focused way by lots of older tests.
724
725         In the future this pass could be expanded to allow some bounded amount of code duplication, and merging more leaves (e.g. Mul(a, 3) and a in an Add tree, into Mul(a, 4))
726         The latter will need exposing the peephole optimizations out of B3ReduceStrength to avoid duplicating code.
727
728         * JavaScriptCore.xcodeproj/project.pbxproj:
729         * Sources.txt:
730         * b3/B3Common.cpp:
731         (JSC::B3::shouldDumpIR):
732         (JSC::B3::shouldDumpIRAtEachPhase):
733         * b3/B3Common.h:
734         * b3/B3EliminateDeadCode.cpp: Added.
735         (JSC::B3::EliminateDeadCode::run):
736         (JSC::B3::eliminateDeadCode):
737         * b3/B3EliminateDeadCode.h: Added.
738         (JSC::B3::EliminateDeadCode::EliminateDeadCode):
739         * b3/B3Generate.cpp:
740         (JSC::B3::generateToAir):
741         * b3/B3OptimizeAssociativeExpressionTrees.cpp: Added.
742         (JSC::B3::OptimizeAssociativeExpressionTrees::OptimizeAssociativeExpressionTrees):
743         (JSC::B3::OptimizeAssociativeExpressionTrees::neutralElement):
744         (JSC::B3::OptimizeAssociativeExpressionTrees::isAbsorbingElement):
745         (JSC::B3::OptimizeAssociativeExpressionTrees::combineConstants):
746         (JSC::B3::OptimizeAssociativeExpressionTrees::emitValue):
747         (JSC::B3::OptimizeAssociativeExpressionTrees::optimizeRootedTree):
748         (JSC::B3::OptimizeAssociativeExpressionTrees::run):
749         (JSC::B3::optimizeAssociativeExpressionTrees):
750         * b3/B3OptimizeAssociativeExpressionTrees.h: Added.
751         * b3/B3ReduceStrength.cpp:
752         * b3/B3Value.cpp:
753         (JSC::B3::Value::replaceWithIdentity):
754         * b3/testb3.cpp:
755         (JSC::B3::testBitXorTreeArgs):
756         (JSC::B3::testBitXorTreeArgsEven):
757         (JSC::B3::testBitXorTreeArgImm):
758         (JSC::B3::testAddTreeArg32):
759         (JSC::B3::testMulTreeArg32):
760         (JSC::B3::testBitAndTreeArg32):
761         (JSC::B3::testBitOrTreeArg32):
762         (JSC::B3::run):
763
764 2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>
765
766         [JSC] Add dump feature for RandomizingFuzzerAgent
767         https://bugs.webkit.org/show_bug.cgi?id=196586
768
769         Reviewed by Saam Barati.
770
771         Towards deterministic tests for the results from randomizing fuzzer agent, this patch adds Options::dumpRandomizingFuzzerAgentPredictions, which dumps the generated types.
772         The results is like this.
773
774             getPrediction name:(#C2q9xD),bytecodeIndex:(22),original:(Array),generated:(OtherObj|Array|Float64Array|BigInt|NonIntAsDouble)
775             getPrediction name:(makeUnwriteableUnconfigurableObject#AiEJv1),bytecodeIndex:(14),original:(OtherObj),generated:(Final|Uint8Array|Float64Array|SetObject|WeakSetObject|BigInt|NonIntAsDouble)
776
777         * runtime/Options.cpp:
778         (JSC::recomputeDependentOptions):
779         * runtime/Options.h:
780         * runtime/RandomizingFuzzerAgent.cpp:
781         (JSC::RandomizingFuzzerAgent::getPrediction):
782
783 2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>
784
785         -apple-trailing-word is needed for browser detection
786         https://bugs.webkit.org/show_bug.cgi?id=196575
787
788         Unreviewed.
789
790         * Configurations/FeatureDefines.xcconfig:
791
792 2019-04-03  Michael Saboff  <msaboff@apple.com>
793
794         REGRESSION (r243642): com.apple.JavaScriptCore crash in JSC::RegExpObject::execInline
795         https://bugs.webkit.org/show_bug.cgi?id=196477
796
797         Reviewed by Keith Miller.
798
799         The problem here is that when we advance the index by 2 for a character class that only
800         has non-BMP characters, we might go past the end of the string.  This can happen for
801         greedy counted character classes that are part of a alternative where there is one
802         character to match after the greedy non-BMP character class.
803
804         The "do we have string left to match" check at the top of the JIT loop for the counted
805         character class checks to see if index is not equal to the string length.  For non-BMP
806         character classes, we need to check to see if there are at least 2 characters left.
807         Therefore we now temporarily add 1 to the current index before comparing.  This checks
808         to see if there are iat least 2 characters left to match, instead of 1.
809
810         * yarr/YarrJIT.cpp:
811         (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
812         (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
813
814 2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>
815
816         [JSC] Exception verification crash on operationArrayIndexOfValueInt32OrContiguous
817         https://bugs.webkit.org/show_bug.cgi?id=196574
818
819         Reviewed by Saam Barati.
820
821         This patch adds missing exception check in operationArrayIndexOfValueInt32OrContiguous.
822
823         * dfg/DFGOperations.cpp:
824
825 2019-04-03  Don Olmstead  <don.olmstead@sony.com>
826
827         [CMake][WTF] Mirror XCode header directories
828         https://bugs.webkit.org/show_bug.cgi?id=191662
829
830         Reviewed by Konstantin Tokarev.
831
832         Use WTFFramework as a dependency and include frameworks/WTF.cmake for AppleWin internal
833         builds.
834
835         * CMakeLists.txt:
836         * shell/CMakeLists.txt:
837
838 2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>
839
840         [JSC] Add FuzzerAgent, which has a hooks to get feedback & inject fuzz data into JSC
841         https://bugs.webkit.org/show_bug.cgi?id=196530
842
843         Reviewed by Saam Barati.
844
845         This patch adds FuzzerAgent interface and simple RandomizingFuzzerAgent to JSC.
846         This RandomizingFuzzerAgent returns random SpeculatedType for value profiling to find
847         the issues in JSC. The seed for randomization can be specified by seedOfRandomizingFuzzerAgent.
848
849         I ran this with seedOfRandomizingFuzzerAgent=1 last night and it finds 3 failures in the current JSC tests,
850         they should be fixed in subsequent patches.
851
852         * CMakeLists.txt:
853         * JavaScriptCore.xcodeproj/project.pbxproj:
854         * Sources.txt:
855         * dfg/DFGByteCodeParser.cpp:
856         (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
857         * runtime/FuzzerAgent.cpp: Added.
858         (JSC::FuzzerAgent::~FuzzerAgent):
859         (JSC::FuzzerAgent::getPrediction):
860         * runtime/FuzzerAgent.h: Added.
861         * runtime/JSGlobalObjectFunctions.cpp:
862         * runtime/Options.h:
863         * runtime/RandomizingFuzzerAgent.cpp: Added.
864         (JSC::RandomizingFuzzerAgent::RandomizingFuzzerAgent):
865         (JSC::RandomizingFuzzerAgent::getPrediction):
866         * runtime/RandomizingFuzzerAgent.h: Added.
867         * runtime/RegExpCachedResult.h:
868         * runtime/RegExpGlobalData.cpp:
869         * runtime/VM.cpp:
870         (JSC::VM::VM):
871         * runtime/VM.h:
872         (JSC::VM::fuzzerAgent const):
873         (JSC::VM::setFuzzerAgent):
874
875 2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>
876
877         Remove support for -apple-trailing-word
878         https://bugs.webkit.org/show_bug.cgi?id=196525
879
880         Reviewed by Zalan Bujtas.
881
882         This CSS property is nonstandard and not used.
883
884         * Configurations/FeatureDefines.xcconfig:
885
886 2019-04-03  Joseph Pecoraro  <pecoraro@apple.com>
887
888         Web Inspector: Remote Inspector indicate callback should always happen on the main thread
889         https://bugs.webkit.org/show_bug.cgi?id=196513
890         <rdar://problem/49498284>
891
892         Reviewed by Devin Rousso.
893
894         * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
895         (Inspector::RemoteInspector::receivedIndicateMessage):
896         When we have a WebThread, don't just run on the WebThread,
897         run on the MainThread with the WebThreadLock.
898
899 2019-04-02  Michael Saboff  <msaboff@apple.com>
900
901         Crash in Options::setOptions() using --configFile option and libgmalloc
902         https://bugs.webkit.org/show_bug.cgi?id=196506
903
904         Reviewed by Keith Miller.
905
906         Changed to call CString::data() while making the call to Options::setOptions().  This keeps
907         the implicit CString temporary alive until after setOptions() returns.
908
909         * runtime/ConfigFile.cpp:
910         (JSC::ConfigFile::parse):
911
912 2019-04-02  Fujii Hironori  <Hironori.Fujii@sony.com>
913
914         [CMake] WEBKIT_MAKE_FORWARDING_HEADERS shouldn't use POST_BUILD to copy generated headers
915         https://bugs.webkit.org/show_bug.cgi?id=182757
916
917         Reviewed by Don Olmstead.
918
919         * CMakeLists.txt: Do not use DERIVED_SOURCE_DIRECTORIES parameter
920         of WEBKIT_MAKE_FORWARDING_HEADERS. Added generated headers to
921         JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS.
922
923 2019-04-02  Saam barati  <sbarati@apple.com>
924
925         Add a ValueRepReduction phase
926         https://bugs.webkit.org/show_bug.cgi?id=196234
927
928         Reviewed by Filip Pizlo.
929
930         This patch adds a ValueRepReduction phase. The main idea here is
931         to try to reduce DoubleRep(RealNumberUse:ValueRep(DoubleRepUse:@x))
932         to just be @x. This patch handles such above strengh reduction rules
933         as long as we prove that all users of the ValueRep can be converted
934         to using the incoming double value. That way we prevent introducing
935         a parallel live range for the double value.
936         
937         This patch tracks the uses of the ValueRep through Phi variables,
938         so we can convert entire Phi variables to being Double instead
939         of JSValue if the Phi also has only double uses.
940         
941         This is implemented through a simple escape analysis. DoubleRep(RealNumberUse:)
942         and OSR exit hints are not counted as escapes. All other uses are counted
943         as escapes. Connected Phi graphs are converted to being Double only if the
944         entire graph is ok with the result being Double.
945         
946         Some ways we could extend this phase in the future:
947         - There are a lot of DoubleRep(NumberUse:@ValueRep(@x)) uses. This ensures
948           that the result of the DoubleRep of @x is not impure NaN. We could
949           handle this case if we introduced a PurifyNaN node and replace the DoubleRep
950           with PurifyNaN(@x). Alternatively, we could see if certain users of this
951           DoubleRep are okay with impure NaN flowing into them and we'd need to ensure
952           their output type is always treated as if the input is impure NaN.
953         - We could do sinking of ValueRep where we think it's profitable. So instead
954           of an escape making it so we never represent the variable as a Double, we
955           could make the escape reconstruct the JSValueRep where profitable.
956         - We can extend this phase to handle Int52Rep if it's profitable.
957         - We can opt other nodes into accepting incoming Doubles so we no longer
958           treat them as escapes.
959         
960         This patch is somewhere between neutral and a 1% progression on JetStream 2.
961
962         * JavaScriptCore.xcodeproj/project.pbxproj:
963         * Sources.txt:
964         * dfg/DFGPlan.cpp:
965         (JSC::DFG::Plan::compileInThreadImpl):
966         * dfg/DFGValueRepReductionPhase.cpp: Added.
967         (JSC::DFG::ValueRepReductionPhase::ValueRepReductionPhase):
968         (JSC::DFG::ValueRepReductionPhase::run):
969         (JSC::DFG::ValueRepReductionPhase::convertValueRepsToDouble):
970         (JSC::DFG::performValueRepReduction):
971         * dfg/DFGValueRepReductionPhase.h: Added.
972         * runtime/Options.h:
973
974 2019-04-01  Yusuke Suzuki  <ysuzuki@apple.com>
975
976         [JSC] JSRunLoopTimer::Manager should be small
977         https://bugs.webkit.org/show_bug.cgi?id=196425
978
979         Reviewed by Darin Adler.
980
981         Using very large Key or Value in HashMap potentially bloats memory since HashMap pre-allocates large size of
982         memory ((sizeof(Key) + sizeof(Value)) * N) for its backing storage's array. Using std::unique_ptr<> for JSRunLoopTimer's
983         PerVMData to keep HashMap's backing store size small.
984
985         * runtime/JSRunLoopTimer.cpp:
986         (JSC::JSRunLoopTimer::Manager::timerDidFire):
987         (JSC::JSRunLoopTimer::Manager::registerVM):
988         (JSC::JSRunLoopTimer::Manager::scheduleTimer):
989         (JSC::JSRunLoopTimer::Manager::cancelTimer):
990         (JSC::JSRunLoopTimer::Manager::timeUntilFire):
991         (JSC::JSRunLoopTimer::Manager::didChangeRunLoop):
992         * runtime/JSRunLoopTimer.h:
993
994 2019-04-01  Stephan Szabo  <stephan.szabo@sony.com>
995
996         [PlayStation] Add initialization for JSC shell for PlayStation port
997         https://bugs.webkit.org/show_bug.cgi?id=195411
998
999         Reviewed by Ross Kirsling.
1000
1001         Add ps options
1002
1003         * shell/PlatformPlayStation.cmake: Added.
1004         * shell/playstation/Initializer.cpp: Added.
1005         (initializer):
1006
1007 2019-04-01  Michael Catanzaro  <mcatanzaro@igalia.com>
1008
1009         Stop trying to support building JSC with clang 3.8
1010         https://bugs.webkit.org/show_bug.cgi?id=195947
1011         <rdar://problem/49069219>
1012
1013         Reviewed by Darin Adler.
1014
1015         It seems WebKit hasn't built with clang 3.8 in a while, no devs are using this compiler, we
1016         don't know how much effort it would be to make JSC work again, and it's making the code
1017         worse. Remove my hacks to support clang 3.8 from JSC.
1018
1019         * bindings/ScriptValue.cpp:
1020         (Inspector::jsToInspectorValue):
1021         * bytecode/GetterSetterAccessCase.cpp:
1022         (JSC::GetterSetterAccessCase::create):
1023         (JSC::GetterSetterAccessCase::clone const):
1024         * bytecode/InstanceOfAccessCase.cpp:
1025         (JSC::InstanceOfAccessCase::clone const):
1026         * bytecode/IntrinsicGetterAccessCase.cpp:
1027         (JSC::IntrinsicGetterAccessCase::clone const):
1028         * bytecode/ModuleNamespaceAccessCase.cpp:
1029         (JSC::ModuleNamespaceAccessCase::clone const):
1030         * bytecode/ProxyableAccessCase.cpp:
1031         (JSC::ProxyableAccessCase::clone const):
1032
1033 2019-03-31  Yusuke Suzuki  <ysuzuki@apple.com>
1034
1035         [JSC] Butterfly allocation from LargeAllocation should try "realloc" behavior if collector thread is not active
1036         https://bugs.webkit.org/show_bug.cgi?id=196160
1037
1038         Reviewed by Saam Barati.
1039
1040         "realloc" can be effective in terms of peak/current memory footprint when realloc succeeds because,
1041
1042         1. It does not allocate additional memory while expanding a vector
1043         2. It does not deallocate an old memory, just reusing the current memory by expanding, so that memory footprint is tight even before scavenging
1044
1045         We found that we can "realloc" large butterflies in certain conditions are met because,
1046
1047         1. If it goes to LargeAllocation, this memory region is never reused until GC sweeps it.
1048         2. Butterflies are owned by owner JSObjects, so we know the lifetime of Butterflies.
1049
1050         This patch attempts to use "realloc" onto butterflies if,
1051
1052         1. Butterflies are allocated in LargeAllocation kind
1053         2. Concurrent collector is not active
1054         3. Butterflies do not have property storage
1055
1056         The condition (2) is required to avoid deallocating butterflies while the concurrent collector looks into it. The condition (3) is
1057         also required to avoid deallocating butterflies while the concurrent compiler looks into it.
1058
1059         We also change LargeAllocation mechanism to using "malloc" and "free" instead of "posix_memalign". This allows us to use "realloc"
1060         safely in all the platforms. Since LargeAllocation uses alignment to distinguish LargeAllocation and MarkedBlock, we manually adjust
1061         16B alignment by allocating 8B more memory in "malloc".
1062
1063         Speedometer2 and JetStream2 are neutral. RAMification shows about 1% progression (even in some of JIT tests).
1064
1065         * heap/AlignedMemoryAllocator.h:
1066         * heap/CompleteSubspace.cpp:
1067         (JSC::CompleteSubspace::tryAllocateSlow):
1068         (JSC::CompleteSubspace::reallocateLargeAllocationNonVirtual):
1069         * heap/CompleteSubspace.h:
1070         * heap/FastMallocAlignedMemoryAllocator.cpp:
1071         (JSC::FastMallocAlignedMemoryAllocator::tryAllocateMemory):
1072         (JSC::FastMallocAlignedMemoryAllocator::freeMemory):
1073         (JSC::FastMallocAlignedMemoryAllocator::tryReallocateMemory):
1074         * heap/FastMallocAlignedMemoryAllocator.h:
1075         * heap/GigacageAlignedMemoryAllocator.cpp:
1076         (JSC::GigacageAlignedMemoryAllocator::tryAllocateMemory):
1077         (JSC::GigacageAlignedMemoryAllocator::freeMemory):
1078         (JSC::GigacageAlignedMemoryAllocator::tryReallocateMemory):
1079         * heap/GigacageAlignedMemoryAllocator.h:
1080         * heap/IsoAlignedMemoryAllocator.cpp:
1081         (JSC::IsoAlignedMemoryAllocator::tryAllocateMemory):
1082         (JSC::IsoAlignedMemoryAllocator::freeMemory):
1083         (JSC::IsoAlignedMemoryAllocator::tryReallocateMemory):
1084         * heap/IsoAlignedMemoryAllocator.h:
1085         * heap/LargeAllocation.cpp:
1086         (JSC::isAlignedForLargeAllocation):
1087         (JSC::LargeAllocation::tryCreate):
1088         (JSC::LargeAllocation::tryReallocate):
1089         (JSC::LargeAllocation::LargeAllocation):
1090         (JSC::LargeAllocation::destroy):
1091         * heap/LargeAllocation.h:
1092         (JSC::LargeAllocation::indexInSpace):
1093         (JSC::LargeAllocation::setIndexInSpace):
1094         (JSC::LargeAllocation::basePointer const):
1095         * heap/MarkedSpace.cpp:
1096         (JSC::MarkedSpace::sweepLargeAllocations):
1097         (JSC::MarkedSpace::prepareForConservativeScan):
1098         * heap/WeakSet.h:
1099         (JSC::WeakSet::isTriviallyDestructible const):
1100         * runtime/Butterfly.h:
1101         * runtime/ButterflyInlines.h:
1102         (JSC::Butterfly::reallocArrayRightIfPossible):
1103         * runtime/JSObject.cpp:
1104         (JSC::JSObject::ensureLengthSlow):
1105
1106 2019-03-31  Sam Weinig  <weinig@apple.com>
1107
1108         Remove more i386 specific configurations
1109         https://bugs.webkit.org/show_bug.cgi?id=196430
1110
1111         Reviewed by Alexey Proskuryakov.
1112
1113         * Configurations/FeatureDefines.xcconfig:
1114         ENABLE_WEB_AUTHN_macosx can now be enabled unconditionally on macOS.
1115
1116         * Configurations/ToolExecutable.xcconfig:
1117         ARC can be enabled unconditionally now.
1118
1119 2019-03-29  Yusuke Suzuki  <ysuzuki@apple.com>
1120
1121         [JSC] JSWrapperMap should not use Objective-C Weak map (NSMapTable with NSPointerFunctionsWeakMemory) for m_cachedObjCWrappers
1122         https://bugs.webkit.org/show_bug.cgi?id=196392
1123
1124         Reviewed by Saam Barati.
1125
1126         Weak representation in Objective-C is surprisingly costly in terms of memory. We can see that very easy program shows 10KB memory consumption due to
1127         this weak wrapper map in JavaScriptCore.framework. But we do not need this weak map since Objective-C JSValue has a dealloc. We can unregister itself
1128         from the map when it is deallocated without using Objective-C weak mechanism. And since Objective-C JSValue is tightly coupled to a specific JSContext,
1129         and wrapper map is created per JSContext, JSValue wrapper and actual JavaScriptCore value is one-on-one, and [JSValue dealloc] knows which JSContext's
1130         wrapper map holds itself.
1131
1132         1. We do not use Objective-C weak mechanism. We use WTF::HashSet instead. When JSValue is allocated, we register it to JSWrapperMap's HashSet. And unregister
1133            JSValue from this map when JSValue is deallocated.
1134         2. We use HashSet<JSValue> (logically) instead of HashMap<JSValueRef, JSValue> to keep JSValueRef and JSValue relationship. We can achieve it because JSValue
1135            holds JSValueRef inside it.
1136
1137         * API/JSContext.mm:
1138         (-[JSContext removeWrapper:]):
1139         * API/JSContextInternal.h:
1140         * API/JSValue.mm:
1141         (-[JSValue dealloc]):
1142         (-[JSValue initWithValue:inContext:]):
1143         * API/JSWrapperMap.h:
1144         * API/JSWrapperMap.mm:
1145         (WrapperKey::hashTableDeletedValue):
1146         (WrapperKey::WrapperKey):
1147         (WrapperKey::isHashTableDeletedValue const):
1148         (WrapperKey::Hash::hash):
1149         (WrapperKey::Hash::equal):
1150         (WrapperKey::Traits::isEmptyValue):
1151         (WrapperKey::Translator::hash):
1152         (WrapperKey::Translator::equal):
1153         (WrapperKey::Translator::translate):
1154         (-[JSWrapperMap initWithGlobalContextRef:]):
1155         (-[JSWrapperMap dealloc]):
1156         (-[JSWrapperMap objcWrapperForJSValueRef:inContext:]):
1157         (-[JSWrapperMap removeWrapper:]):
1158         * API/tests/testapi.mm:
1159         (testObjectiveCAPIMain):
1160
1161 2019-03-29  Robin Morisset  <rmorisset@apple.com>
1162
1163         B3ReduceStrength should know that Mul distributes over Add and Sub
1164         https://bugs.webkit.org/show_bug.cgi?id=196325
1165
1166         Reviewed by Michael Saboff.
1167
1168         In this patch I add the following patterns to B3ReduceStrength:
1169         - Turn this: Integer Neg(Mul(value, c))
1170           Into this: Mul(value, -c), as long as -c does not overflow
1171         - Turn these: Integer Mul(value, Neg(otherValue)) and Integer Mul(Neg(value), otherValue)
1172           Into this: Neg(Mul(value, otherValue))
1173         - For Op==Add or Sub, turn any of these:
1174              Op(Mul(x1, x2), Mul(x1, x3))
1175              Op(Mul(x2, x1), Mul(x1, x3))
1176              Op(Mul(x1, x2), Mul(x3, x1))
1177              Op(Mul(x2, x1), Mul(x3, x1))
1178           Into this: Mul(x1, Op(x2, x3))
1179
1180         Also includes a trivial change: a similar reduction for the distributivity of BitAnd over BitOr/BitXor now
1181         emits the arguments to BitAnd in the other order, to minimize the probability that we'll spend a full fixpoint step just to flip them.
1182
1183         * b3/B3ReduceStrength.cpp:
1184         * b3/testb3.cpp:
1185         (JSC::B3::testAddMulMulArgs):
1186         (JSC::B3::testMulArgNegArg):
1187         (JSC::B3::testMulNegArgArg):
1188         (JSC::B3::testNegMulArgImm):
1189         (JSC::B3::testSubMulMulArgs):
1190         (JSC::B3::run):
1191
1192 2019-03-29  Yusuke Suzuki  <ysuzuki@apple.com>
1193
1194         [JSC] Remove distancing for LargeAllocation
1195         https://bugs.webkit.org/show_bug.cgi?id=196335
1196
1197         Reviewed by Saam Barati.
1198
1199         In r230226, we removed distancing feature from our GC. This patch removes remaining distancing thing in LargeAllocation.
1200
1201         * heap/HeapCell.h:
1202         * heap/LargeAllocation.cpp:
1203         (JSC::LargeAllocation::tryCreate):
1204         * heap/MarkedBlock.h:
1205
1206 2019-03-29  Myles C. Maxfield  <mmaxfield@apple.com>
1207
1208         Delete WebMetal implementation in favor of WebGPU
1209         https://bugs.webkit.org/show_bug.cgi?id=195418
1210
1211         Reviewed by Dean Jackson.
1212
1213         * Configurations/FeatureDefines.xcconfig:
1214         * inspector/protocol/Canvas.json:
1215         * inspector/scripts/codegen/generator.py:
1216
1217 2019-03-29  Tadeu Zagallo  <tzagallo@apple.com>
1218
1219         Assertion failed in JSC::createError
1220         https://bugs.webkit.org/show_bug.cgi?id=196305
1221         <rdar://problem/49387382>
1222
1223         Reviewed by Saam Barati.
1224
1225         JSC::createError assumes that `errorDescriptionForValue` will either
1226         throw an exception or return a valid description string. However, that
1227         is not true if the value is a rope string and we successfully resolve it,
1228         but later fail to wrap the string in quotes with `tryMakeString`.
1229
1230         * runtime/ExceptionHelpers.cpp:
1231         (JSC::createError):
1232
1233 2019-03-29  Devin Rousso  <drousso@apple.com>
1234
1235         Web Inspector: add fast returns for instrumentation hooks that have no affect before a frontend is connected
1236         https://bugs.webkit.org/show_bug.cgi?id=196382
1237         <rdar://problem/49403417>
1238
1239         Reviewed by Joseph Pecoraro.
1240
1241         Ensure that all instrumentation hooks use `FAST_RETURN_IF_NO_FRONTENDS` or check that
1242         `developerExtrasEnabled`. There should be no activity to/from any inspector objects until
1243         developer extras are enabled.
1244
1245         * inspector/agents/InspectorConsoleAgent.cpp:
1246         (Inspector::InspectorConsoleAgent::startTiming):
1247         (Inspector::InspectorConsoleAgent::stopTiming):
1248         (Inspector::InspectorConsoleAgent::count):
1249         (Inspector::InspectorConsoleAgent::addConsoleMessage):
1250
1251 2019-03-29  Cathie Chen  <cathiechen@igalia.com>
1252
1253         Implement ResizeObserver.
1254         https://bugs.webkit.org/show_bug.cgi?id=157743
1255
1256         Reviewed by Simon Fraser.
1257
1258         Add ENABLE_RESIZE_OBSERVER.
1259
1260         * Configurations/FeatureDefines.xcconfig:
1261
1262 2019-03-28  Michael Saboff  <msaboff@apple.com>
1263
1264         [YARR] Precompute BMP / non-BMP status when constructing character classes
1265         https://bugs.webkit.org/show_bug.cgi?id=196296
1266
1267         Reviewed by Keith Miller.
1268
1269         Changed CharacterClass::m_hasNonBMPCharacters into a character width bit field which
1270         indicateis if the class includes characters from either BMP, non-BMP or both ranges.
1271         This allows the recognizing code to eliminate checks for the width of a matched
1272         characters when the class has only one width.  The character width is needed to
1273         determine if we advance 1 or 2 character.  Also, the pre-computed width of character
1274         classes that contains either all BMP or all non-BMP characters allows the parser to
1275         use fixed widths for terms using those character classes.  Changed both the code gen
1276         scripts and Yarr compiler to compute this bit field during the construction of
1277         character classes.
1278
1279         For JIT'ed code of character classes that contain either all BMP or all non-BMP
1280         characters, we can eliminate the generic check we were doing do compute how much
1281         to advance after sucessfully matching a character in the class.
1282
1283                 Generic isBMP check      BMP only            non-BMP only
1284                 --------------           --------------      --------------
1285                 inc %r9d                 inc %r9d            add $0x2, %r9d
1286                 cmp $0x10000, %eax
1287                 jl isBMP
1288                 cmp %edx, %esi
1289                 jz atEndOfString
1290                 inc %r9d
1291                 inc %esi
1292          isBMP:
1293
1294         For character classes that contained non-BMP characters, we were always generating
1295         the code in the left column.  The middle column is the code we generate for character
1296         classes that contain only BMP characters.  The right column is the code we now
1297         generate if the character class has only non-BMP characters.  In the fix width cases,
1298         we can eliminate both the isBMP check as well as the atEndOfString check.  The
1299         atEndOfstring check is eliminated since we know how many characters this character
1300         class requires and that check can be factored out to the beginning of the current
1301         alternative.  For character classes that contain both BMP and non-BMP characters,
1302         we still generate the generic left column.
1303
1304         This change is a ~8% perf progression on UniPoker and a ~2% improvement on RexBench
1305         as a whole.
1306
1307         * runtime/RegExp.cpp:
1308         (JSC::RegExp::matchCompareWithInterpreter):
1309         * runtime/RegExpInlines.h:
1310         (JSC::RegExp::matchInline):
1311         * yarr/YarrInterpreter.cpp:
1312         (JSC::Yarr::Interpreter::checkCharacterClassDontAdvanceInputForNonBMP):
1313         (JSC::Yarr::Interpreter::matchCharacterClass):
1314         * yarr/YarrJIT.cpp:
1315         (JSC::Yarr::YarrGenerator::optimizeAlternative):
1316         (JSC::Yarr::YarrGenerator::matchCharacterClass):
1317         (JSC::Yarr::YarrGenerator::advanceIndexAfterCharacterClassTermMatch):
1318         (JSC::Yarr::YarrGenerator::tryReadUnicodeCharImpl):
1319         (JSC::Yarr::YarrGenerator::generateCharacterClassOnce):
1320         (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
1321         (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
1322         (JSC::Yarr::YarrGenerator::backtrackCharacterClassGreedy):
1323         (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
1324         (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
1325         (JSC::Yarr::YarrGenerator::generateEnter):
1326         (JSC::Yarr::YarrGenerator::YarrGenerator):
1327         (JSC::Yarr::YarrGenerator::compile):
1328         * yarr/YarrPattern.cpp:
1329         (JSC::Yarr::CharacterClassConstructor::CharacterClassConstructor):
1330         (JSC::Yarr::CharacterClassConstructor::reset):
1331         (JSC::Yarr::CharacterClassConstructor::charClass):
1332         (JSC::Yarr::CharacterClassConstructor::addSorted):
1333         (JSC::Yarr::CharacterClassConstructor::addSortedRange):
1334         (JSC::Yarr::CharacterClassConstructor::hasNonBMPCharacters):
1335         (JSC::Yarr::CharacterClassConstructor::characterWidths):
1336         (JSC::Yarr::PatternTerm::dump):
1337         (JSC::Yarr::anycharCreate):
1338         * yarr/YarrPattern.h:
1339         (JSC::Yarr::operator|):
1340         (JSC::Yarr::operator&):
1341         (JSC::Yarr::operator|=):
1342         (JSC::Yarr::CharacterClass::CharacterClass):
1343         (JSC::Yarr::CharacterClass::hasNonBMPCharacters):
1344         (JSC::Yarr::CharacterClass::hasOneCharacterSize):
1345         (JSC::Yarr::CharacterClass::hasOnlyNonBMPCharacters):
1346         (JSC::Yarr::PatternTerm::invert const):
1347         (JSC::Yarr::PatternTerm::invert): Deleted.
1348         * yarr/create_regex_tables:
1349         * yarr/generateYarrUnicodePropertyTables.py:
1350
1351 2019-03-28  Saam Barati  <sbarati@apple.com>
1352
1353         BackwardsGraph needs to consider back edges as the backward's root successor
1354         https://bugs.webkit.org/show_bug.cgi?id=195991
1355
1356         Reviewed by Filip Pizlo.
1357
1358         * b3/testb3.cpp:
1359         (JSC::B3::testInfiniteLoopDoesntCauseBadHoisting):
1360         (JSC::B3::run):
1361
1362 2019-03-28  Fujii Hironori  <Hironori.Fujii@sony.com>
1363
1364         Opcode.h(159,27): warning: adding 'unsigned int' to a string does not append to the string [-Wstring-plus-int]
1365         https://bugs.webkit.org/show_bug.cgi?id=196343
1366
1367         Reviewed by Saam Barati.
1368
1369         Clang reports a compilation warning and recommend '&PADDING_STRING[PADDING_STRING_LENGTH]'
1370         instead of 'PADDING_STRING + PADDING_STRING_LENGTH'.
1371
1372         * bytecode/Opcode.cpp:
1373         (JSC::padOpcodeName): Moved padOpcodeName from Opcode.h because
1374         this function is used only in Opcode.cpp. Changed macros
1375         PADDING_STRING and PADDING_STRING_LENGTH to simple variables.
1376         (JSC::compareOpcodePairIndices): Replaced pair with std::pair.
1377         * bytecode/Opcode.h:
1378         (JSC::padOpcodeName): Moved.
1379
1380 2019-03-28  Tadeu Zagallo  <tzagallo@apple.com>
1381
1382         CodeBlock::jettison() should disallow repatching its own calls
1383         https://bugs.webkit.org/show_bug.cgi?id=196359
1384         <rdar://problem/48973663>
1385
1386         Reviewed by Saam Barati.
1387
1388         CodeBlock::jettison() calls CommonData::invalidate, which replaces the `hlt`
1389         instruction with the jump to OSR exit. However, if the `hlt` was immediately
1390         followed by a call to the CodeBlock being jettisoned, we would write over the
1391         OSR exit address while unlinking all the incoming CallLinkInfos later in
1392         CodeBlock::jettison().
1393
1394         Change it so that we set a flag, `clearedByJettison`, in all the CallLinkInfos
1395         owned by the CodeBlock being jettisoned. If the flag is set, we will avoid
1396         repatching the call during unlinking. This is safe because this call will never
1397         be reachable again after the CodeBlock is jettisoned.
1398
1399         * bytecode/CallLinkInfo.cpp:
1400         (JSC::CallLinkInfo::CallLinkInfo):
1401         (JSC::CallLinkInfo::setCallee):
1402         (JSC::CallLinkInfo::clearCallee):
1403         (JSC::CallLinkInfo::setCodeBlock):
1404         (JSC::CallLinkInfo::clearCodeBlock):
1405         * bytecode/CallLinkInfo.h:
1406         (JSC::CallLinkInfo::clearedByJettison):
1407         (JSC::CallLinkInfo::setClearedByJettison):
1408         * bytecode/CodeBlock.cpp:
1409         (JSC::CodeBlock::jettison):
1410         * jit/Repatch.cpp:
1411         (JSC::revertCall):
1412
1413 2019-03-27  Yusuke Suzuki  <ysuzuki@apple.com>
1414
1415         [JSC] Drop VM and Context cache map in JavaScriptCore.framework
1416         https://bugs.webkit.org/show_bug.cgi?id=196341
1417
1418         Reviewed by Saam Barati.
1419
1420         Previously, we created Objective-C weak map to maintain JSVirtualMachine and JSContext wrappers corresponding to VM and JSGlobalObject.
1421         But Objective-C weak map is really memory costly. Even if the entry is only one, it consumes 2.5KB per weak map. Since we can modify
1422         JSC intrusively for JavaScriptCore.framework (and we already did it, like, holding JSWrapperMap in JSGlobalObject), we can just hold
1423         a pointer to a wrapper in VM and JSGlobalObject.
1424
1425         This patch adds void* members to VM and JSGlobalObject, which holds a non-strong reference to a wrapper. When a wrapper is gone, we
1426         clear this pointer too. This removes unnecessary two Objective-C weak maps, and save 5KB.
1427
1428         * API/JSContext.mm:
1429         (-[JSContext initWithVirtualMachine:]):
1430         (-[JSContext dealloc]):
1431         (-[JSContext initWithGlobalContextRef:]):
1432         (-[JSContext wrapperMap]):
1433         (+[JSContext contextWithJSGlobalContextRef:]):
1434         * API/JSVirtualMachine.mm:
1435         (-[JSVirtualMachine initWithContextGroupRef:]):
1436         (-[JSVirtualMachine dealloc]):
1437         (+[JSVirtualMachine virtualMachineWithContextGroupRef:]):
1438         (scanExternalObjectGraph):
1439         (scanExternalRememberedSet):
1440         (initWrapperCache): Deleted.
1441         (wrapperCache): Deleted.
1442         (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]): Deleted.
1443         (+[JSVMWrapperCache wrapperForJSContextGroupRef:]): Deleted.
1444         (-[JSVirtualMachine contextForGlobalContextRef:]): Deleted.
1445         (-[JSVirtualMachine addContext:forGlobalContextRef:]): Deleted.
1446         * API/JSVirtualMachineInternal.h:
1447         * runtime/JSGlobalObject.h:
1448         (JSC::JSGlobalObject::setAPIWrapper):
1449         (JSC::JSGlobalObject::apiWrapper const):
1450         * runtime/VM.h:
1451
1452 2019-03-28  Tadeu Zagallo  <tzagallo@apple.com>
1453
1454         In-memory code cache should not share bytecode across domains
1455         https://bugs.webkit.org/show_bug.cgi?id=196321
1456
1457         Reviewed by Geoffrey Garen.
1458
1459         Use the SourceProvider's URL to make sure that the hosts match for the
1460         two SourceCodeKeys in operator==.
1461
1462         * parser/SourceCodeKey.h:
1463         (JSC::SourceCodeKey::host const):
1464         (JSC::SourceCodeKey::operator== const):
1465
1466 2019-03-28  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>
1467
1468         Silence lot of warnings when compiling with clang
1469         https://bugs.webkit.org/show_bug.cgi?id=196310
1470
1471         Reviewed by Michael Catanzaro.
1472
1473         Initialize variable with default constructor.
1474
1475         * API/glib/JSCOptions.cpp:
1476         (jsc_options_foreach):
1477
1478 2019-03-27  Saam Barati  <sbarati@apple.com>
1479
1480         validateOSREntryValue with Int52 should box the value being checked into double format
1481         https://bugs.webkit.org/show_bug.cgi?id=196313
1482         <rdar://problem/49306703>
1483
1484         Reviewed by Yusuke Suzuki.
1485
1486         * dfg/DFGOSREntry.cpp:
1487         (JSC::DFG::prepareOSREntry):
1488         * ftl/FTLLowerDFGToB3.cpp:
1489         (JSC::FTL::DFG::LowerDFGToB3::validateAIState):
1490
1491 2019-03-27  Yusuke Suzuki  <ysuzuki@apple.com>
1492
1493         [JSC] Owner of watchpoints should validate at GC finalizing phase
1494         https://bugs.webkit.org/show_bug.cgi?id=195827
1495
1496         Reviewed by Filip Pizlo.
1497
1498         This patch fixes JSC's watchpoint liveness issue by the following two policies.
1499
1500         1. Watchpoint should have owner cell, and "fire" operation should be gaurded with owner cell's isLive check.
1501
1502         Watchpoints should hold its owner cell, and fire procedure should be guarded by `owner->isLive()`.
1503         When the owner cell is destroyed, these watchpoints are destroyed too. But this destruction can
1504         be delayed due to incremental sweeper. So the following condition can happen.
1505
1506         When we have a watchpoint like the following.
1507
1508             class XXXWatchpoint {
1509                 ObjectPropertyCondition m_key;
1510                 JSCell* m_owner;
1511             };
1512
1513         Both m_key's cell and m_owner is now unreachable from the root. So eventually, m_owner cell's destructor
1514         is called and this watchpoint will be destroyed. But before that, m_key's cell can be destroyed. And this
1515         watchpoint's fire procedure can be called since m_owner's destructor is not called yet. In this situation,
1516         we encounter the destroyed cell held in m_key. This problem can be avoided if we guard fire procedure with
1517         `m_owner->isLive()`. Until the owner cell is destroyed, this guard avoids "fire" procedure execution. And
1518         once the destructor of m_owner is called, this watchpoint will be destroyed too.
1519
1520         2. Watchpoint liveness should be maintained by owner cell's unconditional finalizer
1521
1522         Watchpoints often hold weak references to the other cell (like, m_key in the above example). If we do not
1523         delete watchpoints with dead cells when these weak cells become dead, these watchpoints continue holding dead cells,
1524         and watchpoint's fire operation can use these dead cells accidentally. isLive / isStillLive check for these weak cells
1525         in fire operation is not useful. Because these dead cells can be reused to the other live cells eventually, and this
1526         isLive / isStillLive checks fail to see these cells are live if they are reused. Appropriate way is deleting watchpoints
1527         with dead cells when finalizing GC. In this patch, we do this in unconditional finalizers in owner cells of watchpoints.
1528         We already did this in CodeBlock etc. We add the same thing to StructureRareData which owns watchpoints for toString operations.
1529
1530         * JavaScriptCore.xcodeproj/project.pbxproj:
1531         * Sources.txt:
1532         * bytecode/AdaptiveInferredPropertyValueWatchpointBase.h:
1533         (JSC::AdaptiveInferredPropertyValueWatchpointBase::StructureWatchpoint::StructureWatchpoint): Deleted.
1534         (JSC::AdaptiveInferredPropertyValueWatchpointBase::PropertyWatchpoint::PropertyWatchpoint): Deleted.
1535         * bytecode/CodeBlockJettisoningWatchpoint.h:
1536         (JSC::CodeBlockJettisoningWatchpoint::CodeBlockJettisoningWatchpoint): Deleted.
1537         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
1538         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::LLIntPrototypeLoadAdaptiveStructureWatchpoint):
1539         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
1540         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:
1541         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::key const): Deleted.
1542         * bytecode/StructureStubClearingWatchpoint.cpp:
1543         (JSC::StructureStubClearingWatchpoint::fireInternal):
1544         (JSC::WatchpointsOnStructureStubInfo::isValid const):
1545         * bytecode/StructureStubClearingWatchpoint.h:
1546         (JSC::StructureStubClearingWatchpoint::StructureStubClearingWatchpoint): Deleted.
1547         * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:
1548         (JSC::DFG::AdaptiveInferredPropertyValueWatchpoint::isValid const):
1549         * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:
1550         * dfg/DFGAdaptiveStructureWatchpoint.cpp:
1551         (JSC::DFG::AdaptiveStructureWatchpoint::fireInternal):
1552         * dfg/DFGAdaptiveStructureWatchpoint.h:
1553         (JSC::DFG::AdaptiveStructureWatchpoint::key const): Deleted.
1554         * dfg/DFGDesiredWatchpoints.cpp:
1555         (JSC::DFG::ArrayBufferViewWatchpointAdaptor::add):
1556         * heap/Heap.cpp:
1557         (JSC::Heap::finalizeUnconditionalFinalizers):
1558         * llint/LLIntSlowPaths.cpp:
1559         (JSC::LLInt::setupGetByIdPrototypeCache):
1560         * runtime/ArrayBuffer.cpp:
1561         (JSC::ArrayBuffer::notifyIncommingReferencesOfTransfer):
1562         * runtime/ArrayBufferNeuteringWatchpointSet.cpp: Renamed from Source/JavaScriptCore/runtime/ArrayBufferNeuteringWatchpoint.cpp.
1563         (JSC::ArrayBufferNeuteringWatchpointSet::ArrayBufferNeuteringWatchpointSet):
1564         (JSC::ArrayBufferNeuteringWatchpointSet::destroy):
1565         (JSC::ArrayBufferNeuteringWatchpointSet::create):
1566         (JSC::ArrayBufferNeuteringWatchpointSet::createStructure):
1567         (JSC::ArrayBufferNeuteringWatchpointSet::fireAll):
1568         * runtime/ArrayBufferNeuteringWatchpointSet.h: Renamed from Source/JavaScriptCore/runtime/ArrayBufferNeuteringWatchpoint.h.
1569         * runtime/FunctionRareData.h:
1570         * runtime/JSGlobalObject.cpp:
1571         (JSC::JSGlobalObject::init):
1572         (JSC::JSGlobalObject::tryInstallArraySpeciesWatchpoint):
1573         * runtime/ObjectPropertyChangeAdaptiveWatchpoint.h:
1574         (JSC::ObjectPropertyChangeAdaptiveWatchpoint::ObjectPropertyChangeAdaptiveWatchpoint): Deleted.
1575         * runtime/StructureRareData.cpp:
1576         (JSC::StructureRareData::finalizeUnconditionally):
1577         * runtime/StructureRareData.h:
1578         * runtime/VM.cpp:
1579         (JSC::VM::VM):
1580
1581 2019-03-26  Saam Barati  <sbarati@apple.com>
1582
1583         FTL: Emit code to validate AI's state when running the compiled code
1584         https://bugs.webkit.org/show_bug.cgi?id=195924
1585         <rdar://problem/49003422>
1586
1587         Reviewed by Filip Pizlo.
1588
1589         This patch adds code that between the execution of each node that validates
1590         the types that AI proves. This option is too expensive to turn on for our
1591         regression testing, but we think it will be valuable in other types of running
1592         modes, such as when running with a fuzzer.
1593         
1594         This patch also adds options to only probabilistically run this validation
1595         after the execution of each node. As the probability is lowered, there is
1596         less of a perf hit.
1597         
1598         This patch just adds this validation in the FTL. A follow-up patch will land
1599         it in the DFG too: https://bugs.webkit.org/show_bug.cgi?id=196219
1600
1601         * ftl/FTLLowerDFGToB3.cpp:
1602         (JSC::FTL::DFG::LowerDFGToB3::LowerDFGToB3):
1603         (JSC::FTL::DFG::LowerDFGToB3::compileBlock):
1604         (JSC::FTL::DFG::LowerDFGToB3::validateAIState):
1605         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
1606         (JSC::FTL::DFG::LowerDFGToB3::lowJSValue):
1607         * runtime/Options.h:
1608
1609 2019-03-26  Tadeu Zagallo  <tzagallo@apple.com>
1610
1611         WebAssembly: Fix f32.min, f64.min and f64.max operations on NaN
1612         https://bugs.webkit.org/show_bug.cgi?id=196217
1613
1614         Reviewed by Saam Barati.
1615
1616         Generalize the fix for f32.max to properly handle NaN by doing an extra GreatherThan
1617         comparison in r243446 to all min and max float operations.
1618
1619         * wasm/WasmAirIRGenerator.cpp:
1620         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Min>):
1621         (JSC::Wasm::AirIRGenerator::addFloatingPointMinOrMax):
1622         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Max>):
1623         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Min>):
1624         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Max>):
1625         * wasm/wasm.json:
1626
1627 2019-03-26  Andy VanWagoner  <andy@vanwagoner.family>
1628
1629         Intl.DateTimeFormat should obey 2-digit hour
1630         https://bugs.webkit.org/show_bug.cgi?id=195974
1631
1632         Reviewed by Keith Miller.
1633
1634         * runtime/IntlDateTimeFormat.cpp:
1635         (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
1636
1637 2019-03-25  Yusuke Suzuki  <ysuzuki@apple.com>
1638
1639         Heap::isMarked and friends should be instance methods
1640         https://bugs.webkit.org/show_bug.cgi?id=179988
1641
1642         Reviewed by Saam Barati.
1643
1644         Almost all the callers of Heap::isMarked have VM& reference. We should make Heap::isMarked instance function instead of static function
1645         so that we do not need to look up Heap from the cell.
1646
1647         * API/JSAPIWrapperObject.mm:
1648         (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots):
1649         * API/JSMarkingConstraintPrivate.cpp:
1650         (JSC::isMarked):
1651         * API/glib/JSAPIWrapperObjectGLib.cpp:
1652         (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots):
1653         * builtins/BuiltinExecutables.cpp:
1654         (JSC::BuiltinExecutables::finalizeUnconditionally):
1655         * bytecode/AccessCase.cpp:
1656         (JSC::AccessCase::visitWeak const):
1657         (JSC::AccessCase::propagateTransitions const):
1658         * bytecode/CallLinkInfo.cpp:
1659         (JSC::CallLinkInfo::visitWeak):
1660         * bytecode/CallLinkStatus.cpp:
1661         (JSC::CallLinkStatus::finalize):
1662         * bytecode/CallLinkStatus.h:
1663         * bytecode/CallVariant.cpp:
1664         (JSC::CallVariant::finalize):
1665         * bytecode/CallVariant.h:
1666         * bytecode/CodeBlock.cpp:
1667         (JSC::CodeBlock::shouldJettisonDueToWeakReference):
1668         (JSC::CodeBlock::shouldJettisonDueToOldAge):
1669         (JSC::shouldMarkTransition):
1670         (JSC::CodeBlock::propagateTransitions):
1671         (JSC::CodeBlock::determineLiveness):
1672         (JSC::CodeBlock::finalizeLLIntInlineCaches):
1673         (JSC::CodeBlock::finalizeUnconditionally):
1674         (JSC::CodeBlock::jettison):
1675         * bytecode/CodeBlock.h:
1676         * bytecode/ExecutableToCodeBlockEdge.cpp:
1677         (JSC::ExecutableToCodeBlockEdge::visitChildren):
1678         (JSC::ExecutableToCodeBlockEdge::finalizeUnconditionally):
1679         (JSC::ExecutableToCodeBlockEdge::runConstraint):
1680         * bytecode/GetByIdStatus.cpp:
1681         (JSC::GetByIdStatus::finalize):
1682         * bytecode/GetByIdStatus.h:
1683         * bytecode/GetByIdVariant.cpp:
1684         (JSC::GetByIdVariant::finalize):
1685         * bytecode/GetByIdVariant.h:
1686         * bytecode/InByIdStatus.cpp:
1687         (JSC::InByIdStatus::finalize):
1688         * bytecode/InByIdStatus.h:
1689         * bytecode/InByIdVariant.cpp:
1690         (JSC::InByIdVariant::finalize):
1691         * bytecode/InByIdVariant.h:
1692         * bytecode/ObjectPropertyCondition.cpp:
1693         (JSC::ObjectPropertyCondition::isStillLive const):
1694         * bytecode/ObjectPropertyCondition.h:
1695         * bytecode/ObjectPropertyConditionSet.cpp:
1696         (JSC::ObjectPropertyConditionSet::areStillLive const):
1697         * bytecode/ObjectPropertyConditionSet.h:
1698         * bytecode/PolymorphicAccess.cpp:
1699         (JSC::PolymorphicAccess::visitWeak const):
1700         * bytecode/PropertyCondition.cpp:
1701         (JSC::PropertyCondition::isStillLive const):
1702         * bytecode/PropertyCondition.h:
1703         * bytecode/PutByIdStatus.cpp:
1704         (JSC::PutByIdStatus::finalize):
1705         * bytecode/PutByIdStatus.h:
1706         * bytecode/PutByIdVariant.cpp:
1707         (JSC::PutByIdVariant::finalize):
1708         * bytecode/PutByIdVariant.h:
1709         * bytecode/RecordedStatuses.cpp:
1710         (JSC::RecordedStatuses::finalizeWithoutDeleting):
1711         (JSC::RecordedStatuses::finalize):
1712         * bytecode/RecordedStatuses.h:
1713         * bytecode/StructureSet.cpp:
1714         (JSC::StructureSet::isStillAlive const):
1715         * bytecode/StructureSet.h:
1716         * bytecode/StructureStubInfo.cpp:
1717         (JSC::StructureStubInfo::visitWeakReferences):
1718         * dfg/DFGPlan.cpp:
1719         (JSC::DFG::Plan::finalizeInGC):
1720         (JSC::DFG::Plan::isKnownToBeLiveDuringGC):
1721         * heap/GCIncomingRefCounted.h:
1722         * heap/GCIncomingRefCountedInlines.h:
1723         (JSC::GCIncomingRefCounted<T>::filterIncomingReferences):
1724         * heap/GCIncomingRefCountedSet.h:
1725         * heap/GCIncomingRefCountedSetInlines.h:
1726         (JSC::GCIncomingRefCountedSet<T>::lastChanceToFinalize):
1727         (JSC::GCIncomingRefCountedSet<T>::sweep):
1728         (JSC::GCIncomingRefCountedSet<T>::removeAll): Deleted.
1729         (JSC::GCIncomingRefCountedSet<T>::removeDead): Deleted.
1730         * heap/Heap.cpp:
1731         (JSC::Heap::addToRememberedSet):
1732         (JSC::Heap::runEndPhase):
1733         (JSC::Heap::sweepArrayBuffers):
1734         (JSC::Heap::addCoreConstraints):
1735         * heap/Heap.h:
1736         * heap/HeapInlines.h:
1737         (JSC::Heap::isMarked):
1738         * heap/HeapSnapshotBuilder.cpp:
1739         (JSC::HeapSnapshotBuilder::appendNode):
1740         * heap/SlotVisitor.cpp:
1741         (JSC::SlotVisitor::appendToMarkStack):
1742         (JSC::SlotVisitor::visitChildren):
1743         * jit/PolymorphicCallStubRoutine.cpp:
1744         (JSC::PolymorphicCallStubRoutine::visitWeak):
1745         * runtime/ErrorInstance.cpp:
1746         (JSC::ErrorInstance::finalizeUnconditionally):
1747         * runtime/InferredValueInlines.h:
1748         (JSC::InferredValue::finalizeUnconditionally):
1749         * runtime/StackFrame.h:
1750         (JSC::StackFrame::isMarked const):
1751         * runtime/Structure.cpp:
1752         (JSC::Structure::isCheapDuringGC):
1753         (JSC::Structure::markIfCheap):
1754         * runtime/Structure.h:
1755         * runtime/TypeProfiler.cpp:
1756         (JSC::TypeProfiler::invalidateTypeSetCache):
1757         * runtime/TypeProfiler.h:
1758         * runtime/TypeSet.cpp:
1759         (JSC::TypeSet::invalidateCache):
1760         * runtime/TypeSet.h:
1761         * runtime/WeakMapImpl.cpp:
1762         (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKeyValue>>::visitOutputConstraints):
1763         * runtime/WeakMapImplInlines.h:
1764         (JSC::WeakMapImpl<WeakMapBucket>::finalizeUnconditionally):
1765
1766 2019-03-25  Keith Miller  <keith_miller@apple.com>
1767
1768         ASSERTION FAILED: m_op == CompareStrictEq in JSC::DFG::Node::convertToCompareEqPtr(JSC::DFG::FrozenValue *, JSC::DFG::Edge)
1769         https://bugs.webkit.org/show_bug.cgi?id=196176
1770
1771         Reviewed by Saam Barati.
1772
1773         convertToCompareEqPtr should allow for either CompareStrictEq or
1774         the SameValue DFG node. This fixes the old assertion that only
1775         allowed CompareStrictEq.
1776
1777         * dfg/DFGNode.h:
1778         (JSC::DFG::Node::convertToCompareEqPtr):
1779
1780 2019-03-25  Tadeu Zagallo  <tzagallo@apple.com>
1781
1782         WebAssembly: f32.max with NaN generates incorrect result
1783         https://bugs.webkit.org/show_bug.cgi?id=175691
1784         <rdar://problem/33952228>
1785
1786         Reviewed by Saam Barati.
1787
1788         Fix the B3 and Air compilation for f32.max. In order to handle the NaN
1789         case, we need an extra GreaterThan comparison on top of the existing
1790         Equal and LessThan ones.
1791
1792         * wasm/WasmAirIRGenerator.cpp:
1793         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Max>):
1794         * wasm/wasm.json:
1795
1796 2019-03-25  Yusuke Suzuki  <ysuzuki@apple.com>
1797
1798         Unreviewed, speculative fix for CLoop build on CPU(UNKNOWN)
1799         https://bugs.webkit.org/show_bug.cgi?id=195982
1800
1801         * jit/ExecutableAllocator.h:
1802         (JSC::ExecutableAllocator::initializeUnderlyingAllocator):
1803
1804 2019-03-25  Gyuyoung Kim  <gyuyoung.kim@webkit.org>
1805
1806         Remove NavigatorContentUtils in WebCore/Modules
1807         https://bugs.webkit.org/show_bug.cgi?id=196070
1808
1809         Reviewed by Alex Christensen.
1810
1811         NavigatorContentUtils was to support the custom scheme spec [1].
1812         However, in WebKit side, no port has supported the feature in
1813         WebKit layer after EFL port was removed. So there has been the
1814         only IDL implementation of the NavigatorContentUtils in WebCore.
1815         So we don't need to keep the implementation in WebCore anymore.
1816
1817         [1] https://html.spec.whatwg.org/multipage/system-state.html#custom-handlers
1818
1819         * Configurations/FeatureDefines.xcconfig:
1820
1821 2019-03-23  Mark Lam  <mark.lam@apple.com>
1822
1823         Rolling out r243032 and r243071 because the fix is incorrect.
1824         https://bugs.webkit.org/show_bug.cgi?id=195892
1825         <rdar://problem/48981239>
1826
1827         Not reviewed.
1828
1829         The fix is incorrect: it relies on being able to determine liveness of an object
1830         in an ObjectPropertyCondition based on the state of the object's MarkedBit.
1831         However, there's no guarantee that GC has run and that the MarkedBit is already
1832         set even if the object is live.  As a result, we may not re-install adaptive
1833         watchpoints based on presumed dead objects which are actually live.
1834
1835         I'm rolling this out, and will implement a more comprehensive fix to handle
1836         watchpoint liveness later.
1837
1838         * bytecode/AdaptiveInferredPropertyValueWatchpointBase.cpp:
1839         (JSC::AdaptiveInferredPropertyValueWatchpointBase::fire):
1840         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
1841         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
1842         * bytecode/ObjectPropertyCondition.cpp:
1843         (JSC::ObjectPropertyCondition::dumpInContext const):
1844         * bytecode/StructureStubClearingWatchpoint.cpp:
1845         (JSC::StructureStubClearingWatchpoint::fireInternal):
1846         * dfg/DFGAdaptiveStructureWatchpoint.cpp:
1847         (JSC::DFG::AdaptiveStructureWatchpoint::fireInternal):
1848         * runtime/StructureRareData.cpp:
1849         (JSC::ObjectToStringAdaptiveStructureWatchpoint::fireInternal):
1850
1851 2019-03-23  Keith Miller  <keith_miller@apple.com>
1852
1853         Refactor clz/ctz and fix getLSBSet.
1854         https://bugs.webkit.org/show_bug.cgi?id=196162
1855
1856         Reviewed by Saam Barati.
1857
1858         Refactor references of clz32/64 and ctz32 to use clz and ctz,
1859         respectively.
1860
1861         * dfg/DFGAbstractInterpreterInlines.h:
1862         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
1863         * dfg/DFGOperations.cpp:
1864         * runtime/JSBigInt.cpp:
1865         (JSC::JSBigInt::digitDiv):
1866         (JSC::JSBigInt::absoluteDivWithBigIntDivisor):
1867         (JSC::JSBigInt::calculateMaximumCharactersRequired):
1868         (JSC::JSBigInt::toStringBasePowerOfTwo):
1869         (JSC::JSBigInt::compareToDouble):
1870         * runtime/MathObject.cpp:
1871         (JSC::mathProtoFuncClz32):
1872
1873 2019-03-23  Yusuke Suzuki  <ysuzuki@apple.com>
1874
1875         [JSC] Shrink sizeof(RegExp)
1876         https://bugs.webkit.org/show_bug.cgi?id=196133
1877
1878         Reviewed by Mark Lam.
1879
1880         Some applications have many RegExp cells. But RegExp cells are very large (144B).
1881         This patch reduces the size from 144B to 48B by,
1882
1883         1. Allocate Yarr::YarrCodeBlock in non-GC heap. We can avoid this allocation if JIT is disabled.
1884         2. m_captureGroupNames and m_namedGroupToParenIndex are moved to RareData. They are only used when RegExp has named capture groups.
1885
1886         * runtime/RegExp.cpp:
1887         (JSC::RegExp::finishCreation):
1888         (JSC::RegExp::estimatedSize):
1889         (JSC::RegExp::compile):
1890         (JSC::RegExp::matchConcurrently):
1891         (JSC::RegExp::compileMatchOnly):
1892         (JSC::RegExp::deleteCode):
1893         (JSC::RegExp::printTraceData):
1894         * runtime/RegExp.h:
1895         * runtime/RegExpInlines.h:
1896         (JSC::RegExp::hasCodeFor):
1897         (JSC::RegExp::matchInline):
1898         (JSC::RegExp::hasMatchOnlyCodeFor):
1899
1900 2019-03-22  Keith Rollin  <krollin@apple.com>
1901
1902         Enable ThinLTO support in Production builds
1903         https://bugs.webkit.org/show_bug.cgi?id=190758
1904         <rdar://problem/45413233>
1905
1906         Reviewed by Daniel Bates.
1907
1908         Tweak JavaScriptCore's Base.xcconfig to be more in-line with other
1909         .xcconfig files with regards to LTO settings. However, don't actually
1910         enable LTO for JavaScriptCore. LTO is not enabled for JavaScriptCore
1911         due to <rdar://problem/24543547>.
1912
1913         * Configurations/Base.xcconfig:
1914
1915 2019-03-22  Mark Lam  <mark.lam@apple.com>
1916
1917         Placate exception check validation in genericTypedArrayViewProtoFuncLastIndexOf().
1918         https://bugs.webkit.org/show_bug.cgi?id=196154
1919         <rdar://problem/49145307>
1920
1921         Reviewed by Filip Pizlo.
1922
1923         * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
1924         (JSC::genericTypedArrayViewProtoFuncLastIndexOf):
1925
1926 2019-03-22  Mark Lam  <mark.lam@apple.com>
1927
1928         Placate exception check validation in constructJSWebAssemblyLinkError().
1929         https://bugs.webkit.org/show_bug.cgi?id=196152
1930         <rdar://problem/49145257>
1931
1932         Reviewed by Michael Saboff.
1933
1934         * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
1935         (JSC::constructJSWebAssemblyLinkError):
1936
1937 2019-03-22  Timothy Hatcher  <timothy@apple.com>
1938
1939         Change macosx() to macos() in WK_API... and JSC_API... macros.
1940         https://bugs.webkit.org/show_bug.cgi?id=196106
1941
1942         Reviewed by Brian Burg.
1943
1944         * API/JSBasePrivate.h:
1945         * API/JSContext.h:
1946         * API/JSContextPrivate.h:
1947         * API/JSContextRef.h:
1948         * API/JSContextRefInternal.h:
1949         * API/JSContextRefPrivate.h:
1950         * API/JSManagedValue.h:
1951         * API/JSObjectRef.h:
1952         * API/JSObjectRefPrivate.h:
1953         * API/JSRemoteInspector.h:
1954         * API/JSScript.h:
1955         * API/JSTypedArray.h:
1956         * API/JSValue.h:
1957         * API/JSValuePrivate.h:
1958         * API/JSValueRef.h:
1959         * API/JSVirtualMachinePrivate.h:
1960
1961 2019-03-22  Yusuke Suzuki  <ysuzuki@apple.com>
1962
1963         Unreviewed, build fix for Windows
1964         https://bugs.webkit.org/show_bug.cgi?id=196122
1965
1966         * runtime/FunctionExecutable.cpp:
1967
1968 2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>
1969
1970         [JSC] Shrink sizeof(FunctionExecutable) by 16bytes
1971         https://bugs.webkit.org/show_bug.cgi?id=196122
1972
1973         Reviewed by Saam Barati.
1974
1975         This patch reduces sizeof(FunctionExecutable) by 16 bytes.
1976
1977         1. ScriptExecutable::m_numParametersForCall and ScriptExecutable::m_numParametersForConstruct are not used in a meaningful way. Removed them.
1978         2. ScriptExecutable::m_lastLine and ScriptExecutable::m_endColumn can be calculated from UnlinkedFunctionExecutable. So FunctionExecutable does not need to hold it.
1979            This patch adds GlobalExecutable, which are non-function ScriptExecutables, and move m_lastLine and m_endColumn to this class.
1980         3. FunctionExecutable still needs to have the feature overriding m_lastLine and m_endColumn. We move overridden data in FunctionExecutable::RareData.
1981
1982         * CMakeLists.txt:
1983         * JavaScriptCore.xcodeproj/project.pbxproj:
1984         * Sources.txt:
1985         * bytecode/UnlinkedFunctionExecutable.cpp:
1986         (JSC::UnlinkedFunctionExecutable::link):
1987         * runtime/EvalExecutable.cpp:
1988         (JSC::EvalExecutable::EvalExecutable):
1989         * runtime/EvalExecutable.h:
1990         * runtime/FunctionExecutable.cpp:
1991         (JSC::FunctionExecutable::FunctionExecutable):
1992         (JSC::FunctionExecutable::ensureRareDataSlow):
1993         (JSC::FunctionExecutable::overrideInfo):
1994         * runtime/FunctionExecutable.h:
1995         * runtime/GlobalExecutable.cpp: Copied from Source/JavaScriptCore/tools/FunctionOverrides.h.
1996         * runtime/GlobalExecutable.h: Copied from Source/JavaScriptCore/tools/FunctionOverrides.h.
1997         (JSC::GlobalExecutable::lastLine const):
1998         (JSC::GlobalExecutable::endColumn const):
1999         (JSC::GlobalExecutable::recordParse):
2000         (JSC::GlobalExecutable::GlobalExecutable):
2001         * runtime/ModuleProgramExecutable.cpp:
2002         (JSC::ModuleProgramExecutable::ModuleProgramExecutable):
2003         * runtime/ModuleProgramExecutable.h:
2004         * runtime/ProgramExecutable.cpp:
2005         (JSC::ProgramExecutable::ProgramExecutable):
2006         * runtime/ProgramExecutable.h:
2007         * runtime/ScriptExecutable.cpp:
2008         (JSC::ScriptExecutable::clearCode):
2009         (JSC::ScriptExecutable::installCode):
2010         (JSC::ScriptExecutable::hasClearableCode const):
2011         (JSC::ScriptExecutable::newCodeBlockFor):
2012         (JSC::ScriptExecutable::typeProfilingEndOffset const):
2013         (JSC::ScriptExecutable::recordParse):
2014         (JSC::ScriptExecutable::lastLine const):
2015         (JSC::ScriptExecutable::endColumn const):
2016         * runtime/ScriptExecutable.h:
2017         (JSC::ScriptExecutable::hasJITCodeForCall const):
2018         (JSC::ScriptExecutable::hasJITCodeForConstruct const):
2019         (JSC::ScriptExecutable::recordParse):
2020         (JSC::ScriptExecutable::lastLine const): Deleted.
2021         (JSC::ScriptExecutable::endColumn const): Deleted.
2022         * tools/FunctionOverrides.h:
2023
2024 2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>
2025
2026         [JSC] Shrink sizeof(RegExpObject)
2027         https://bugs.webkit.org/show_bug.cgi?id=196130
2028
2029         Reviewed by Saam Barati.
2030
2031         sizeof(RegExpObject) is 48B due to one bool flag. We should compress this flag into lower bit of RegExp* field so that we can make RegExpObject 32B.
2032         It saves memory footprint 1.3% in RAMification's regexp.
2033
2034         * dfg/DFGSpeculativeJIT.cpp:
2035         (JSC::DFG::SpeculativeJIT::compileNewRegexp):
2036         (JSC::DFG::SpeculativeJIT::compileSetRegExpObjectLastIndex):
2037         * ftl/FTLAbstractHeapRepository.h:
2038         * ftl/FTLLowerDFGToB3.cpp:
2039         (JSC::FTL::DFG::LowerDFGToB3::compileNewRegexp):
2040         (JSC::FTL::DFG::LowerDFGToB3::compileSetRegExpObjectLastIndex):
2041         * runtime/RegExpObject.cpp:
2042         (JSC::RegExpObject::RegExpObject):
2043         (JSC::RegExpObject::visitChildren):
2044         (JSC::RegExpObject::getOwnPropertySlot):
2045         (JSC::RegExpObject::defineOwnProperty):
2046         * runtime/RegExpObject.h:
2047
2048 2019-03-21  Tomas Popela  <tpopela@redhat.com>
2049
2050         [JSC] Fix build after r243232 on unsupported 64bit architectures
2051         https://bugs.webkit.org/show_bug.cgi?id=196072
2052
2053         Reviewed by Keith Miller.
2054
2055         As Keith suggested we already expect 16 free bits at the top of any
2056         pointer for JSValue even for the unsupported 64 bit arches.
2057
2058         * bytecode/CodeOrigin.h:
2059
2060 2019-03-21  Mark Lam  <mark.lam@apple.com>
2061
2062         Remove an invalid assertion in DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined().
2063         https://bugs.webkit.org/show_bug.cgi?id=196116
2064         <rdar://problem/48976951>
2065
2066         Reviewed by Filip Pizlo.
2067
2068         The DFG backend should not make assumptions about what optimizations the front end
2069         will or will not do.  The assertion asserts that the operand cannot be known to be
2070         a cell.  However, it is not guaranteed that the front end will fold away this case.
2071         Also, the DFG backend is perfectly capable of generating code to handle the case
2072         where the operand is a cell.
2073
2074         The attached test case demonstrates a case where the operand can be a known cell.
2075         The test needs to be run with the concurrent JIT and GC, and is racy.  It used to
2076         trip up this assertion about once every 10 runs or so.
2077
2078         * dfg/DFGSpeculativeJIT64.cpp:
2079         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined):
2080
2081 2019-03-21  Tadeu Zagallo  <tzagallo@apple.com>
2082
2083         JSC::createError should clear exception thrown by errorDescriptionForValue
2084         https://bugs.webkit.org/show_bug.cgi?id=196089
2085
2086         Reviewed by Mark Lam.
2087
2088         errorDescriptionForValue returns a nullString in case of failure, but it
2089         might also throw an OOM exception when resolving a rope string. We need
2090         to clear any potential exceptions thrown by errorDescriptionForValue
2091         before returning the OOM from JSC::createError.
2092
2093         * runtime/ExceptionHelpers.cpp:
2094         (JSC::createError):
2095
2096 2019-03-21  Robin Morisset  <rmorisset@apple.com>
2097
2098         B3::Opcode can fit in a single byte, shrinking B3Value by 8 bytes
2099         https://bugs.webkit.org/show_bug.cgi?id=196014
2100
2101         Reviewed by Keith Miller.
2102
2103         B3::Opcode has less than one hundred cases, so it can easily fit in one byte (from two currently)
2104         This shrinks B3::Kind from 4 bytes to 2 (by removing the byte of padding at the end).
2105         This in turns eliminate padding from B3::Value, shrinking it by 8 bytes (out of 80).
2106
2107         * b3/B3Opcode.h:
2108
2109 2019-03-21  Michael Catanzaro  <mcatanzaro@igalia.com>
2110
2111         Unreviewed, more clang 3.8 build fixes
2112         https://bugs.webkit.org/show_bug.cgi?id=195947
2113         <rdar://problem/49069219>
2114
2115         In the spirit of making our code worse to please old compilers....
2116
2117         * bindings/ScriptValue.cpp:
2118         (Inspector::jsToInspectorValue):
2119         * bytecode/GetterSetterAccessCase.cpp:
2120         (JSC::GetterSetterAccessCase::create):
2121         (JSC::GetterSetterAccessCase::clone const):
2122         * bytecode/InstanceOfAccessCase.cpp:
2123         (JSC::InstanceOfAccessCase::clone const):
2124         * bytecode/IntrinsicGetterAccessCase.cpp:
2125         (JSC::IntrinsicGetterAccessCase::clone const):
2126         * bytecode/ModuleNamespaceAccessCase.cpp:
2127         (JSC::ModuleNamespaceAccessCase::clone const):
2128         * bytecode/ProxyableAccessCase.cpp:
2129         (JSC::ProxyableAccessCase::clone const):
2130
2131 2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>
2132
2133         [JSC] Do not create JIT related data under non-JIT mode
2134         https://bugs.webkit.org/show_bug.cgi?id=195982
2135
2136         Reviewed by Mark Lam.
2137
2138         We avoid creations of JIT related data structures under non-JIT mode.
2139         This patch removes the following allocations.
2140
2141         1. JITThunks
2142         2. FTLThunks
2143         3. FixedVMPoolExecutableAllocator
2144         4. noJITValueProfileSingleton since it is no longer used
2145         5. ARM disassembler should be initialized when it is used
2146         6. Wasm related data structures are accidentally allocated if VM::canUseJIT() == false &&
2147            Options::useWebAssembly() == true. Add Wasm::isSupported() function to check the both conditions.
2148
2149         * CMakeLists.txt:
2150         * JavaScriptCore.xcodeproj/project.pbxproj:
2151         * heap/Heap.cpp:
2152         (JSC::Heap::runEndPhase):
2153         * jit/ExecutableAllocator.cpp:
2154         (JSC::FixedVMPoolExecutableAllocator::~FixedVMPoolExecutableAllocator):
2155         (JSC::ExecutableAllocator::initializeUnderlyingAllocator):
2156         (JSC::ExecutableAllocator::isValid const):
2157         (JSC::ExecutableAllocator::underMemoryPressure):
2158         (JSC::ExecutableAllocator::memoryPressureMultiplier):
2159         (JSC::ExecutableAllocator::allocate):
2160         (JSC::ExecutableAllocator::isValidExecutableMemory):
2161         (JSC::ExecutableAllocator::getLock const):
2162         (JSC::ExecutableAllocator::committedByteCount):
2163         (JSC::ExecutableAllocator::dumpProfile):
2164         (JSC::startOfFixedExecutableMemoryPoolImpl):
2165         (JSC::endOfFixedExecutableMemoryPoolImpl):
2166         (JSC::ExecutableAllocator::initialize):
2167         (JSC::ExecutableAllocator::initializeAllocator): Deleted.
2168         (JSC::ExecutableAllocator::ExecutableAllocator): Deleted.
2169         (JSC::ExecutableAllocator::~ExecutableAllocator): Deleted.
2170         * jit/ExecutableAllocator.h:
2171         (JSC::ExecutableAllocatorBase::isValid const):
2172         (JSC::ExecutableAllocatorBase::underMemoryPressure):
2173         (JSC::ExecutableAllocatorBase::memoryPressureMultiplier):
2174         (JSC::ExecutableAllocatorBase::dumpProfile):
2175         (JSC::ExecutableAllocatorBase::allocate):
2176         (JSC::ExecutableAllocatorBase::setJITEnabled):
2177         (JSC::ExecutableAllocatorBase::isValidExecutableMemory):
2178         (JSC::ExecutableAllocatorBase::committedByteCount):
2179         (JSC::ExecutableAllocatorBase::getLock const):
2180         (JSC::ExecutableAllocator::isValid const): Deleted.
2181         (JSC::ExecutableAllocator::underMemoryPressure): Deleted.
2182         (JSC::ExecutableAllocator::memoryPressureMultiplier): Deleted.
2183         (JSC::ExecutableAllocator::allocate): Deleted.
2184         (JSC::ExecutableAllocator::setJITEnabled): Deleted.
2185         (JSC::ExecutableAllocator::isValidExecutableMemory): Deleted.
2186         (JSC::ExecutableAllocator::committedByteCount): Deleted.
2187         (JSC::ExecutableAllocator::getLock const): Deleted.
2188         * jsc.cpp:
2189         (functionWebAssemblyMemoryMode):
2190         * runtime/InitializeThreading.cpp:
2191         (JSC::initializeThreading):
2192         * runtime/JSGlobalObject.cpp:
2193         (JSC::JSGlobalObject::init):
2194         * runtime/JSLock.cpp:
2195         (JSC::JSLock::didAcquireLock):
2196         * runtime/Options.cpp:
2197         (JSC::recomputeDependentOptions):
2198         * runtime/VM.cpp:
2199         (JSC::enableAssembler):
2200         (JSC::VM::canUseAssembler):
2201         (JSC::VM::VM):
2202         * runtime/VM.h:
2203         * wasm/WasmCapabilities.h: Added.
2204         (JSC::Wasm::isSupported):
2205         * wasm/WasmFaultSignalHandler.cpp:
2206         (JSC::Wasm::enableFastMemory):
2207
2208 2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>
2209
2210         [JSC] Fix JSC build with newer ICU
2211         https://bugs.webkit.org/show_bug.cgi?id=196098
2212
2213         Reviewed by Keith Miller.
2214
2215         IntlDateTimeFormat and IntlNumberFormat have switch statement over ICU's enums. However it lacks "default" clause so that
2216         the compile error occurs when a new enum value is added in ICU side. We should have "default" clause which just fallbacks
2217         "unknown"_s case. The behavior is not changed since we already have `return "unknown"_s;` statement anyway after the
2218         switch statement. This patch just suppresses a compile error.
2219
2220         * runtime/IntlDateTimeFormat.cpp:
2221         (JSC::IntlDateTimeFormat::partTypeString):
2222         * runtime/IntlNumberFormat.cpp:
2223         (JSC::IntlNumberFormat::partTypeString):
2224
2225 2019-03-21  Tadeu Zagallo  <tzagallo@apple.com>
2226
2227         JSObject::putDirectIndexSlowOrBeyondVectorLength should check if indexIsSufficientlyBeyondLengthForSparseMap
2228         https://bugs.webkit.org/show_bug.cgi?id=196078
2229         <rdar://problem/35925380>
2230
2231         Reviewed by Mark Lam.
2232
2233         Unlike the other variations of putByIndex, it only checked if the index
2234         was larger than MIN_SPARSE_ARRAY_INDEX when the indexingType was
2235         ALL_BLANK_INDEXING_TYPES. This resulted in a huge butterfly being
2236         allocated for object literals (e.g. `{[9e4]: ...}`) and objects parsed
2237         from JSON.
2238
2239         * runtime/JSObject.cpp:
2240         (JSC::JSObject::putDirectIndexSlowOrBeyondVectorLength):
2241
2242 2019-03-21  Tadeu Zagallo  <tzagallo@apple.com>
2243
2244         CachedUnlinkedSourceCodeShape::m_provider should be a CachedRefPtr
2245         https://bugs.webkit.org/show_bug.cgi?id=196079
2246
2247         Reviewed by Saam Barati.
2248
2249         It was mistakenly cached as CachedPtr, which was leaking the decoded SourceProvider.
2250
2251         * runtime/CachedTypes.cpp:
2252         (JSC::CachedUnlinkedSourceCodeShape::encode):
2253
2254 2019-03-21  Mark Lam  <mark.lam@apple.com>
2255
2256         Placate exception check validation in operationArrayIndexOfString().
2257         https://bugs.webkit.org/show_bug.cgi?id=196067
2258         <rdar://problem/49056572>
2259
2260         Reviewed by Michael Saboff.
2261
2262         * dfg/DFGOperations.cpp:
2263
2264 2019-03-21  Xan Lopez  <xan@igalia.com>
2265
2266         [JSC][x86] Drop support for x87 floating point
2267         https://bugs.webkit.org/show_bug.cgi?id=194853
2268
2269         Reviewed by Don Olmstead.
2270
2271         Require SSE2 throughout the codebase, and remove x87 support where
2272         it was optionally available. SSE2 detection happens at compile
2273         time through a static_assert.
2274
2275         * assembler/MacroAssemblerX86.h:
2276         (JSC::MacroAssemblerX86::storeDouble):
2277         (JSC::MacroAssemblerX86::moveDoubleToInts):
2278         (JSC::MacroAssemblerX86::supportsFloatingPoint):
2279         (JSC::MacroAssemblerX86::supportsFloatingPointTruncate):
2280         (JSC::MacroAssemblerX86::supportsFloatingPointSqrt):
2281         (JSC::MacroAssemblerX86::supportsFloatingPointAbs):
2282         * assembler/MacroAssemblerX86Common.cpp:
2283         * assembler/MacroAssemblerX86Common.h:
2284         (JSC::MacroAssemblerX86Common::moveDouble):
2285         (JSC::MacroAssemblerX86Common::loadDouble):
2286         (JSC::MacroAssemblerX86Common::loadFloat):
2287         (JSC::MacroAssemblerX86Common::storeDouble):
2288         (JSC::MacroAssemblerX86Common::storeFloat):
2289         (JSC::MacroAssemblerX86Common::convertDoubleToFloat):
2290         (JSC::MacroAssemblerX86Common::convertFloatToDouble):
2291         (JSC::MacroAssemblerX86Common::addDouble):
2292         (JSC::MacroAssemblerX86Common::addFloat):
2293         (JSC::MacroAssemblerX86Common::divDouble):
2294         (JSC::MacroAssemblerX86Common::divFloat):
2295         (JSC::MacroAssemblerX86Common::subDouble):
2296         (JSC::MacroAssemblerX86Common::subFloat):
2297         (JSC::MacroAssemblerX86Common::mulDouble):
2298         (JSC::MacroAssemblerX86Common::mulFloat):
2299         (JSC::MacroAssemblerX86Common::convertInt32ToDouble):
2300         (JSC::MacroAssemblerX86Common::convertInt32ToFloat):
2301         (JSC::MacroAssemblerX86Common::branchDouble):
2302         (JSC::MacroAssemblerX86Common::branchFloat):
2303         (JSC::MacroAssemblerX86Common::compareDouble):
2304         (JSC::MacroAssemblerX86Common::compareFloat):
2305         (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
2306         (JSC::MacroAssemblerX86Common::truncateDoubleToInt32):
2307         (JSC::MacroAssemblerX86Common::truncateFloatToInt32):
2308         (JSC::MacroAssemblerX86Common::branchConvertDoubleToInt32):
2309         (JSC::MacroAssemblerX86Common::branchDoubleNonZero):
2310         (JSC::MacroAssemblerX86Common::branchDoubleZeroOrNaN):
2311         (JSC::MacroAssemblerX86Common::lshiftPacked):
2312         (JSC::MacroAssemblerX86Common::rshiftPacked):
2313         (JSC::MacroAssemblerX86Common::orPacked):
2314         (JSC::MacroAssemblerX86Common::move32ToFloat):
2315         (JSC::MacroAssemblerX86Common::moveFloatTo32):
2316         (JSC::MacroAssemblerX86Common::moveConditionallyDouble):
2317         (JSC::MacroAssemblerX86Common::moveConditionallyFloat):
2318         * offlineasm/x86.rb:
2319         * runtime/MathCommon.cpp:
2320         (JSC::operationMathPow):
2321
2322 2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>
2323
2324         [GLIB] User data not correctly passed to callback of functions and constructors with no parameters
2325         https://bugs.webkit.org/show_bug.cgi?id=196073
2326
2327         Reviewed by Michael Catanzaro.
2328
2329         This is because GClosure always expects a first parameter as instance. In case of functions or constructors with
2330         no parameters we insert a fake instance which is just a null pointer that is ignored by the callback. But
2331         if the function/constructor has user data the callback will expect one parameter for the user data. In that case
2332         we can simply swap instance/user data so that the fake instance will be the second argument and user data the
2333         first one.
2334
2335         * API/glib/JSCClass.cpp:
2336         (jscClassCreateConstructor): Use g_cclosure_new_swap() if parameters is empty and user data was provided.
2337         * API/glib/JSCValue.cpp:
2338         (jscValueFunctionCreate): Ditto.
2339
2340 2019-03-21  Pablo Saavedra  <psaavedra@igalia.com>
2341
2342         [JSC][32-bit] Build failure after r243232
2343         https://bugs.webkit.org/show_bug.cgi?id=196068
2344
2345         Reviewed by Mark Lam.
2346
2347         * dfg/DFGOSRExit.cpp:
2348         (JSC::DFG::reifyInlinedCallFrames):
2349         * dfg/DFGOSRExitCompilerCommon.cpp:
2350         (JSC::DFG::reifyInlinedCallFrames):
2351
2352 2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>
2353
2354         [GLib] Returning G_TYPE_OBJECT from a method does not work
2355         https://bugs.webkit.org/show_bug.cgi?id=195574
2356
2357         Reviewed by Michael Catanzaro.
2358
2359         Add more documentation to clarify the ownership of wrapped objects when created and when returned by functions.
2360
2361         * API/glib/JSCCallbackFunction.cpp:
2362         (JSC::JSCCallbackFunction::construct): Also allow to return boxed types from a constructor.
2363         * API/glib/JSCClass.cpp:
2364         * API/glib/JSCValue.cpp:
2365
2366 2019-03-21  Mark Lam  <mark.lam@apple.com>
2367
2368         Cap length of an array with spread to MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH.
2369         https://bugs.webkit.org/show_bug.cgi?id=196055
2370         <rdar://problem/49067448>
2371
2372         Reviewed by Yusuke Suzuki.
2373
2374         We are doing this because:
2375         1. We expect the array to be densely packed.
2376         2. SpeculativeJIT::compileAllocateNewArrayWithSize() (and the FTL equivalent)
2377            expects the array length to be less than MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH
2378            if we don't want to use an ArrayStorage shape.
2379         3. There's no reason why an array with spread needs to be that large anyway.
2380            MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH is plenty.
2381
2382         In this patch, we also add a debug assert in compileAllocateNewArrayWithSize() and
2383         emitAllocateButterfly() to check for overflows.
2384
2385         * assembler/AbortReason.h:
2386         * dfg/DFGOperations.cpp:
2387         * dfg/DFGSpeculativeJIT.cpp:
2388         (JSC::DFG::SpeculativeJIT::compileCreateRest):
2389         (JSC::DFG::SpeculativeJIT::compileNewArrayWithSpread):
2390         (JSC::DFG::SpeculativeJIT::emitAllocateButterfly):
2391         (JSC::DFG::SpeculativeJIT::compileAllocateNewArrayWithSize):
2392         * ftl/FTLLowerDFGToB3.cpp:
2393         (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
2394         * runtime/ArrayConventions.h:
2395         * runtime/CommonSlowPaths.cpp:
2396         (JSC::SLOW_PATH_DECL):
2397
2398 2019-03-20  Yusuke Suzuki  <ysuzuki@apple.com>
2399
2400         [JSC] Use finalizer in JSGlobalLexicalEnvironment and JSGlobalObject
2401         https://bugs.webkit.org/show_bug.cgi?id=195992
2402
2403         Reviewed by Keith Miller and Mark Lam.
2404
2405         JSGlobalLexicalEnvironment and JSGlobalObject have their own CompleteSubspace to call destructors while they are not inheriting JSDestructibleObject.
2406         But it is too costly since (1) it requires CompleteSubspace in VM, (2) both objects allocate MarkedBlocks while # of them are really small.
2407
2408         Instead of using CompleteSubspace, we just set finalizers for them. Since these objects are rarely allocated, setting finalizers does not show
2409         memory / performance problems (actually, previously we used finalizer for ArrayPrototype due to the same reason, and it does not show any problems).
2410
2411         And we also add following two changes to JSSegmentedVariableObject.
2412
2413         1. Remove one boolean used for debugging in Release build. It enlarges sizeof(JSSegmentedVariableObject) and allocates one more MarkedBlock.
2414         2. Use cellLock() instead.
2415
2416         * CMakeLists.txt:
2417         * JavaScriptCore.xcodeproj/project.pbxproj:
2418         * Sources.txt:
2419         * runtime/JSSegmentedVariableObject.cpp:
2420         (JSC::JSSegmentedVariableObject::findVariableIndex):
2421         (JSC::JSSegmentedVariableObject::addVariables):
2422         (JSC::JSSegmentedVariableObject::visitChildren):
2423         (JSC::JSSegmentedVariableObject::~JSSegmentedVariableObject):
2424         (JSC::JSSegmentedVariableObject::finishCreation):
2425         * runtime/JSSegmentedVariableObject.h:
2426         (JSC::JSSegmentedVariableObject::subspaceFor): Deleted.
2427         * runtime/JSSegmentedVariableObjectHeapCellType.cpp: Removed.
2428         * runtime/JSSegmentedVariableObjectHeapCellType.h: Removed.
2429         * runtime/StringIteratorPrototype.cpp:
2430         * runtime/VM.cpp:
2431         (JSC::VM::VM):
2432         * runtime/VM.h:
2433
2434 2019-03-20  Saam Barati  <sbarati@apple.com>
2435
2436         DFG::AbstractValue::validateOSREntry is wrong when isHeapTop and the incoming value is Empty
2437         https://bugs.webkit.org/show_bug.cgi?id=195721
2438
2439         Reviewed by Filip Pizlo.
2440
2441         There was a check in AbstractValue::validateOSREntry where it checked
2442         if isHeapTop(), and if so, just returned true. However, this is wrong
2443         if the value we're checking against is the empty value, since HeapTop
2444         does not include the Empty value. Instead, this check should be
2445         isBytecodeTop(), which does account for the empty value.
2446         
2447         This patch also does a couple of other things:
2448         - For our OSR entry AbstractValues, we were using HeapTop to mark
2449          a dead value. That is now changed to BytecodeTop. (The idea here
2450          is just to have validateOSREntry return early.)
2451         - It wasn't obvious to me how I could make this fail in JS code.
2452          The symptom we'd end up seeing is something like a nullptr derefernece
2453          from forgetting to do a TDZ check. Instead, I've added a unit test.
2454          This unit test lives in a new test file: testdfg. testdfg is similar
2455          to testb3/testair/testapi.
2456
2457         * JavaScriptCore.xcodeproj/project.pbxproj:
2458         * bytecode/SpeculatedType.h:
2459         * dfg/DFGAbstractValue.h:
2460         (JSC::DFG::AbstractValue::isBytecodeTop const):
2461         (JSC::DFG::AbstractValue::validateOSREntryValue const):
2462         * dfg/testdfg.cpp: Added.
2463         (hiddenTruthBecauseNoReturnIsStupid):
2464         (usage):
2465         (JSC::DFG::testEmptyValueDoesNotValidateWithHeapTop):
2466         (JSC::DFG::run):
2467         (run):
2468         (main):
2469         * shell/CMakeLists.txt:
2470
2471 2019-03-20  Saam Barati  <sbarati@apple.com>
2472
2473         typeOfDoubleSum is wrong for when NaN can be produced
2474         https://bugs.webkit.org/show_bug.cgi?id=196030
2475
2476         Reviewed by Filip Pizlo.
2477
2478         We were using typeOfDoubleSum(SpeculatedType, SpeculatedType) for add/sub/mul.
2479         It assumed that the only way the resulting type could be NaN is if one of
2480         the inputs were NaN. However, this is wrong. NaN can be produced in at least
2481         these cases:
2482           Infinity - Infinity
2483           Infinity + (-Infinity)
2484           Infinity * 0
2485
2486         * bytecode/SpeculatedType.cpp:
2487         (JSC::typeOfDoubleSumOrDifferenceOrProduct):
2488         (JSC::typeOfDoubleSum):
2489         (JSC::typeOfDoubleDifference):
2490         (JSC::typeOfDoubleProduct):
2491
2492 2019-03-20  Simon Fraser  <simon.fraser@apple.com>
2493
2494         Rename ENABLE_ACCELERATED_OVERFLOW_SCROLLING macro to ENABLE_OVERFLOW_SCROLLING_TOUCH
2495         https://bugs.webkit.org/show_bug.cgi?id=196049
2496
2497         Reviewed by Tim Horton.
2498
2499         This macro is about the -webkit-overflow-scrolling CSS property, not accelerated
2500         overflow scrolling in general, so rename it.
2501
2502         * Configurations/FeatureDefines.xcconfig:
2503
2504 2019-03-20  Saam Barati  <sbarati@apple.com>
2505
2506         GetCallee does not report the correct type in AI
2507         https://bugs.webkit.org/show_bug.cgi?id=195981
2508
2509         Reviewed by Yusuke Suzuki.
2510
2511         I found this as part of my work in:
2512         https://bugs.webkit.org/show_bug.cgi?id=195924
2513         
2514         I'm not sure how to write a test for it.
2515         
2516         GetCallee was always reporting that the result is SpecFunction. However,
2517         for eval, it may result in just a JSCallee object, which is not a JSFunction.
2518
2519         * dfg/DFGAbstractInterpreterInlines.h:
2520         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
2521
2522 2019-03-20  Mark Lam  <mark.lam@apple.com>
2523
2524         Open source arm64e code.
2525         https://bugs.webkit.org/show_bug.cgi?id=196012
2526         <rdar://problem/49066237>
2527
2528         Reviewed by Keith Miller.
2529
2530         * JavaScriptCore.xcodeproj/project.pbxproj:
2531         * Sources.txt:
2532         * assembler/ARM64EAssembler.h: Added.
2533         (JSC::ARM64EAssembler::encodeGroup1):
2534         (JSC::ARM64EAssembler::encodeGroup2):
2535         (JSC::ARM64EAssembler::encodeGroup4):
2536         (JSC::ARM64EAssembler::pacia1716):
2537         (JSC::ARM64EAssembler::pacib1716):
2538         (JSC::ARM64EAssembler::autia1716):
2539         (JSC::ARM64EAssembler::autib1716):
2540         (JSC::ARM64EAssembler::paciaz):
2541         (JSC::ARM64EAssembler::paciasp):
2542         (JSC::ARM64EAssembler::pacibz):
2543         (JSC::ARM64EAssembler::pacibsp):
2544         (JSC::ARM64EAssembler::autiaz):
2545         (JSC::ARM64EAssembler::autiasp):
2546         (JSC::ARM64EAssembler::autibz):
2547         (JSC::ARM64EAssembler::autibsp):
2548         (JSC::ARM64EAssembler::xpaclri):
2549         (JSC::ARM64EAssembler::pacia):
2550         (JSC::ARM64EAssembler::pacib):
2551         (JSC::ARM64EAssembler::pacda):
2552         (JSC::ARM64EAssembler::pacdb):
2553         (JSC::ARM64EAssembler::autia):
2554         (JSC::ARM64EAssembler::autib):
2555         (JSC::ARM64EAssembler::autda):
2556         (JSC::ARM64EAssembler::autdb):
2557         (JSC::ARM64EAssembler::paciza):
2558         (JSC::ARM64EAssembler::pacizb):
2559         (JSC::ARM64EAssembler::pacdza):
2560         (JSC::ARM64EAssembler::pacdzb):
2561         (JSC::ARM64EAssembler::autiza):
2562         (JSC::ARM64EAssembler::autizb):
2563         (JSC::ARM64EAssembler::autdza):
2564         (JSC::ARM64EAssembler::autdzb):
2565         (JSC::ARM64EAssembler::xpaci):
2566         (JSC::ARM64EAssembler::xpacd):
2567         (JSC::ARM64EAssembler::pacga):
2568         (JSC::ARM64EAssembler::braa):
2569         (JSC::ARM64EAssembler::brab):
2570         (JSC::ARM64EAssembler::blraa):
2571         (JSC::ARM64EAssembler::blrab):
2572         (JSC::ARM64EAssembler::braaz):
2573         (JSC::ARM64EAssembler::brabz):
2574         (JSC::ARM64EAssembler::blraaz):
2575         (JSC::ARM64EAssembler::blrabz):
2576         (JSC::ARM64EAssembler::retaa):
2577         (JSC::ARM64EAssembler::retab):
2578         (JSC::ARM64EAssembler::eretaa):
2579         (JSC::ARM64EAssembler::eretab):
2580         (JSC::ARM64EAssembler::linkPointer):
2581         (JSC::ARM64EAssembler::repatchPointer):
2582         (JSC::ARM64EAssembler::setPointer):
2583         (JSC::ARM64EAssembler::readPointer):
2584         (JSC::ARM64EAssembler::readCallTarget):
2585         (JSC::ARM64EAssembler::ret):
2586         * assembler/MacroAssembler.cpp:
2587         * assembler/MacroAssembler.h:
2588         * assembler/MacroAssemblerARM64.cpp:
2589         * assembler/MacroAssemblerARM64E.h: Added.
2590         (JSC::MacroAssemblerARM64E::tagReturnAddress):
2591         (JSC::MacroAssemblerARM64E::untagReturnAddress):
2592         (JSC::MacroAssemblerARM64E::tagPtr):
2593         (JSC::MacroAssemblerARM64E::untagPtr):
2594         (JSC::MacroAssemblerARM64E::removePtrTag):
2595         (JSC::MacroAssemblerARM64E::callTrustedPtr):
2596         (JSC::MacroAssemblerARM64E::call):
2597         (JSC::MacroAssemblerARM64E::callRegister):
2598         (JSC::MacroAssemblerARM64E::jump):
2599         * dfg/DFGOSRExit.cpp:
2600         (JSC::DFG::reifyInlinedCallFrames):
2601         * dfg/DFGOSRExitCompilerCommon.cpp:
2602         (JSC::DFG::reifyInlinedCallFrames):
2603         * ftl/FTLThunks.cpp:
2604         (JSC::FTL::genericGenerationThunkGenerator):
2605         * jit/CCallHelpers.h:
2606         (JSC::CCallHelpers::prepareForTailCallSlow):
2607         * jit/CallFrameShuffler.cpp:
2608         (JSC::CallFrameShuffler::prepareForTailCall):
2609         * jit/ExecutableAllocator.cpp:
2610         (JSC::ExecutableAllocator::allocate):
2611         * jit/ThunkGenerators.cpp:
2612         (JSC::arityFixupGenerator):
2613         * llint/LLIntOfflineAsmConfig.h:
2614         * llint/LowLevelInterpreter.asm:
2615         * llint/LowLevelInterpreter64.asm:
2616         * runtime/ClassInfo.h:
2617         * runtime/InitializeThreading.cpp:
2618         (JSC::initializeThreading):
2619         * runtime/JSCPtrTag.cpp: Added.
2620         (JSC::tagForPtr):
2621         (JSC::ptrTagName):
2622         (JSC::initializePtrTagLookup):
2623         * runtime/JSCPtrTag.h:
2624         (JSC::initializePtrTagLookup):
2625         * runtime/Options.cpp:
2626         (JSC::recomputeDependentOptions):
2627
2628 2019-03-20  Tadeu Zagallo  <tzagallo@apple.com>
2629
2630         JSC::createError needs to check for OOM in errorDescriptionForValue
2631         https://bugs.webkit.org/show_bug.cgi?id=196032
2632         <rdar://problem/46842740>
2633
2634         Reviewed by Mark Lam.
2635
2636         We were missing exceptions checks at two levels:
2637         - In errorDescriptionForValue, when the value is a string, we should
2638           check that JSString::value returns a valid string, since we might run
2639           out of memory if it is a rope and we need to resolve it.
2640         - In createError, we should check for the result of errorDescriptionForValue
2641           before concatenating it with the message provided by the caller.
2642
2643         * runtime/ExceptionHelpers.cpp:
2644         (JSC::errorDescriptionForValue):
2645         (JSC::createError):
2646         * runtime/ExceptionHelpers.h:
2647
2648 2019-03-20  Devin Rousso  <drousso@apple.com>
2649
2650         Web Inspector: DOM: include window as part of any event listener chain
2651         https://bugs.webkit.org/show_bug.cgi?id=195730
2652         <rdar://problem/48916872>
2653
2654         Reviewed by Timothy Hatcher.
2655
2656         * inspector/protocol/DOM.json:
2657         Modify `DOM.getEventListenersForNode` to not save the handler object, as that was never
2658         used by the frontend. Add an `onWindow` optional property to `DOM.EventListener` that is set
2659         when the event listener was retrieved from the `window` object.
2660
2661 2019-03-20  Devin Rousso  <drousso@apple.com>
2662
2663         Web Inspector: Runtime: lazily create the agent
2664         https://bugs.webkit.org/show_bug.cgi?id=195972
2665         <rdar://problem/49039655>
2666
2667         Reviewed by Timothy Hatcher.
2668
2669         * inspector/JSGlobalObjectInspectorController.cpp:
2670         (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
2671         (Inspector::JSGlobalObjectInspectorController::createLazyAgents):
2672
2673         * inspector/agents/InspectorRuntimeAgent.h:
2674         (Inspector::InspectorRuntimeAgent::enabled): Deleted.
2675         * inspector/agents/InspectorRuntimeAgent.cpp:
2676         (Inspector::InspectorRuntimeAgent::didCreateFrontendAndBackend): Added.
2677         (Inspector::InspectorRuntimeAgent::willDestroyFrontendAndBackend):
2678
2679         * inspector/agents/JSGlobalObjectRuntimeAgent.h:
2680         * inspector/agents/JSGlobalObjectRuntimeAgent.cpp:
2681         (Inspector::JSGlobalObjectRuntimeAgent::didCreateFrontendAndBackend): Deleted.
2682
2683 2019-03-20  Michael Saboff  <msaboff@apple.com>
2684
2685         JSC test crash: stress/dont-strength-reduce-regexp-with-compile-error.js.default
2686         https://bugs.webkit.org/show_bug.cgi?id=195906
2687
2688         Reviewed by Mark Lam.
2689
2690         The problem here as that we may successfully parsed a RegExp without running out of stack,
2691         but later run out of stack when trying to JIT compile the same expression.
2692
2693         Added a check for available stack space when we call into one of the parenthesis compilation
2694         functions that recurse.  When we don't have enough stack space to recurse, we fail the JIT
2695         compilation and let the interpreter handle the expression.
2696
2697         From code inspection of the YARR interpreter it has the same issue, but I couldn't cause a failure.
2698         Filed a new bug and added a FIXME comment for the Interpreter to have similar checks.
2699         Given that we can reproduce a failure, this is sufficient for now.
2700
2701         This change is covered by the previously added failing test,
2702         JSTests/stress/dont-strength-reduce-regexp-with-compile-error.js.
2703
2704         * yarr/YarrInterpreter.cpp:
2705         (JSC::Yarr::Interpreter::interpret):
2706         * yarr/YarrJIT.cpp:
2707         (JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern):
2708         (JSC::Yarr::YarrGenerator::opCompileParentheticalAssertion):
2709         (JSC::Yarr::YarrGenerator::opCompileBody):
2710         (JSC::Yarr::dumpCompileFailure):
2711         * yarr/YarrJIT.h:
2712
2713 2019-03-20  Robin Morisset  <rmorisset@apple.com>
2714
2715         DFGNodeAllocator.h is dead code
2716         https://bugs.webkit.org/show_bug.cgi?id=196019
2717
2718         Reviewed by Yusuke Suzuki.
2719
2720         As explained by Yusuke on IRC, the comment on DFG::Node saying that it cannot have a destructor is obsolete since https://trac.webkit.org/changeset/216815/webkit.
2721         This patch removes both the comment and DFGNodeAllocator.h that that patch forgot to remove.
2722
2723         * dfg/DFGNode.h:
2724         (JSC::DFG::Node::dumpChildren):
2725         * dfg/DFGNodeAllocator.h: Removed.
2726
2727 2019-03-20  Robin Morisset  <rmorisset@apple.com>
2728
2729         Compress CodeOrigin into a single word in the common case
2730         https://bugs.webkit.org/show_bug.cgi?id=195928
2731
2732         Reviewed by Saam Barati.
2733
2734         The trick is that pointers only take 48 bits on x86_64 in practice (and we can even use the bottom three bits of that thanks to alignment), and even less on ARM64.
2735         So we can shove the bytecode index in the top bits almost all the time.
2736         If the bytecodeIndex is too ginormous (1<<16 in practice on x86_64), we just set one bit at the bottom and store a pointer to some out-of-line storage instead.
2737         Finally we represent an invalid bytecodeIndex (which used to be represented by UINT_MAX) by setting the second least signifcant bit.
2738
2739         The patch looks very long, but most of it is just replacing direct accesses to inlineCallFrame and bytecodeIndex by the relevant getters.
2740
2741         End result: CodeOrigin in the common case moves from 16 bytes (8 for InlineCallFrame*, 4 for unsigned bytecodeIndex, 4 of padding) to 8.
2742         As a reference, during running JetStream2 we allocate more than 35M CodeOrigins. While they won't all be alive at the same time, it is still quite a lot of objects, so I am hoping for some small
2743         improvement to RAMification from this work.
2744
2745         The one slightly tricky part is that we must implement copy and move assignment operators and constructors to make sure that any out-of-line storage belongs to a single CodeOrigin and is destroyed exactly once.
2746
2747         * bytecode/ByValInfo.h:
2748         * bytecode/CallLinkStatus.cpp:
2749         (JSC::CallLinkStatus::computeFor):
2750         * bytecode/CodeBlock.cpp:
2751         (JSC::CodeBlock::globalObjectFor):
2752         (JSC::CodeBlock::updateOSRExitCounterAndCheckIfNeedToReoptimize):
2753         (JSC::CodeBlock::bytecodeOffsetFromCallSiteIndex):
2754         * bytecode/CodeOrigin.cpp:
2755         (JSC::CodeOrigin::inlineDepth const):
2756         (JSC::CodeOrigin::isApproximatelyEqualTo const):
2757         (JSC::CodeOrigin::approximateHash const):
2758         (JSC::CodeOrigin::inlineStack const):
2759         (JSC::CodeOrigin::codeOriginOwner const):
2760         (JSC::CodeOrigin::stackOffset const):
2761         (JSC::CodeOrigin::dump const):
2762         (JSC::CodeOrigin::inlineDepthForCallFrame): Deleted.
2763         * bytecode/CodeOrigin.h:
2764         (JSC::OutOfLineCodeOrigin::OutOfLineCodeOrigin):
2765         (JSC::CodeOrigin::CodeOrigin):
2766         (JSC::CodeOrigin::~CodeOrigin):
2767         (JSC::CodeOrigin::isSet const):
2768         (JSC::CodeOrigin::isHashTableDeletedValue const):
2769         (JSC::CodeOrigin::bytecodeIndex const):
2770         (JSC::CodeOrigin::inlineCallFrame const):
2771         (JSC::CodeOrigin::buildCompositeValue):
2772         (JSC::CodeOrigin::hash const):
2773         (JSC::CodeOrigin::operator== const):
2774         (JSC::CodeOrigin::exitingInlineKind const): Deleted.
2775         * bytecode/DeferredSourceDump.h:
2776         * bytecode/GetByIdStatus.cpp:
2777         (JSC::GetByIdStatus::computeForStubInfo):
2778         (JSC::GetByIdStatus::computeFor):
2779         * bytecode/ICStatusMap.cpp:
2780         (JSC::ICStatusContext::isInlined const):
2781         * bytecode/InByIdStatus.cpp:
2782         (JSC::InByIdStatus::computeFor):
2783         (JSC::InByIdStatus::computeForStubInfo):
2784         * bytecode/InlineCallFrame.cpp:
2785         (JSC::InlineCallFrame::dumpInContext const):
2786         * bytecode/InlineCallFrame.h:
2787         (JSC::InlineCallFrame::computeCallerSkippingTailCalls):
2788         (JSC::InlineCallFrame::getCallerInlineFrameSkippingTailCalls):
2789         (JSC::baselineCodeBlockForOriginAndBaselineCodeBlock):
2790         (JSC::CodeOrigin::walkUpInlineStack):
2791         * bytecode/InstanceOfStatus.h:
2792         * bytecode/PutByIdStatus.cpp:
2793         (JSC::PutByIdStatus::computeForStubInfo):
2794         (JSC::PutByIdStatus::computeFor):
2795         * dfg/DFGAbstractInterpreterInlines.h:
2796         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
2797         * dfg/DFGArgumentsEliminationPhase.cpp:
2798         * dfg/DFGArgumentsUtilities.cpp:
2799         (JSC::DFG::argumentsInvolveStackSlot):
2800         (JSC::DFG::emitCodeToGetArgumentsArrayLength):
2801         * dfg/DFGArrayMode.h:
2802         * dfg/DFGByteCodeParser.cpp:
2803         (JSC::DFG::ByteCodeParser::injectLazyOperandSpeculation):
2804         (JSC::DFG::ByteCodeParser::setLocal):
2805         (JSC::DFG::ByteCodeParser::setArgument):
2806         (JSC::DFG::ByteCodeParser::flushForTerminalImpl):
2807         (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
2808         (JSC::DFG::ByteCodeParser::parseBlock):
2809         (JSC::DFG::ByteCodeParser::parseCodeBlock):
2810         (JSC::DFG::ByteCodeParser::handlePutByVal):
2811         * dfg/DFGClobberize.h:
2812         (JSC::DFG::clobberize):
2813         * dfg/DFGConstantFoldingPhase.cpp:
2814         (JSC::DFG::ConstantFoldingPhase::foldConstants):
2815         * dfg/DFGFixupPhase.cpp:
2816         (JSC::DFG::FixupPhase::attemptToMakeGetArrayLength):
2817         * dfg/DFGForAllKills.h:
2818         (JSC::DFG::forAllKilledOperands):
2819         * dfg/DFGGraph.cpp:
2820         (JSC::DFG::Graph::dumpCodeOrigin):
2821         (JSC::DFG::Graph::dump):
2822         (JSC::DFG::Graph::isLiveInBytecode):
2823         (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
2824         (JSC::DFG::Graph::willCatchExceptionInMachineFrame):
2825         * dfg/DFGGraph.h:
2826         (JSC::DFG::Graph::executableFor):
2827         (JSC::DFG::Graph::isStrictModeFor):
2828         (JSC::DFG::Graph::hasExitSite):
2829         (JSC::DFG::Graph::forAllLocalsLiveInBytecode):
2830         * dfg/DFGLiveCatchVariablePreservationPhase.cpp:
2831         (JSC::DFG::LiveCatchVariablePreservationPhase::handleBlockForTryCatch):
2832         * dfg/DFGMinifiedNode.cpp:
2833         (JSC::DFG::MinifiedNode::fromNode):
2834         * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
2835         (JSC::DFG::LocalOSRAvailabilityCalculator::executeNode):
2836         * dfg/DFGOSRExit.cpp:
2837         (JSC::DFG::OSRExit::executeOSRExit):
2838         (JSC::DFG::reifyInlinedCallFrames):
2839         (JSC::DFG::adjustAndJumpToTarget):
2840         (JSC::DFG::printOSRExit):
2841         (JSC::DFG::OSRExit::compileExit):
2842         * dfg/DFGOSRExitBase.cpp:
2843         (JSC::DFG::OSRExitBase::considerAddingAsFrequentExitSiteSlow):
2844         * dfg/DFGOSRExitCompilerCommon.cpp:
2845         (JSC::DFG::handleExitCounts):
2846         (JSC::DFG::reifyInlinedCallFrames):
2847         (JSC::DFG::adjustAndJumpToTarget):
2848         * dfg/DFGOSRExitPreparation.cpp:
2849         (JSC::DFG::prepareCodeOriginForOSRExit):
2850         * dfg/DFGObjectAllocationSinkingPhase.cpp:
2851         * dfg/DFGOperations.cpp:
2852         * dfg/DFGPreciseLocalClobberize.h:
2853         (JSC::DFG::PreciseLocalClobberizeAdaptor::readTop):
2854         * dfg/DFGSpeculativeJIT.cpp:
2855         (JSC::DFG::SpeculativeJIT::emitGetLength):
2856         (JSC::DFG::SpeculativeJIT::emitGetCallee):
2857         (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
2858         (JSC::DFG::SpeculativeJIT::compileValueAdd):
2859         (JSC::DFG::SpeculativeJIT::compileValueSub):
2860         (JSC::DFG::SpeculativeJIT::compileValueNegate):
2861         (JSC::DFG::SpeculativeJIT::compileValueMul):
2862         (JSC::DFG::SpeculativeJIT::compileForwardVarargs):
2863         (JSC::DFG::SpeculativeJIT::compileCreateDirectArguments):
2864         * dfg/DFGSpeculativeJIT32_64.cpp:
2865         (JSC::DFG::SpeculativeJIT::emitCall):
2866         * dfg/DFGSpeculativeJIT64.cpp:
2867         (JSC::DFG::SpeculativeJIT::emitCall):
2868         (JSC::DFG::SpeculativeJIT::compile):
2869         * dfg/DFGTierUpCheckInjectionPhase.cpp:
2870         (JSC::DFG::TierUpCheckInjectionPhase::run):
2871         (JSC::DFG::TierUpCheckInjectionPhase::canOSREnterAtLoopHint):
2872         (JSC::DFG::TierUpCheckInjectionPhase::buildNaturalLoopToLoopHintMap):
2873         * dfg/DFGTypeCheckHoistingPhase.cpp:
2874         (JSC::DFG::TypeCheckHoistingPhase::run):
2875         * dfg/DFGVariableEventStream.cpp:
2876         (JSC::DFG::VariableEventStream::reconstruct const):
2877         * ftl/FTLLowerDFGToB3.cpp:
2878         (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd):
2879         (JSC::FTL::DFG::LowerDFGToB3::compileValueSub):
2880         (JSC::FTL::DFG::LowerDFGToB3::compileValueMul):
2881         (JSC::FTL::DFG::LowerDFGToB3::compileArithAddOrSub):
2882         (JSC::FTL::DFG::LowerDFGToB3::compileValueNegate):
2883         (JSC::FTL::DFG::LowerDFGToB3::compileGetMyArgumentByVal):
2884         (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
2885         (JSC::FTL::DFG::LowerDFGToB3::compileSpread):
2886         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
2887         (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs):
2888         (JSC::FTL::DFG::LowerDFGToB3::compileForwardVarargs):
2889         (JSC::FTL::DFG::LowerDFGToB3::compileForwardVarargsWithSpread):
2890         (JSC::FTL::DFG::LowerDFGToB3::getArgumentsLength):
2891         (JSC::FTL::DFG::LowerDFGToB3::getCurrentCallee):
2892         (JSC::FTL::DFG::LowerDFGToB3::getArgumentsStart):
2893         (JSC::FTL::DFG::LowerDFGToB3::codeOriginDescriptionOfCallSite const):
2894         * ftl/FTLOSRExitCompiler.cpp:
2895         (JSC::FTL::compileStub):
2896         * ftl/FTLOperations.cpp:
2897         (JSC::FTL::operationMaterializeObjectInOSR):
2898         * interpreter/CallFrame.cpp:
2899         (JSC::CallFrame::bytecodeOffset):
2900         * interpreter/StackVisitor.cpp:
2901         (JSC::StackVisitor::unwindToMachineCodeBlockFrame):
2902         (JSC::StackVisitor::readFrame):
2903         (JSC::StackVisitor::readNonInlinedFrame):
2904         (JSC::inlinedFrameOffset):
2905         (JSC::StackVisitor::readInlinedFrame):
2906         * interpreter/StackVisitor.h:
2907         * jit/AssemblyHelpers.cpp:
2908         (JSC::AssemblyHelpers::executableFor):
2909         * jit/AssemblyHelpers.h:
2910         (JSC::AssemblyHelpers::isStrictModeFor):
2911         (JSC::AssemblyHelpers::argumentsStart):
2912         (JSC::AssemblyHelpers::argumentCount):
2913         * jit/PCToCodeOriginMap.cpp:
2914         (JSC::PCToCodeOriginMap::PCToCodeOriginMap):
2915         (JSC::PCToCodeOriginMap::findPC const):
2916         * profiler/ProfilerOriginStack.cpp:
2917         (JSC::Profiler::OriginStack::OriginStack):
2918         * profiler/ProfilerOriginStack.h:
2919         * runtime/ErrorInstance.cpp:
2920         (JSC::appendSourceToError):
2921         * runtime/SamplingProfiler.cpp:
2922         (JSC::SamplingProfiler::processUnverifiedStackTraces):
2923
2924 2019-03-20  Devin Rousso  <drousso@apple.com>
2925
2926         Web Inspector: Search: allow DOM searches to be case sensitive
2927         https://bugs.webkit.org/show_bug.cgi?id=194673
2928         <rdar://problem/48087577>
2929
2930         Reviewed by Timothy Hatcher.
2931
2932         Since `DOM.performSearch` also searches by selector and XPath, some results may appear
2933         as unexpected. As an example, searching for "BoDy" will still return the <body> as a result,
2934         as although the literal node name ("BODY") didn't match, it did match via selector/XPath.
2935
2936         * inspector/protocol/DOM.json:
2937         Allow `DOM.performSearch` to be case sensitive.
2938
2939 2019-03-20  Saam Barati  <sbarati@apple.com>
2940
2941         AI rule for ValueBitNot/ValueBitXor/ValueBitAnd/ValueBitOr is wrong
2942         https://bugs.webkit.org/show_bug.cgi?id=195980
2943
2944         Reviewed by Yusuke Suzuki.
2945
2946         They were all saying they could be type: (SpecBoolInt32, SpecBigInt)
2947         However, they should have been type: (SpecInt32Only, SpecBigInt)
2948
2949         * dfg/DFGAbstractInterpreterInlines.h:
2950         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
2951
2952 2019-03-20  Michael Catanzaro  <mcatanzaro@igalia.com>
2953
2954         Remove copyRef() calls added in r243163
2955         https://bugs.webkit.org/show_bug.cgi?id=195962
2956
2957         Reviewed by Chris Dumez.
2958
2959         As best I can tell, may be a GCC 9 bug. It shouldn't warn about this case because the return
2960         value is noncopyable and the WTFMove() is absolutely required. We can avoid the warning
2961         without refcount churn by introducing an intermediate variable.
2962
2963         * inspector/scripts/codegen/cpp_generator_templates.py:
2964
2965 2019-03-20  Carlos Garcia Campos  <cgarcia@igalia.com>
2966
2967         [GLIB] Optimize jsc_value_object_define_property_data|accessor
2968         https://bugs.webkit.org/show_bug.cgi?id=195679
2969
2970         Reviewed by Saam Barati.
2971
2972         Use direct C++ call instead of using the JSC GLib API to create the descriptor object and invoke Object.defineProperty().
2973
2974         * API/glib/JSCValue.cpp:
2975         (jsc_value_object_define_property_data):
2976         (jsc_value_object_define_property_accessor):
2977
2978 2019-03-19  Devin Rousso  <drousso@apple.com>
2979
2980         Web Inspector: Debugger: lazily create the agent
2981         https://bugs.webkit.org/show_bug.cgi?id=195973
2982         <rdar://problem/49039674>
2983
2984         Reviewed by Joseph Pecoraro.
2985
2986         * inspector/JSGlobalObjectInspectorController.cpp:
2987         (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
2988         (Inspector::JSGlobalObjectInspectorController::frontendInitialized):
2989         (Inspector::JSGlobalObjectInspectorController::createLazyAgents):
2990
2991         * inspector/JSGlobalObjectConsoleClient.h:
2992         (Inspector::JSGlobalObjectConsoleClient::setInspectorDebuggerAgent): Added.
2993         * inspector/JSGlobalObjectConsoleClient.cpp:
2994         (Inspector::JSGlobalObjectConsoleClient::JSGlobalObjectConsoleClient):
2995         (Inspector::JSGlobalObjectConsoleClient::startConsoleProfile):
2996         (Inspector::JSGlobalObjectConsoleClient::stopConsoleProfile):
2997
2998         * inspector/agents/InspectorDebuggerAgent.h:
2999         (Inspector::InspectorDebuggerAgent::addListener): Added.
3000         (Inspector::InspectorDebuggerAgent::removeListener): Added.
3001         (Inspector::InspectorDebuggerAgent::setListener): Deleted.
3002         * inspector/agents/InspectorDebuggerAgent.cpp:
3003         (Inspector::InspectorDebuggerAgent::InspectorDebuggerAgent):
3004         (Inspector::InspectorDebuggerAgent::enable):
3005         (Inspector::InspectorDebuggerAgent::disable):
3006         (Inspector::InspectorDebuggerAgent::getScriptSource):
3007         (Inspector::InspectorDebuggerAgent::schedulePauseOnNextStatement):
3008         (Inspector::InspectorDebuggerAgent::didPause):
3009         (Inspector::InspectorDebuggerAgent::breakProgram):
3010         (Inspector::InspectorDebuggerAgent::clearBreakDetails):
3011         Drive-by: reorder some member variables for better sizing.
3012         Drive-by: rename some member variables for clarity.
3013
3014 2019-03-19  Saam barati  <sbarati@apple.com>
3015
3016         Prune code after ForceOSRExit
3017         https://bugs.webkit.org/show_bug.cgi?id=195913
3018
3019         Reviewed by Keith Miller.
3020
3021         I removed our original implementation of this in r242989 because
3022         it was not sound. It broke backwards propagation because it removed
3023         uses of a node that backwards propagation relied on to be sound.
3024         Essentially, backwards propagation relies on being able to see uses
3025         that would exist in bytecode to be sound.
3026         
3027         The rollout in r242989 was a 1% Speedometer2 regression. This patch
3028         rolls back in the optimization in a sound way.
3029         
3030         This patch augments the code we had prior to r242989 to be sound. In
3031         addition to preserving liveness, we now also convert all uses after
3032         the ForceOSRExit to be Phantom. This may pessimize the optimizations
3033         we do in backwards propagation, but it will prevent that phase from
3034         making unsound optimizations.
3035
3036         * dfg/DFGByteCodeParser.cpp:
3037         (JSC::DFG::ByteCodeParser::addToGraph):
3038         (JSC::DFG::ByteCodeParser::parse):
3039
3040 2019-03-19  Michael Catanzaro  <mcatanzaro@igalia.com>
3041
3042         Build cleanly with GCC 9
3043         https://bugs.webkit.org/show_bug.cgi?id=195920
3044
3045         Reviewed by Chris Dumez.
3046
3047         WebKit triggers three new GCC 9 warnings:
3048
3049         """
3050         -Wdeprecated-copy, implied by -Wextra, warns about the C++11 deprecation of implicitly
3051         declared copy constructor and assignment operator if one of them is user-provided.
3052         """
3053
3054         Solution is to either add a copy constructor or copy assignment operator, if required, or
3055         else remove one if it is redundant.
3056
3057         """
3058         -Wredundant-move, implied by -Wextra, warns about redundant calls to std::move.
3059         -Wpessimizing-move, implied by -Wall, warns when a call to std::move prevents copy elision.
3060         """
3061
3062         These account for most of this patch. Solution is to just remove the bad WTFMove().
3063
3064         Additionally, -Wclass-memaccess has been enhanced to catch a few cases that GCC 8 didn't.
3065         These are solved by casting nontrivial types to void* before using memcpy. (Of course, it
3066         would be safer to not use memcpy on nontrivial types, but that's too complex for this
3067         patch. Searching for memcpy used with static_cast<void*> will reveal other cases to fix.)
3068
3069         * b3/B3ValueRep.h:
3070         * bindings/ScriptValue.cpp:
3071         (Inspector::jsToInspectorValue):
3072         * bytecode/GetterSetterAccessCase.cpp:
3073         (JSC::GetterSetterAccessCase::create):
3074         (JSC::GetterSetterAccessCase::clone const):
3075         * bytecode/InstanceOfAccessCase.cpp:
3076         (JSC::InstanceOfAccessCase::clone const):
3077         * bytecode/IntrinsicGetterAccessCase.cpp:
3078         (JSC::IntrinsicGetterAccessCase::clone const):
3079         * bytecode/ModuleNamespaceAccessCase.cpp:
3080         (JSC::ModuleNamespaceAccessCase::clone const):
3081         * bytecode/ProxyableAccessCase.cpp:
3082         (JSC::ProxyableAccessCase::clone const):
3083         * bytecode/StructureSet.h:
3084         * debugger/Breakpoint.h:
3085         * dfg/DFGRegisteredStructureSet.h:
3086         * inspector/agents/InspectorDebuggerAgent.cpp:
3087         (Inspector::buildDebuggerLocation):
3088         * inspector/scripts/codegen/cpp_generator_templates.py:
3089         * parser/UnlinkedSourceCode.h:
3090         * wasm/WasmAirIRGenerator.cpp:
3091         (JSC::Wasm::parseAndCompileAir):
3092         * wasm/WasmB3IRGenerator.cpp:
3093         (JSC::Wasm::parseAndCompile):
3094         * wasm/WasmNameSectionParser.cpp:
3095         (JSC::Wasm::NameSectionParser::parse):
3096         * wasm/WasmStreamingParser.cpp:
3097         (JSC::Wasm::StreamingParser::consume):
3098
3099 2019-03-19  Saam Barati  <sbarati@apple.com>
3100
3101         Style fix: remove C style cast in Instruction.h
3102         https://bugs.webkit.org/show_bug.cgi?id=195917
3103
3104         Reviewed by Filip Pizlo.
3105
3106         * bytecode/Instruction.h:
3107         (JSC::Instruction::wide const):
3108
3109 2019-03-19  Devin Rousso  <drousso@apple.com>
3110
3111         Web Inspector: Provide $event in the console when paused on an event listener
3112         https://bugs.webkit.org/show_bug.cgi?id=188672
3113
3114         Reviewed by Timothy Hatcher.
3115
3116         * inspector/InjectedScript.h:
3117         * inspector/InjectedScript.cpp:
3118         (Inspector::InjectedScript::setEventValue): Added.
3119         (Inspector::InjectedScript::clearEventValue): Added.
3120
3121         * inspector/InjectedScriptManager.h:
3122         * inspector/InjectedScriptManager.cpp:
3123         (Inspector::InjectedScriptManager::clearEventValue): Added.
3124
3125         * inspector/InjectedScriptSource.js:
3126         (WI.InjectedScript.prototype.setEventValue): Added.
3127         (WI.InjectedScript.prototype.clearEventValue): Added.
3128         (BasicCommandLineAPI):
3129
3130 2019-03-19  Devin Rousso  <drousso@apple.com>
3131
3132         Web Inspector: ScriptProfiler: lazily create the agent
3133         https://bugs.webkit.org/show_bug.cgi?id=195591
3134         <rdar://problem/48791756>
3135
3136         Reviewed by Joseph Pecoraro.
3137
3138         * inspector/JSGlobalObjectConsoleClient.h:
3139         (Inspector::JSGlobalObjectConsoleClient::setInspectorScriptProfilerAgent): Added.
3140         * inspector/JSGlobalObjectConsoleClient.cpp:
3141         (Inspector::JSGlobalObjectConsoleClient::JSGlobalObjectConsoleClient):
3142         (Inspector::JSGlobalObjectConsoleClient::startConsoleProfile):
3143         (Inspector::JSGlobalObjectConsoleClient::stopConsoleProfile):
3144
3145         * inspector/JSGlobalObjectInspectorController.cpp:
3146         (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
3147         (Inspector::JSGlobalObjectInspectorController::createLazyAgents):
3148
3149 2019-03-19  Devin Rousso  <drousso@apple.com>
3150
3151         Web Inspector: Heap: lazily create the agent
3152         https://bugs.webkit.org/show_bug.cgi?id=195590
3153         <rdar://problem/48791750>
3154
3155         Reviewed by Joseph Pecoraro.
3156
3157         * inspector/agents/InspectorHeapAgent.h:
3158         * inspector/agents/InspectorHeapAgent.cpp:
3159         (Inspector::InspectorHeapAgent::~InspectorHeapAgent): Deleted.
3160
3161         * inspector/agents/InspectorConsoleAgent.h:
3162         (Inspector::InspectorConsoleAgent::setInspectorHeapAgent): Added.
3163         * inspector/agents/InspectorConsoleAgent.cpp:
3164         (Inspector::InspectorConsoleAgent::InspectorConsoleAgent):
3165         (Inspector::InspectorConsoleAgent::takeHeapSnapshot):
3166         (Inspector::InspectorConsoleAgent::~InspectorConsoleAgent): Deleted.
3167
3168         * inspector/JSGlobalObjectInspectorController.cpp:
3169         (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
3170         (Inspector::JSGlobalObjectInspectorController::createLazyAgents):
3171
3172 2019-03-19  Caio Lima  <ticaiolima@gmail.com>
3173
3174         [JSC] LLIntEntryPoint creates same DirectJITCode for all functions
3175         https://bugs.webkit.org/show_bug.cgi?id=194648
3176
3177         Reviewed by Keith Miller.
3178
3179         1. Making LLIntThunks singleton. 
3180
3181         Motivation: Former implementation has one LLIntThunk per type per VM.
3182         However, the generated code for every kind of thunk is essentially the
3183         same and we end up wasting memory (right now jitAllocationGranule = 32 bytes)
3184         when we have 2 or more VM instantiated. Turn these thunks into
3185         singleton will avoid such wasting.
3186
3187         Tradeoff: This change comes with a price, because we will keep thunks
3188         allocated even when there is no VM instantiated. Considering WebCore use case,
3189         the situation of having no VM instantiated is uncommon, since once a
3190         VM is created through `commomVM()`, it will never be destroyed. Given
3191         that, this change does not impact the overall memory comsumption of
3192         WebCore/JSC. It also doesn't impact memory footprint, since thunks are
3193         generated lazily (see results below).
3194
3195         Since we are keeping a static `MacroAssemblerCodeRef<JITThunkPtrTag>`,
3196         we have the assurance that JITed code will never be deallocated,
3197         given it is being pointed by `RefPtr<ExecutableMemoryHandle> m_executableMemory`.
3198         To understand why we decided to make LLIntThunks singleton instead of
3199         removing them, please see the comment on `llint/LLIntThunks.cpp`.
3200
3201         2. Making all LLIntEntrypoints singleton
3202
3203         Motivation: With singleton LLIntThunks, we also can have singleton
3204         DirectJITCodes and NativeJITCodes for each LLIntEntrypoint type and
3205         avoid multiple allocations of objects with the same content.
3206
3207         Tradeoff: As explained before, once we allocate an entrypoint, it
3208         will be alive until the program exits. However, the gains we can
3209         achieve in some use cases justifies such allocations.
3210
3211         As DirectJITCode and NativeJITCode are ThreadSafeRefCounted and we are using
3212         `codeBlock->setJITCode(makeRef(*jitCode))`, their reference counter
3213         will never be less than 1.
3214
3215         3. Memory usage analysis
3216
3217         This change reduces memory usage on stress/generate-multiple-llint-entrypoints.js
3218         by 2% and is neutral on JetStream 2. Following results were generated
3219         running each benchmark 6 times and using 95% Student's t distribution
3220         confidence interval.
3221
3222         microbenchmarks/generate-multiple-llint-entrypoints.js (Changes uses less memory): 
3223             Mean of memory peak on ToT: 122576896 bytes (confidence interval: 67747.2316)
3224             Mean of memory peak on Changes: 119248213.33 bytes (confidence interval: 50251.2718)
3225
3226         JetStream2 (Neutral):
3227             Mean of memory peak on ToT: 5442742272 bytes (confidence interval: 134381565.9117)
3228             Mean of memory peak on Changes: 5384949760 bytes (confidence interval: 158413904.8352)
3229
3230         4. Performance Analysis
3231
3232         This change is performance neutral on JetStream 2 and Speedometer 2.
3233         See results below.:
3234
3235         JetStream 2 (Neutral):
3236             Mean of score on ToT: 139.58 (confidence interval: 2.44)
3237             Mean of score on Changes: 141.46 (confidence interval: 4.24)
3238
3239         Speedometer run #1
3240            ToT: 110 +- 2.9
3241            Changes: 110 +- 1.8
3242
3243         Speedometer run #2
3244            ToT: 110 +- 1.6
3245            Changes: 108 +- 2.3
3246
3247         Speedometer run #3
3248            ToT: 110 +- 3.0
3249            Changes: 110 +- 1.4
3250
3251         * jit/JSInterfaceJIT.h:
3252         (JSC::JSInterfaceJIT::JSInterfaceJIT):
3253         * llint/LLIntEntrypoint.cpp:
3254
3255         Here we are changing the usage or DirectJITCode by NativeJITCode on cases
3256         where there is no difference from address of calls with and without
3257         ArithCheck.
3258
3259         (JSC::LLInt::setFunctionEntrypoint):
3260         (JSC::LLInt::setEvalEntrypoint):
3261         (JSC::LLInt::setProgramEntrypoint):
3262         (JSC::LLInt::setModuleProgramEntrypoint):
3263         (JSC::LLInt::setEntrypoint):
3264         * llint/LLIntEntrypoint.h:
3265         * llint/LLIntThunks.cpp:
3266         (JSC::LLInt::generateThunkWithJumpTo):
3267         (JSC::LLInt::functionForCallEntryThunk):
3268         (JSC::LLInt::functionForConstructEntryThunk):
3269         (JSC::LLInt::functionForCallArityCheckThunk):
3270         (JSC::LLInt::functionForConstructArityCheckThunk):
3271         (JSC::LLInt::evalEntryThunk):
3272         (JSC::LLInt::programEntryThunk):
3273         (JSC::LLInt::moduleProgramEntryThunk):
3274         (JSC::LLInt::functionForCallEntryThunkGenerator): Deleted.
3275         (JSC::LLInt::functionForConstructEntryThunkGenerator): Deleted.
3276         (JSC::LLInt::functionForCallArityCheckThunkGenerator): Deleted.
3277         (JSC::LLInt::functionForConstructArityCheckThunkGenerator): Deleted.
3278         (JSC::LLInt::evalEntryThunkGenerator): Deleted.
3279         (JSC::LLInt::programEntryThunkGenerator): Deleted.
3280         (JSC::LLInt::moduleProgramEntryThunkGenerator): Deleted.
3281         * llint/LLIntThunks.h:
3282         * runtime/ScriptExecutable.cpp:
3283         (JSC::setupLLInt):
3284         (JSC::ScriptExecutable::prepareForExecutionImpl):
3285
3286 2019-03-18  Yusuke Suzuki  <ysuzuki@apple.com>
3287
3288         [JSC] Add missing exception checks revealed by newly added exception checks, follow-up after r243081
3289         https://bugs.webkit.org/show_bug.cgi?id=195927
3290
3291         Reviewed by Mark Lam.
3292
3293         r243081 adds more exception checks which are previously missing, and it reveals missing exception checks in the caller.
3294         This patch is a follow-up patch after r243081, adding missing exception checks more to fix debug test failures.
3295
3296         * runtime/RegExpConstructor.cpp:
3297         (JSC::setRegExpConstructorInput):
3298         (JSC::setRegExpConstructorMultiline):
3299         * runtime/RegExpGlobalData.cpp:
3300         (JSC::RegExpGlobalData::getBackref):
3301         (JSC::RegExpGlobalData::getLastParen):
3302
3303 2019-03-18  Yusuke Suzuki  <ysuzuki@apple.com>
3304
3305         [JSC] Generator should not create JSLexicalEnvironment if it is not necessary
3306         https://bugs.webkit.org/show_bug.cgi?id=195901
3307
3308         Reviewed by Saam Barati.
3309
3310         It is not rare that generators do not need to have any registers to be suspended and resumed.
3311         Since currently we always emit op_create_lexical_environment for generator code, we sometimes
3312         create empty JSLexicalEnvironment while it is not required. We can see that a lot of empty JSLexicalEnvironment
3313         are allocated in RAMification's Basic test.
3314
3315         This patch removes this unnecessary allocation. We introduce op_create_generator_frame_environment, which is
3316         a marker, similar to op_yield. And generatorification phase decides whether we should actually emit op_create_lexical_environment,
3317         based on the result of the analysis in generatorification. This can remove unnecessary JSLexicalEnvironment allocations.
3318
3319         We run RAMification in 6 times, use average of them.
3320         RAMification's Basic in JIT mode shows 1.4% improvement.
3321         ToT
3322             Current: 55076864.00, Peak: 55080960.00
3323         Patched
3324             Current: 54325930.67, Peak: 54329344.00
3325
3326         RAMification's Basic in non-JIT mode shows 5.0% improvement.
3327         ToT
3328             Current: 12485290.67, Peak: 12485290.67
3329         Patched
3330             Current: 11894101.33, Peak: 11894101.33
3331
3332         * bytecode/BytecodeGeneratorification.cpp:
3333         (JSC::BytecodeGeneratorification::BytecodeGeneratorification):