[JSC] Lazily create sentinel Map and Set buckets
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2019-02-24  Yusuke Suzuki  <ysuzuki@apple.com>
2
3         [JSC] Lazily create sentinel Map and Set buckets
4         https://bugs.webkit.org/show_bug.cgi?id=194975
5
6         Reviewed by Saam Barati.
7
8         If VM::canUseJIT() returns false, we can lazily initialize sentinel Map and Set buckets.
9         This patch adds getters to VM which lazily allocate these buckets. We eagerly initialize
10         them if VM::canUseJIT() returns true since they can be touched from DFG and FTL.
11
12         * bytecode/BytecodeIntrinsicRegistry.cpp:
13         (JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
14         (JSC::BytecodeIntrinsicRegistry::sentinelMapBucketValue):
15         (JSC::BytecodeIntrinsicRegistry::sentinelSetBucketValue):
16         * bytecode/BytecodeIntrinsicRegistry.h:
17         * dfg/DFGByteCodeParser.cpp:
18         (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
19         * dfg/DFGOperations.cpp:
20         * dfg/DFGSpeculativeJIT.cpp:
21         (JSC::DFG::SpeculativeJIT::compileGetMapBucketNext):
22         * dfg/DFGSpeculativeJIT64.cpp:
23         (JSC::DFG::SpeculativeJIT::compile):
24         * ftl/FTLLowerDFGToB3.cpp:
25         (JSC::FTL::DFG::LowerDFGToB3::compileGetMapBucket):
26         (JSC::FTL::DFG::LowerDFGToB3::compileGetMapBucketNext):
27         * runtime/MapConstructor.cpp:
28         (JSC::mapPrivateFuncMapBucketNext):
29         * runtime/SetConstructor.cpp:
30         (JSC::setPrivateFuncSetBucketNext):
31         * runtime/VM.cpp:
32         (JSC::VM::VM):
33         (JSC::VM::sentinelSetBucketSlow):
34         (JSC::VM::sentinelMapBucketSlow):
35         * runtime/VM.h:
36         (JSC::VM::sentinelSetBucket):
37         (JSC::VM::sentinelMapBucket):
38
39 2019-02-20  Darin Adler  <darin@apple.com>
40
41         Finish removing String::format
42         https://bugs.webkit.org/show_bug.cgi?id=194893
43
44         Reviewed by Daniel Bates.
45
46         * bytecode/CodeBlock.cpp:
47         (JSC::CodeBlock::nameForRegister): Use makeString instead of String::format,
48         using the new "pad" function.
49
50 2019-02-23  Robin Morisset  <rmorisset@apple.com>
51
52         Remove dead code: AdjacencyList::justOneChild()
53         https://bugs.webkit.org/show_bug.cgi?id=194965
54
55         Reviewed by Sam Weinig.
56
57         * dfg/DFGAdjacencyList.h:
58         (JSC::DFG::AdjacencyList::justOneChild const): Deleted.
59
60 2019-02-23  Michael Catanzaro  <mcatanzaro@igalia.com>
61
62         Unreviewed, fix -Wunused-param warning
63
64         * jsc.cpp:
65
66 2019-02-23  Mark Lam  <mark.lam@apple.com>
67
68         Add an exception check and some assertions in StringPrototype.cpp.
69         https://bugs.webkit.org/show_bug.cgi?id=194962
70         <rdar://problem/48013416>
71
72         Reviewed by Yusuke Suzuki and Saam Barati.
73
74         * runtime/StringPrototype.cpp:
75         (JSC::jsSpliceSubstrings):
76         (JSC::jsSpliceSubstringsWithSeparators):
77         (JSC::operationStringProtoFuncReplaceRegExpEmptyStr):
78
79 2019-02-23  Keith Miller  <keith_miller@apple.com>
80
81         Add new mac target numbers
82         https://bugs.webkit.org/show_bug.cgi?id=194955
83
84         Reviewed by Tim Horton.
85
86         * Configurations/Base.xcconfig:
87         * Configurations/DebugRelease.xcconfig:
88
89 2019-02-22  Robin Morisset  <rmorisset@apple.com>
90
91         DFGBytecodeParser should not declare that a node won't clobberExit if DFGFixupPhase can later declare it does clobberExit
92         https://bugs.webkit.org/show_bug.cgi?id=194953
93         <rdar://problem/47595253>
94
95         Reviewed by Saam Barati.
96
97         For each node that
98         (a) may or may not clobberExit depending on their arrayMode
99         (b) and get their arrayMode from profiling information in DFGBytecodeParser
100         (c) and can have their arrayMode refined by DFGFixupPhase,
101         We must make sure to be conservative in the DFGBytecodeParser and treat it as if it unconditionnally clobbered the exit.
102         Otherwise we will hit a validation failure after fixup if the next node was marked ExitValid and exits to the same semantic origin.
103
104         The list of nodes that fit (a) is:
105         - StringCharAt
106         - HasIndexProperty
107         - GetByVal
108         - PutByValDirect
109         - PutByVal
110         - PutByValAlias
111         - GetIndexedPropertyStorage
112
113         Out of these, the following also fit (b) and (c):
114         - HasIndexedProperty
115         - GetByVal
116         - PutByValDirect
117         - PutByVal
118
119         GetByVal already had "m_exitOK = false; // GetByVal must be treated as if it clobbers exit state, since FixupPhase may make it generic."
120         So we just have to fix the other three the same way.
121
122         * dfg/DFGByteCodeParser.cpp:
123         (JSC::DFG::ByteCodeParser::parseBlock):
124         (JSC::DFG::ByteCodeParser::handlePutByVal):
125
126 2019-02-22  Robin Morisset  <rmorisset@apple.com>
127
128         B3ReduceStrength: missing peephole optimizations for binary operations
129         https://bugs.webkit.org/show_bug.cgi?id=194252
130
131         Reviewed by Saam Barati.
132
133         Adds several sets of optimizations for BitAnd, BitOr and BitXor.
134         Using BitAnd distributivity over BitOr and BitXor:
135           Turn any of these (for Op == BitOr || Op == BitXor):
136                 Op(BitAnd(x1, x2), BitAnd(x1, x3))
137                 Op(BitAnd(x2, x1), BitAnd(x1, x3))
138                 Op(BitAnd(x1, x2), BitAnd(x3, x1))
139                 Op(BitAnd(x2, x1), BitAnd(x3, x1))
140            Into this: BitAnd(Op(x2, x3), x1)
141            And any of these:
142                 Op(BitAnd(x1, x2), x1)
143                 Op(BitAnd(x2, x1), x1)
144                 Op(x1, BitAnd(x1, x2))
145                 Op(x1, BitAnd(x2, x1))
146            Into this: BitAnd(Op(x2, x1), x1)
147            This second set is equivalent to doing x1 => BitAnd(x1, x1), and then applying the first set.
148         Using de Morgan laws (we represent not as BitXor with allOnes):
149           BitAnd(BitXor(x1, allOnes), BitXor(x2, allOnes)) => BitXor(BitOr(x1, x2), allOnes)
150           BitOr(BitXor(x1, allOnes), BitXor(x2, allOnes) => BitXor(BitAnd(x1, x2), allOnes)
151           BitOr(BitXor(x, allOnes), c) => BitXor(BitAnd(x, ~c), allOnes)
152           BitAnd(BitXor(x, allOnes), c) => BitXor(BitOr(x, ~c), allOnes)
153         The latter two are equivalent to doing c => BitXor(~c, allOnes), and then applying the former two.
154
155         All of these transformations either reduce the number of operations (which we always do when possible), or bring the expression closer to having:
156           - BitXor with all ones at the outermost
157           - then BitAnd
158           - then other BitXor
159           - then BitOr at the innermost.
160         These transformations that don't directly reduce the number of operations are still useful for normalization (helping things like CSE), and also can enable
161         more optimizations (for example BitXor with all ones can easily cancel each other once they are all at the outermost level).
162
163         * b3/B3ReduceStrength.cpp:
164         * b3/testb3.cpp:
165         (JSC::B3::testBitAndNotNot):
166         (JSC::B3::testBitAndNotImm):
167         (JSC::B3::testBitOrAndAndArgs):
168         (JSC::B3::testBitOrAndSameArgs):
169         (JSC::B3::testBitOrNotNot):
170         (JSC::B3::testBitOrNotImm):
171         (JSC::B3::testBitXorAndAndArgs):
172         (JSC::B3::testBitXorAndSameArgs):
173         (JSC::B3::run):
174
175 2019-02-22  Yusuke Suzuki  <ysuzuki@apple.com>
176
177         [JSC] putNonEnumerable in JSWrapperMap is too costly
178         https://bugs.webkit.org/show_bug.cgi?id=194935
179
180         Reviewed by Mark Lam.
181
182         When we convert Objective-C blocks to JS objects, we need to set up a corresponding function object correctly.
183         During this allocation, we call [JSValue defineProperty:descriptor] to connect a "prototype" object and "constructor" object.
184         The problem is that this API has a particularly costly implementation:
185
186             [[_context globalObject][@"Object"] invokeMethod:@"defineProperty" withArguments:@[ self, key, descriptor ]];
187
188         This wraps each JS objects appear in this code with Objective-C wrapper. And we convert a NSDictionary to JSObject, which
189         has "writable", "enumerable", "configurable", "value" fields, and call the "defineProperty" JS function through Objective-C wrapper.
190         This allocates many Objective-C wrappers and JS objects for descriptors. Since JSC has a direct C++ API "defineOwnProperty", we should
191         bypass these Objective-C APIs and call JSC's code directly.
192
193         This patch changes `putNonEnumerable` implementation, from calling [JSValue defineProperty:descriptor] to calling JSC C++ code directly.
194         We do not change [JSValue defineProperty:descriptor] implementation for now because of two reasons. (1) This is not used in our benchmarks
195         except for this (converting an Objective-C block to a JS object) one path. And (2) even if we were to re-write [JSValue defineProperty:descriptor]
196         to be more optimized, we would still want to call the JSC C++ version of defineProperty directly here to avoid NSDictionary allocation for a descriptor.
197
198         * API/APIUtils.h:
199         (setException):
200         * API/JSWrapperMap.mm:
201         (putNonEnumerable):
202         (copyMethodsToObject):
203         (-[JSObjCClassInfo allocateConstructorAndPrototypeInContext:]):
204         (-[JSObjCClassInfo wrapperForObject:inContext:]):
205
206 2019-02-22  Yusuke Suzuki  <ysuzuki@apple.com>
207
208         Unreviewed, build fix after r241954
209         https://bugs.webkit.org/show_bug.cgi?id=194939
210
211         Renaming setCanAccessHeap was incomplete.
212
213         * runtime/SmallStrings.cpp:
214         (JSC::SmallStrings::initializeCommonStrings):
215         * runtime/VM.cpp:
216         (JSC::VM::~VM):
217
218 2019-02-22  Yusuke Suzuki  <ysuzuki@apple.com>
219
220         [JSC] SmallStringsStorage is unnecessary
221         https://bugs.webkit.org/show_bug.cgi?id=194939
222
223         Reviewed by Mark Lam.
224
225         SmallStrings hold common small JSStrings. Their underlying StringImpl is also held by SmallStringsStorage.
226         But it is duplicate since we can get StringImpl from small JSStrings. This patch removes SmallStringsStorage,
227         and get StringImpls from JSStrings if necessary.
228
229         We also add m_canAccessHeap flag to SmallStrings. At the time of VM destruction, JSStrings are destroyed when
230         VM's Heap is finalized. We must not touch JSStrings before VM's heap (and JSStrings in SmallStrings) is initialized,
231         and after VM's Heap is destroyed. We add this m_canAccessHeap flag to allow users to get StringImpl during the
232         this sensitive period. If m_canAccessHeap is false, we get StringImpl from AtomicStringImpl::add.
233
234         * runtime/SmallStrings.cpp:
235         (JSC::SmallStrings::initializeCommonStrings):
236         (JSC::SmallStrings::singleCharacterStringRep):
237         (JSC::SmallStringsStorage::rep): Deleted.
238         (JSC::SmallStringsStorage::SmallStringsStorage): Deleted.
239         (JSC::SmallStrings::createSingleCharacterString): Deleted.
240         * runtime/SmallStrings.h:
241         (JSC::SmallStrings::setCanAccessHeap):
242         * runtime/VM.cpp:
243         (JSC::VM::VM):
244         (JSC::VM::~VM):
245
246 2019-02-22  Tadeu Zagallo  <tzagallo@apple.com>
247
248         Cache CompactVariableMap::Handle instead of VariableEnvironment for UnlinkedFunctionExecutable
249         https://bugs.webkit.org/show_bug.cgi?id=194706
250
251         Reviewed by Saam Barati.
252
253         In https://bugs.webkit.org/show_bug.cgi?id=194583 we started using a
254         CompactVariableMap::Handle instead of VariableEnvironment for
255         UnlinkedFunctionExecutables, but we were creating the full environment
256         to encode the executable in the bytecode cache. This patch changes it so
257         that we cache the handle instead of the environment. This avoids duplicating
258         the VariableEnvironment whenever we have to cache two handles that point
259         to the environment.
260
261         * bytecode/UnlinkedFunctionExecutable.h:
262         * parser/VariableEnvironment.cpp:
263         (JSC::CompactVariableMap::get):
264         * parser/VariableEnvironment.h:
265         * runtime/CachedTypes.cpp:
266         (JSC::CachedCompactVariableEnvironment::encode):
267         (JSC::CachedCompactVariableEnvironment::decode const):
268         (JSC::CachedCompactVariableMapHandle::encode):
269         (JSC::CachedCompactVariableMapHandle::decode const):
270         (JSC::CachedFunctionExecutable::encode):
271         (JSC::CachedFunctionExecutable::decode const):
272         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
273
274 2019-02-21  Saam Barati  <sbarati@apple.com>
275
276         Update JSScript SPI based on feedback
277         https://bugs.webkit.org/show_bug.cgi?id=194517
278
279         Reviewed by Keith Miller.
280
281         This patch updates the JSScript SPI in the following ways:
282         - JSScript can now represent both modules and programs. This is a property
283         of the script determined during creation.
284         - JSScript now takes a sourceURL during construction. For modules, this acts
285         as the module identifier.
286         - JSScript now has SPI for writing the cache out to disk. We don't do this
287         automatically.
288         - JSScript will load the bytecode cache on creation if it exists.
289         - We retrofit these new requirements on the prior JSScript SPI that
290         we're going to remove as soon as we can: https://bugs.webkit.org/show_bug.cgi?id=194909.
291         Previous SPI assumes all JSScripts are modules. Previous SPI also assigns
292         a sourceURL to the JSScript based on what the module loader decided the
293         identifier should be. We'll remove this once we remove the old SPI.
294         
295         This patch also adds SPI to JSContext to evaluate a JSScript. For modules,
296         this is like returning the result of doing dynamic import. For programs,
297         this does normal program evaluation.
298         
299         This patch also fixes a bug in generateBytecode/generateModuleBytecode where
300         we would try to cache the bytecode even if recursivelyGenerateUnlinkedCodeBlock
301         returned null. E.g, if the script had a syntax error.
302         
303         When writing tests, I also discovered that someone previously broke
304         testapi. This patch also fixes those failures. They were broken when
305         we switched to using a testapiScripts directory to hold our test .js
306         scripts. 
307
308         * API/JSAPIGlobalObject.h:
309         * API/JSAPIGlobalObject.mm:
310         (JSC::JSAPIGlobalObject::moduleLoaderResolve):
311         (JSC::JSAPIGlobalObject::moduleLoaderFetch):
312         (JSC::JSAPIGlobalObject::loadAndEvaluateJSScriptModule):
313         * API/JSBase.cpp:
314         (JSEvaluateScriptInternal):
315         (JSEvaluateScript):
316         * API/JSBaseInternal.h: Added.
317         * API/JSContext.mm:
318         (-[JSContext evaluateScript:withSourceURL:]):
319         (-[JSContext evaluateJSScript:]):
320         * API/JSContextPrivate.h:
321         * API/JSScript.h:
322         * API/JSScript.mm:
323         (+[JSScript scriptWithSource:inVirtualMachine:]):
324         (+[JSScript scriptFromASCIIFile:inVirtualMachine:withCodeSigning:andBytecodeCache:]):
325         (createError):
326         (+[JSScript scriptOfType:inVirtualMachine:withSourceURL:andSource:andBytecodeCache:error:]):
327         (+[JSScript scriptOfType:inVirtualMachine:memoryMappedFromASCIIFile:withSourceURL:andBytecodeCache:error:]):
328         (-[JSScript cacheBytecodeWithError:]):
329         (-[JSScript sourceURL]):
330         (-[JSScript type]):
331         (-[JSScript jsSourceCode]):
332         (-[JSScript writeCache:]):
333         (-[JSScript setSourceURL:]):
334         (-[JSScript forceRecreateJSSourceCode]):
335         (-[JSScript writeCache]): Deleted.
336         (-[JSScript jsSourceCode:]): Deleted.
337         * API/JSScriptInternal.h:
338         * API/tests/FunctionOverridesTest.cpp:
339         (testFunctionOverrides):
340         * API/tests/testapi.c:
341         (main):
342         * API/tests/testapi.mm:
343         (tempFile):
344         (testModuleBytecodeCache):
345         (testProgramBytecodeCache):
346         (testBytecodeCacheWithSyntaxError):
347         (testProgramJSScriptException):
348         (testLoadBasicFileLegacySPI):
349         (+[JSContextMemoryMappedLoaderDelegate newContext]):
350         (-[JSContextMemoryMappedLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):
351         (testLoadBasicFile):
352         (+[JSContextAugmentedLoaderDelegate newContext]):
353         (-[JSContextAugmentedLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):
354         (testJSScriptURL):
355         (testObjectiveCAPI):
356         (testBytecodeCache): Deleted.
357         * API/tests/testapiScripts/foo.js: Added.
358         * JavaScriptCore.xcodeproj/project.pbxproj:
359         * runtime/Completion.cpp:
360         (JSC::generateBytecode):
361         (JSC::generateModuleBytecode):
362
363 2019-02-21  Mark Lam  <mark.lam@apple.com>
364
365         Add more doesGC() assertions.
366         https://bugs.webkit.org/show_bug.cgi?id=194911
367         <rdar://problem/48285723>
368
369         Reviewed by Saam Barati and Yusuke Suzuki.
370
371         * dfg/DFGOSRExit.cpp:
372         (JSC::DFG::OSRExit::compileOSRExit):
373         - Set expectDoesGC here because we no longer have to worry about missing store
374           barriers in optimized code after this point.  This will prevent false positive
375           assertion failures arising from functions called beneath compileOSRExit().
376
377         (JSC::DFG::OSRExit::compileExit):
378         - Add a comment to explain why the generated ramp needs to set expectDoesGC even
379           though compileOSRExit() also sets it.  Reason: compileOSRExit() is only called
380           for the first OSR from this code origin, the generated ramp is called for many
381           subsequents OSR exits from this code origin.
382
383         * ftl/FTLOSRExitCompiler.cpp:
384         (JSC::FTL::compileStub):
385         - Added a comment for the equivalent reason to the one above.
386
387         (JSC::FTL::compileFTLOSRExit):
388         - Set expectDoesGC here because we no longer have to worry about missing store
389           barriers in optimized code after this point.  This will prevent false positive
390           assertion failures arising from functions called beneath compileFTLOSRExit().
391
392         * heap/CompleteSubspace.cpp:
393         (JSC::CompleteSubspace::tryAllocateSlow):
394         * heap/CompleteSubspaceInlines.h:
395         (JSC::CompleteSubspace::allocateNonVirtual):
396         - assert expectDoesGC.
397
398         * heap/DeferGC.h:
399         (JSC::DeferGC::~DeferGC):
400         - assert expectDoesGC.
401         - Also added WTF_FORBID_HEAP_ALLOCATION to DeferGC, DeferGCForAWhile, and DisallowGC
402           because all 3 should be stack allocated RAII objects.
403
404         * heap/GCDeferralContext.h:
405         * heap/GCDeferralContextInlines.h:
406         (JSC::GCDeferralContext::~GCDeferralContext):
407         - Added WTF_FORBID_HEAP_ALLOCATION.
408         - assert expectDoesGC.
409
410         * heap/Heap.cpp:
411         (JSC::Heap::collectNow):
412         (JSC::Heap::collectAsync):
413         (JSC::Heap::collectSync):
414         (JSC::Heap::stopIfNecessarySlow):
415         (JSC::Heap::collectIfNecessaryOrDefer):
416         * heap/HeapInlines.h:
417         (JSC::Heap::acquireAccess):
418         (JSC::Heap::stopIfNecessary):
419         * heap/LargeAllocation.cpp:
420         (JSC::LargeAllocation::tryCreate):
421         * heap/LocalAllocatorInlines.h:
422         (JSC::LocalAllocator::allocate):
423         - conservatively assert expectDoesGC on these functions that may trigger a GC
424           though they don't always do.
425
426         * runtime/DisallowScope.h:
427         - DisallowScope should be stack allocated because it's an RAII object.
428
429         * runtime/JSCellInlines.h:
430         (JSC::tryAllocateCellHelper):
431         - Remove the expectDoesGC assertion because it is now covered by assertions in
432           CompleteSubspace, LargeAllocation, and LocalAllocator.
433
434         * runtime/RegExpMatchesArray.h:
435         (JSC::createRegExpMatchesArray):
436         - assert expectDoesGC.
437
438 2019-02-21  Yusuke Suzuki  <ysuzuki@apple.com>
439
440         [JSC] Use Fast Malloc as much as possible
441         https://bugs.webkit.org/show_bug.cgi?id=194316
442
443         Reviewed by Mark Lam.
444
445         We should use Fast Malloc as much as possible to offer the whole memory view to bmalloc.
446
447         * inspector/scripts/codegen/cpp_generator_templates.py:
448         * inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result:
449         * inspector/scripts/tests/generic/expected/enum-values.json-result:
450         * inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result:
451         * inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
452         * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result:
453         * jit/ExecutableAllocator.h:
454         * jsc.cpp:
455         * runtime/JSRunLoopTimer.h:
456         * tools/VMInspector.h:
457         * wasm/WasmThunks.h:
458
459 2019-02-20  Yusuke Suzuki  <ysuzuki@apple.com>
460
461         [JSC] Remove WatchpointSet creation for SymbolTable entries if VM::canUseJIT() returns false
462         https://bugs.webkit.org/show_bug.cgi?id=194891
463
464         Reviewed by Geoffrey Garen.
465
466         WatchpointSet in SymbolTable is used to fold the value into a constant in JIT tiers. And it is
467         not useful under the non-JIT mode. This patch avoids creation of WatchpointSet in SymbolTable
468         if VM::canUseJIT() returns false.
469
470         * llint/LowLevelInterpreter32_64.asm:
471         * llint/LowLevelInterpreter64.asm:
472         * runtime/SymbolTable.cpp:
473         (JSC::SymbolTableEntry::addWatchpoint): Deleted.
474         * runtime/SymbolTable.h:
475         (JSC::SymbolTableEntry::isWatchable const):
476         (JSC::SymbolTableEntry::watchpointSet):
477
478 2019-02-20  Mark Lam  <mark.lam@apple.com>
479
480         Add code to validate expected GC activity modelled by doesGC() against what the runtime encounters.
481         https://bugs.webkit.org/show_bug.cgi?id=193938
482         <rdar://problem/47616277>
483
484         Reviewed by Michael Saboff, Saam Barati, and Robin Morisset.
485
486         In DFG::SpeculativeJIT::compile() and FTL::LowerDFGToB3::compileNode(), before
487         emitting code / B3IR for each DFG node, we emit a write to set Heap::m_expectDoesGC
488         to the value returned by doesGC() for that node.  In the runtime (i.e. in allocateCell()
489         and functions that can resolve a rope), we assert that Heap::m_expectDoesGC is
490         true.
491
492         This validation code is currently only enabled for debug builds.  It is disabled
493         for release builds by default, but it can easily be made to run on release builds
494         as well by forcing ENABLE_DFG_DOES_GC_VALIDATION to 1 in Heap.h.
495
496         To allow this validation code to run on release builds as well, the validation uses
497         RELEASE_ASSERT instead of ASSERT.
498
499         To ensure that Heap.h is #include'd for all files that needs to do this validation
500         (so that the validation code is accidentally disabled), we guard the validation
501         code with an if conditional on constexpr bool validateDFGDoesGC (instead of using
502         a #if ENABLE(DFG_DOES_GC_VALIDATION)).  This way, if Heap.h isn't #include'd, the
503         validation code will fail to build (no silent failures).
504
505         Currently, all JSC tests and Layout tests should pass with this validation enabled
506         in debug builds.  We'll only see new failures if there's a regression or if new
507         tests reveal a previously untested code path that has an undetected issue.
508
509         * dfg/DFGOSRExit.cpp:
510         (JSC::DFG::OSRExit::executeOSRExit):
511         (JSC::DFG::OSRExit::compileExit):
512         * dfg/DFGSpeculativeJIT64.cpp:
513         (JSC::DFG::SpeculativeJIT::compile):
514         * ftl/FTLLowerDFGToB3.cpp:
515         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
516         * ftl/FTLOSRExitCompiler.cpp:
517         (JSC::FTL::compileStub):
518         * heap/Heap.h:
519         (JSC::Heap::expectDoesGC const):
520         (JSC::Heap::setExpectDoesGC):
521         (JSC::Heap::addressOfExpectDoesGC):
522         * jit/JITArithmetic.cpp:
523         (JSC::JIT::emit_compareAndJump):
524         * runtime/JSCellInlines.h:
525         (JSC::tryAllocateCellHelper):
526         * runtime/JSString.h:
527         (JSC::jsSingleCharacterString):
528         (JSC::JSString::toAtomicString const):
529         (JSC::JSString::toExistingAtomicString const):
530         (JSC::JSString::value const):
531         (JSC::JSString::tryGetValue const):
532         (JSC::JSRopeString::unsafeView const):
533         (JSC::JSRopeString::viewWithUnderlyingString const):
534         (JSC::JSString::unsafeView const):
535
536 2019-02-20  Andy Estes  <aestes@apple.com>
537
538         [Xcode] Add SDKVariant.xcconfig to various Xcode projects
539         https://bugs.webkit.org/show_bug.cgi?id=194869
540
541         Rubber-stamped by Jer Noble.
542
543         * JavaScriptCore.xcodeproj/project.pbxproj:
544
545 2019-02-19  Joseph Pecoraro  <pecoraro@apple.com>
546
547         Web Inspector: Improve ES6 Class instances in Heap Snapshot instances view
548         https://bugs.webkit.org/show_bug.cgi?id=172848
549         <rdar://problem/25709212>
550
551         Reviewed by Mark Lam.
552
553         * heap/HeapSnapshotBuilder.h:
554         * heap/HeapSnapshotBuilder.cpp:
555         Update the snapshot version. Change the node's 0 | 1 internal value
556         to be a 32bit bit flag. This is nice in that it is both compatible
557         with the previous snapshot version and the same size. We can use more
558         flags in the future.
559
560         (JSC::HeapSnapshotBuilder::json):
561         In cases where the classInfo gives us "Object" check for a better
562         class name by checking (o).__proto__.constructor.name. We avoid this
563         check in cases where (o).hasOwnProperty("constructor") which is the
564         case for most Foo.prototype objects. Otherwise this would get the
565         name of the Foo superclass for the Foo.prototype object.
566
567         * runtime/JSObject.cpp:
568         (JSC::JSObject::calculatedClassName):
569         Handle some possible edge cases that were not handled before, such as
570         a JSObject without a GlobalObject or an object which doesn't
571         have a default getPrototype. Try to make the code a little clearer.
572
573 2019-02-19  Truitt Savell  <tsavell@apple.com>
574
575         Unreviewed, rolling out r241784.
576
577         Broke all OpenSource builds.
578
579         Reverted changeset:
580
581         "Web Inspector: Improve ES6 Class instances in Heap Snapshot
582         instances view"
583         https://bugs.webkit.org/show_bug.cgi?id=172848
584         https://trac.webkit.org/changeset/241784
585
586 2019-02-19  Joseph Pecoraro  <pecoraro@apple.com>
587
588         Web Inspector: Improve ES6 Class instances in Heap Snapshot instances view
589         https://bugs.webkit.org/show_bug.cgi?id=172848
590         <rdar://problem/25709212>
591
592         Reviewed by Mark Lam.
593
594         * heap/HeapSnapshotBuilder.h:
595         * heap/HeapSnapshotBuilder.cpp:
596         Update the snapshot version. Change the node's 0 | 1 internal value
597         to be a 32bit bit flag. This is nice in that it is both compatible
598         with the previous snapshot version and the same size. We can use more
599         flags in the future.
600
601         (JSC::HeapSnapshotBuilder::json):
602         In cases where the classInfo gives us "Object" check for a better
603         class name by checking (o).__proto__.constructor.name. We avoid this
604         check in cases where (o).hasOwnProperty("constructor") which is the
605         case for most Foo.prototype objects. Otherwise this would get the
606         name of the Foo superclass for the Foo.prototype object.
607
608         * runtime/JSObject.cpp:
609         (JSC::JSObject::calculatedClassName):
610         Handle some possible edge cases that were not handled before, such as
611         a JSObject without a GlobalObject or an object which doesn't
612         have a default getPrototype. Try to make the code a little clearer.
613
614 2019-02-19  Robin Morisset  <rmorisset@apple.com>
615
616         B3-O2 incorrectly optimizes this subtest
617         https://bugs.webkit.org/show_bug.cgi?id=194625
618
619         Reviewed by Saam Barati.
620
621         Trivial fix. Instead of doing
622             if (!cond) foo else bar => if (cond) bar else foo
623         B3LowerToAir was doing
624             if (x^C) foo else bar => if (cond) bar else foo whenever C&1, even if C was for example 3.
625
626         * b3/B3LowerToAir.cpp:
627         * b3/testb3.cpp:
628         (JSC::B3::testBitNotOnBooleanAndBranch32):
629         (JSC::B3::testNotOnBooleanAndBranch32): Added.
630
631 2019-02-19  Robin Morisset  <rmorisset@apple.com>
632
633         CachedCall should not consider it UNLIKELY that it will not stack overflow
634         https://bugs.webkit.org/show_bug.cgi?id=194831
635
636         Reviewed by Mark Lam.
637
638         * interpreter/CachedCall.h:
639         (JSC::CachedCall::CachedCall):
640
641 2019-02-19  Mark Lam  <mark.lam@apple.com>
642
643         Fix DFG doesGC() for TryGetById and ProfileType nodes.
644         https://bugs.webkit.org/show_bug.cgi?id=194821
645         <rdar://problem/48206690>
646
647         Reviewed by Saam Barati.
648
649         Fix doesGC() for the following nodes:
650
651             ProfileType:
652                 calls operationProcessTypeProfilerLogDFG(), which can calculatedClassName(),
653                 which can call JSString::tryGetValue(), which can resolve a rope.
654
655             TryGetById:
656                 calls operationTryGetByIdOptimize(), which can startWatchingPropertyForReplacements()
657                 on a structure, which can allocate StructureRareData.
658
659         * dfg/DFGDoesGC.cpp:
660         (JSC::DFG::doesGC):
661
662 2019-02-18  Yusuke Suzuki  <ysuzuki@apple.com>
663
664         [JSC] Introduce JSNonDestructibleProxy for JavaScriptCore.framework's GlobalThis
665         https://bugs.webkit.org/show_bug.cgi?id=194799
666
667         Reviewed by Saam Barati.
668
669         JSProxy is destructible one because we have JSWindowProxy which has ref counted object.
670         However, JavaScriptCore.framework's JSProxy for GlobalThis does not need to be destructible.
671         This is important since we need to separate Heap subspaces between destructible and non-destructible objects.
672         If we can put more and more objects in non-destructible status, we can get rid of low-usage MarkedBlock.
673         This patch adds JSNonDestructibleProxy, which is not destructible JSProxy. While it inherits JSDestructibleObject,
674         we can make the subclass still non-destructible thanks to Subspace mechanism. This drops one more low-usage MarkedBlock.
675
676         * CMakeLists.txt:
677         * JavaScriptCore.xcodeproj/project.pbxproj:
678         * Sources.txt:
679         * runtime/JSGlobalObject.cpp:
680         (JSC::JSGlobalObject::resetPrototype):
681         (JSC::JSGlobalObject::finishCreation):
682         * runtime/JSNonDestructibleProxy.cpp: Added.
683         * runtime/JSNonDestructibleProxy.h: Added.
684         (JSC::JSNonDestructibleProxy::subspaceFor):
685         (JSC::JSNonDestructibleProxy::create):
686         (JSC::JSNonDestructibleProxy::createStructure):
687         (JSC::JSNonDestructibleProxy::JSNonDestructibleProxy):
688         * runtime/JSProxy.h:
689         (JSC::JSProxy::JSProxy):
690
691 2019-02-19  Robin Morisset  <rmorisset@apple.com>
692
693         B3ReduceStrength::simplifyCFG() could do a lot more on each iteration
694         https://bugs.webkit.org/show_bug.cgi?id=194475
695
696         Reviewed by Saam Barati.
697
698         B3ReduceStrength::simplifyCFG() does three optimizations (which I will call A, B and C):
699         - A makes any terminal that points to a block that is empty except for a jump point to that jump's target instead.
700         - B transforms any branch or switch that points to a single block into a jump
701         - C finds blocks ending with jumps, whose successor has a single predecessor, and inline that successor block in place of the jump
702
703         It currently is limited in the following way:
704         - A and C can only fire once per block per iteration
705         - B can create jumps that would trigger A, but they may not be seen until the next iteration
706
707         Both problems are mitigated by going through the blocks in post-order, so that when a block is optimized most of its successors have already been optimized.
708         In a sense it is the symmetric of the peephole optimizer that goes in pre-order so that when an instruction is optimized most of its children have already been optimized.
709
710         On JetStream2 it reduces the average number of iterations from 3.35 to 3.24.
711
712         * b3/B3ReduceStrength.cpp:
713
714 2019-02-19  Tadeu Zagallo  <tzagallo@apple.com>
715
716         Move bytecode cache-related filesystem code out of CodeCache
717         https://bugs.webkit.org/show_bug.cgi?id=194675
718
719         Reviewed by Saam Barati.
720
721         The code is only used for the bytecode-cache tests, so it should live in
722         jsc.cpp rather than in the CodeCache. The logic now lives in ShellSourceProvider,
723         which overrides the a virtual method in SourceProvider, `cacheBytecode`,
724         in order to write the cache to disk.
725
726         * jsc.cpp:
727         (ShellSourceProvider::create):
728         (ShellSourceProvider::~ShellSourceProvider):
729         (ShellSourceProvider::cachePath const):
730         (ShellSourceProvider::loadBytecode):
731         (ShellSourceProvider::ShellSourceProvider):
732         (jscSource):
733         (GlobalObject::moduleLoaderFetch):
734         (functionDollarEvalScript):
735         (runWithOptions):
736         * parser/SourceProvider.h:
737         (JSC::SourceProvider::cacheBytecode const):
738         * runtime/CodeCache.cpp:
739         (JSC::writeCodeBlock):
740         * runtime/CodeCache.h:
741         (JSC::CodeCacheMap::fetchFromDiskImpl):
742
743 2019-02-18  Dominik Infuehr  <dinfuehr@igalia.com>
744
745         [ARM] Fix crash with sampling profiler
746         https://bugs.webkit.org/show_bug.cgi?id=194772
747
748         Reviewed by Mark Lam.
749
750         sampling-profiler-richards.js was crashing with an enabled sampling profiler. add32
751         did not update the stack pointer in a single instruction. The src register was first
752         moved into the stack pointer, the immediate imm was added in a subsequent instruction.
753
754         This was problematic when a signal handler was invoked before applying the immediate,
755         when the stack pointer is still set to the temporary value. Avoid this by calculating src+imm in
756         a temporary register and then move it in one go into the stack pointer.
757
758         * assembler/MacroAssemblerARMv7.h:
759         (JSC::MacroAssemblerARMv7::add32):
760
761 2019-02-18  Mark Lam  <mark.lam@apple.com>
762
763         Fix DFG doesGC() for CompareEq/Less/LessEq/Greater/GreaterEq and CompareStrictEq nodes.
764         https://bugs.webkit.org/show_bug.cgi?id=194800
765         <rdar://problem/48183773>
766
767         Reviewed by Yusuke Suzuki.
768
769         Fix doesGC() for the following nodes:
770
771             CompareEq:
772             CompareLess:
773             CompareLessEq:
774             CompareGreater:
775             CompareGreaterEq:
776             CompareStrictEq:
777                 Only return false (i.e. does not GC) for child node use kinds that have
778                 been vetted to not do anything that can GC.  For all other use kinds
779                 (including StringUse and BigIntUse), we return true (i.e. does GC).
780
781         * dfg/DFGDoesGC.cpp:
782         (JSC::DFG::doesGC):
783
784 2019-02-16  Darin Adler  <darin@apple.com>
785
786         Continue reducing use of String::format, now focusing on hex: "%p", "%x", etc.
787         https://bugs.webkit.org/show_bug.cgi?id=194752
788
789         Reviewed by Daniel Bates.
790
791         * heap/HeapSnapshotBuilder.cpp:
792         (JSC::HeapSnapshotBuilder::json): Added back the "0x" that was removed when changing
793         this file to use appendUnsignedAsHex instead of "%p". The intent at that time was to
794         keep behavior the same, so let's do that.
795
796         * parser/Lexer.cpp:
797         (JSC::Lexer<T>::invalidCharacterMessage const): Use makeString and hex instead of
798         String::format and "%04x".
799
800 2019-02-18  Yusuke Suzuki  <ysuzuki@apple.com>
801
802         [JSC] Add LazyClassStructure::getInitializedOnMainThread
803         https://bugs.webkit.org/show_bug.cgi?id=194784
804         <rdar://problem/48154820>
805
806         Reviewed by Mark Lam.
807
808         LazyClassStructure::get and LazyProperty::get functions do not allow compiler threads to call them. But for booleanPrototype, numberPrototype and symbolPrototype cases,
809         we would like to call them from compiler threads. We eagerly initialize them if VM::canUseJIT() is true, so that compiler threads can safely call LazyClassStructure::get
810         and LazyProperty::get for booleanPrototype, numberPrototype and symbolPrototype. But still assertion hits because the assertion requires that these functions need to be
811         called in non compiler threads. Calling `getConcurrently()` is not possible since symbolPrototype() function is called from both the main thread and compiler threads,
812         and we would like to lazily initialize SymbolPrototype object if it is called from the main thread, which can happen with non-JIT configuration.
813
814         This patch adds `getInitializedOnMainThread()`. Compiler threads can call it only when we know that the value is already initialized on the main thread. The main thread
815         can call it at anytime and this function lazily initializes the value. This is useful to make some of prototypes lazy with non-JIT configuration: With non-JIT configuration,
816         this function is always called from the main thread and it initializes the value lazily. Non-JIT configuration does not care about compiler threads since they do not exist.
817         With JIT configuration, we eagerly initialize them in JSGlobalObject::init so that `getInitializedOnMainThread()` always succeeds.
818
819         Basically, `getInitializedOnMainThread()` is `get` with different assertion location: While `get` always crashes if it is called from compiler threads, `getInitializedOnMainThread()`
820         crashes only when actual initialization happens on compiler threads. We do not merge them since `get` is still useful to find accidental initialization from compiler threads.
821
822         * runtime/JSGlobalObject.h:
823         (JSC::JSGlobalObject::booleanPrototype const):
824         (JSC::JSGlobalObject::numberPrototype const):
825         (JSC::JSGlobalObject::symbolPrototype const):
826         * runtime/LazyClassStructure.h:
827         (JSC::LazyClassStructure::getInitializedOnMainThread const):
828         (JSC::LazyClassStructure::prototypeInitializedOnMainThread const):
829         (JSC::LazyClassStructure::constructorInitializedOnMainThread const):
830         * runtime/LazyProperty.h:
831         (JSC::LazyProperty::get const):
832         (JSC::LazyProperty::getInitializedOnMainThread const):
833
834 2019-02-18  Joseph Pecoraro  <pecoraro@apple.com>
835
836         Web Inspector: Better categorize CPU usage per-thread / worker
837         https://bugs.webkit.org/show_bug.cgi?id=194564
838
839         Reviewed by Devin Rousso.
840
841         * inspector/protocol/CPUProfiler.json:
842         Add additional properties per-Event, and new per-Thread object info.
843
844 2019-02-18  Tadeu Zagallo  <tzagallo@apple.com>
845
846         Bytecode cache should a have a boot-specific validation
847         https://bugs.webkit.org/show_bug.cgi?id=194769
848         <rdar://problem/48149509>
849
850         Reviewed by Keith Miller.
851
852         Add the boot UUID to the cached bytecode to enforce that it is not reused
853         across reboots.
854
855         * runtime/CachedTypes.cpp:
856         (JSC::Encoder::malloc):
857         (JSC::GenericCacheEntry::GenericCacheEntry):
858         (JSC::GenericCacheEntry::tag const):
859         (JSC::CacheEntry::CacheEntry):
860         (JSC::CacheEntry::decode const):
861         (JSC::GenericCacheEntry::decode const):
862         (JSC::encodeCodeBlock):
863
864 2019-02-18  Eric Carlson  <eric.carlson@apple.com>
865
866         Add MSE logging configuration
867         https://bugs.webkit.org/show_bug.cgi?id=194719
868         <rdar://problem/48122151>
869
870         Reviewed by Joseph Pecoraro.
871
872         * inspector/ConsoleMessage.cpp:
873         (Inspector::messageSourceValue):
874         * inspector/protocol/Console.json:
875         * inspector/scripts/codegen/generator.py:
876         * runtime/ConsoleTypes.h:
877
878 2019-02-18  Tadeu Zagallo  <tzagallo@apple.com>
879
880         Add version number to cached bytecode
881         https://bugs.webkit.org/show_bug.cgi?id=194768
882         <rdar://problem/48147968>
883
884         Reviewed by Saam Barati.
885
886         Add a version number to the bytecode cache that should be unique per build.
887
888         * CMakeLists.txt:
889         * DerivedSources-output.xcfilelist:
890         * DerivedSources.make:
891         * runtime/CachedTypes.cpp:
892         (JSC::Encoder::malloc):
893         (JSC::GenericCacheEntry::GenericCacheEntry):
894         (JSC::CacheEntry::CacheEntry):
895         (JSC::CacheEntry::encode):
896         (JSC::CacheEntry::decode const):
897         (JSC::GenericCacheEntry::decode const):
898         (JSC::decodeCodeBlockImpl):
899         * runtime/CodeCache.h:
900         (JSC::CodeCacheMap::fetchFromDiskImpl):
901
902 2019-02-17  Saam Barati  <sbarati@apple.com>
903
904         WasmB3IRGenerator models some effects incorrectly
905         https://bugs.webkit.org/show_bug.cgi?id=194038
906
907         Reviewed by Keith Miller.
908
909         * wasm/WasmB3IRGenerator.cpp:
910         (JSC::Wasm::B3IRGenerator::restoreWasmContextInstance):
911         (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
912         These two functions were using global state instead of the
913         arguments passed into the function.
914
915         (JSC::Wasm::B3IRGenerator::addOp<F64ConvertUI64>):
916         (JSC::Wasm::B3IRGenerator::addOp<OpType::F32ConvertUI64>):
917         (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncUF64>):
918         (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncUF32>):
919         Any patchpoint that allows scratch register usage must
920         also say that it clobbers the scratch registers.
921
922 2019-02-17  Saam Barati  <sbarati@apple.com>
923
924         Deadlock when adding a Structure property transition and then doing incremental marking
925         https://bugs.webkit.org/show_bug.cgi?id=194767
926
927         Reviewed by Mark Lam.
928
929         This can happen in the following scenario:
930         
931         You have a Structure S. S is on the mark stack. Then:
932         1. S grabs its lock
933         2. S adds a new property transition
934         3. We find out we need to do some incremental marking
935         4. We mark S
936         5. visitChildren on S will try to grab its lock
937         6. We are now in a deadlock
938
939         * heap/Heap.cpp:
940         (JSC::Heap::performIncrement):
941         * runtime/Structure.cpp:
942         (JSC::Structure::addNewPropertyTransition):
943
944 2019-02-17  David Kilzer  <ddkilzer@apple.com>
945
946         Unreviewed, rolling out r241620.
947
948         "Causes use-after-free crashes running layout tests with ASan and GuardMalloc."
949         (Requested by ddkilzer on #webkit.)
950
951         Reverted changeset:
952
953         "[WTF] Add environment variable helpers"
954         https://bugs.webkit.org/show_bug.cgi?id=192405
955         https://trac.webkit.org/changeset/241620
956
957 2019-02-17  Commit Queue  <commit-queue@webkit.org>
958
959         Unreviewed, rolling out r241612.
960         https://bugs.webkit.org/show_bug.cgi?id=194762
961
962         "It regressed JetStream2 parsing tests by ~40%" (Requested by
963         saamyjoon on #webkit).
964
965         Reverted changeset:
966
967         "Move bytecode cache-related filesystem code out of CodeCache"
968         https://bugs.webkit.org/show_bug.cgi?id=194675
969         https://trac.webkit.org/changeset/241612
970
971 2019-02-16  Yusuke Suzuki  <ysuzuki@apple.com>
972
973         [JSC] JSWrapperObject should not be destructible
974         https://bugs.webkit.org/show_bug.cgi?id=194743
975
976         Reviewed by Saam Barati.
977
978         JSWrapperObject should be just a wrapper object for JSValue, thus, it should not be a JSDestructibleObject.
979         Currently it is destructible object because DateInstance uses it. This patch changes Base of DateInstance from
980         JSWrapperObject to JSDestructibleObject, and makes JSWrapperObject non-destructible.
981
982         * runtime/BigIntObject.cpp:
983         (JSC::BigIntObject::BigIntObject):
984         * runtime/BooleanConstructor.cpp:
985         (JSC::BooleanConstructor::finishCreation):
986         * runtime/BooleanObject.cpp:
987         (JSC::BooleanObject::BooleanObject):
988         * runtime/BooleanObject.h:
989         * runtime/DateInstance.cpp:
990         (JSC::DateInstance::DateInstance):
991         (JSC::DateInstance::finishCreation):
992         * runtime/DateInstance.h:
993         * runtime/DatePrototype.cpp:
994         (JSC::dateProtoFuncGetTime):
995         (JSC::dateProtoFuncSetTime):
996         (JSC::setNewValueFromTimeArgs):
997         (JSC::setNewValueFromDateArgs):
998         (JSC::dateProtoFuncSetYear):
999         * runtime/JSCPoison.h:
1000         * runtime/JSWrapperObject.h:
1001         (JSC::JSWrapperObject::JSWrapperObject):
1002         * runtime/NumberObject.cpp:
1003         (JSC::NumberObject::NumberObject):
1004         * runtime/NumberObject.h:
1005         * runtime/StringConstructor.cpp:
1006         (JSC::StringConstructor::finishCreation):
1007         * runtime/StringObject.cpp:
1008         (JSC::StringObject::StringObject):
1009         * runtime/StringObject.h:
1010         (JSC::StringObject::internalValue const):
1011         * runtime/SymbolObject.cpp:
1012         (JSC::SymbolObject::SymbolObject):
1013         * runtime/SymbolObject.h:
1014
1015 2019-02-16  Yusuke Suzuki  <ysuzuki@apple.com>
1016
1017         [JSC] Shrink UnlinkedFunctionExecutable
1018         https://bugs.webkit.org/show_bug.cgi?id=194733
1019
1020         Reviewed by Mark Lam.
1021
1022         UnlinkedFunctionExecutable has sourceURLDirective and sourceMappingURLDirective. These
1023         directives can be found in the comment of non typical function's source code (Program,
1024         Eval code, and Global function from function constructor etc.), and tricky thing is that
1025         SourceProvider's directives are updated by Parser. The reason why we have these fields in
1026         UnlinkedFunctionExecutable is that we need to update the SourceProvider's directives even
1027         if we skip parsing by using CodeCache. These fields are effective only if (1)
1028         UnlinkedFunctionExecutable is for non typical function things, and (2) it has sourceURLDirective
1029         or sourceMappingURLDirective. This is rare enough to purge them to a separated
1030         UnlinkedFunctionExecutable::RareData to make UnlinkedFunctionExecutable small.
1031         sizeof(UnlinkedFunctionExecutable) is very important since it is super frequently allocated
1032         cell. Furthermore, the current JSC allocates two MarkedBlocks for UnlinkedFunctionExecutable
1033         in JSGlobalObject initialization, but the usage of the second MarkedBlock is quite low (8%).
1034         If we can reduce the size of UnlinkedFunctionExecutable, we can make them one MarkedBlock.
1035         Since UnlinkedFunctionExecutable is allocated from IsoSubspace, we do not need to fit it to
1036         one of size class.
1037
1038         This patch adds RareData to UnlinkedFunctionExecutable and move some rare datas into RareData.
1039         And kill one MarkedBlock allocation in JSC initialization phase.
1040
1041         * bytecode/UnlinkedFunctionExecutable.cpp:
1042         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
1043         (JSC::UnlinkedFunctionExecutable::ensureRareDataSlow):
1044         * bytecode/UnlinkedFunctionExecutable.h:
1045         * debugger/DebuggerLocation.cpp:
1046         (JSC::DebuggerLocation::DebuggerLocation):
1047         * inspector/ScriptDebugServer.cpp:
1048         (Inspector::ScriptDebugServer::dispatchDidParseSource):
1049         * parser/Lexer.h:
1050         (JSC::Lexer::sourceURLDirective const):
1051         (JSC::Lexer::sourceMappingURLDirective const):
1052         (JSC::Lexer::sourceURL const): Deleted.
1053         (JSC::Lexer::sourceMappingURL const): Deleted.
1054         * parser/Parser.h:
1055         (JSC::Parser<LexerType>::parse):
1056         * parser/SourceProvider.h:
1057         (JSC::SourceProvider::sourceURLDirective const):
1058         (JSC::SourceProvider::sourceMappingURLDirective const):
1059         (JSC::SourceProvider::setSourceURLDirective):
1060         (JSC::SourceProvider::setSourceMappingURLDirective):
1061         (JSC::SourceProvider::sourceURL const): Deleted. We rename it from sourceURL to sourceURLDirective
1062         since it is the correct name.
1063         (JSC::SourceProvider::sourceMappingURL const): Deleted. We rename it from sourceMappingURL to
1064         sourceMappingURLDirective since it is the correct name.
1065         * runtime/CachedTypes.cpp:
1066         (JSC::CachedSourceProviderShape::encode):
1067         (JSC::CachedFunctionExecutableRareData::encode):
1068         (JSC::CachedFunctionExecutableRareData::decode const): CachedFunctionExecutable did not have
1069         sourceMappingURL to sourceMappingURLDirective. So this patch keeps the same logic.
1070         (JSC::CachedFunctionExecutable::rareData const):
1071         (JSC::CachedFunctionExecutable::encode):
1072         (JSC::CachedFunctionExecutable::decode const):
1073         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
1074         * runtime/CodeCache.cpp:
1075         (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
1076         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
1077         * runtime/CodeCache.h:
1078         (JSC::generateUnlinkedCodeBlockImpl):
1079         * runtime/FunctionExecutable.h:
1080         * runtime/SamplingProfiler.cpp:
1081         (JSC::SamplingProfiler::StackFrame::url):
1082
1083 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
1084
1085         [JSC] Remove unused global private variables
1086         https://bugs.webkit.org/show_bug.cgi?id=194741
1087
1088         Reviewed by Joseph Pecoraro.
1089
1090         There are some private functions and constants that are no longer referenced from builtin JS code.
1091         This patch cleans up them.
1092
1093         * builtins/BuiltinNames.h:
1094         * builtins/ObjectConstructor.js:
1095         (entries):
1096         * runtime/JSGlobalObject.cpp:
1097         (JSC::JSGlobalObject::init):
1098
1099 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
1100
1101         [JSC] Lazily create empty RegExp
1102         https://bugs.webkit.org/show_bug.cgi?id=194735
1103
1104         Reviewed by Keith Miller.
1105
1106         Some scripts do not have any RegExp. In that case, allocating MarkedBlock for RegExp is costly.
1107         Previously, there was always one RegExp, "empty RegExp". This patch lazily creates it and drop
1108         one MarkedBlock.
1109
1110         * runtime/JSGlobalObject.cpp:
1111         (JSC::JSGlobalObject::init):
1112         * runtime/RegExpCache.cpp:
1113         (JSC::RegExpCache::ensureEmptyRegExpSlow):
1114         (JSC::RegExpCache::initialize): Deleted.
1115         * runtime/RegExpCache.h:
1116         (JSC::RegExpCache::ensureEmptyRegExp):
1117         (JSC::RegExpCache::emptyRegExp const): Deleted.
1118         * runtime/RegExpCachedResult.cpp:
1119         (JSC::RegExpCachedResult::lastResult):
1120         * runtime/RegExpCachedResult.h:
1121         * runtime/VM.cpp:
1122         (JSC::VM::VM):
1123
1124 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
1125
1126         [JSC] Make builtin objects more lazily initialized under non-JIT mode
1127         https://bugs.webkit.org/show_bug.cgi?id=194727
1128
1129         Reviewed by Saam Barati.
1130
1131         Boolean, Symbol, and Number constructors and prototypes are initialized eagerly, but this is largely
1132         because concurrent compiler can touch NumberPrototype etc. when traversing object's prototypes. This
1133         means that eager initialization is not necessary under non-JIT mode. While we can investigate all the
1134         accesses to these prototypes from the concurrent compiler threads, this "lazily initialize under non-JIT"
1135         is safe and beneficial to non-JIT mode. This patch lazily initializes them under non-JIT mode, and
1136         drop some @Number references to avoid eager initialization. This removes some object allocations and 1
1137         MarkedBlock allocation just for Symbols.
1138
1139         * runtime/JSGlobalObject.cpp:
1140         (JSC::JSGlobalObject::init):
1141         (JSC::JSGlobalObject::visitChildren):
1142         * runtime/JSGlobalObject.h:
1143         (JSC::JSGlobalObject::numberToStringWatchpoint):
1144         (JSC::JSGlobalObject::booleanPrototype const):
1145         (JSC::JSGlobalObject::numberPrototype const):
1146         (JSC::JSGlobalObject::symbolPrototype const):
1147         (JSC::JSGlobalObject::booleanObjectStructure const):
1148         (JSC::JSGlobalObject::symbolObjectStructure const):
1149         (JSC::JSGlobalObject::numberObjectStructure const):
1150         (JSC::JSGlobalObject::stringObjectStructure const):
1151
1152 2019-02-15  Michael Saboff  <msaboff@apple.com>
1153
1154         RELEASE_ASSERT at com.apple.JavaScriptCore: JSC::jsSubstringOfResolved
1155         https://bugs.webkit.org/show_bug.cgi?id=194558
1156
1157         Reviewed by Saam Barati.
1158
1159         Added an in bounds check before the read of the next character for Unicode regular expressions
1160         for pattern generation that didn't already have such checks.
1161
1162         * yarr/YarrJIT.cpp:
1163         (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
1164         (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
1165         (JSC::Yarr::YarrGenerator::generateCharacterClassOnce):
1166         (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
1167
1168 2019-02-15  Dean Jackson  <dino@apple.com>
1169
1170         Allow emulation of user gestures from Web Inspector console
1171         https://bugs.webkit.org/show_bug.cgi?id=194725
1172         <rdar://problem/48126604>
1173
1174         Reviewed by Joseph Pecoraro and Devin Rousso.
1175
1176         * inspector/agents/InspectorRuntimeAgent.cpp: Add a new optional parameter, emulateUserGesture,
1177         to the evaluate function, and mark the function as override so that PageRuntimeAgent
1178         can change the behaviour.
1179         (Inspector::InspectorRuntimeAgent::evaluate):
1180         * inspector/agents/InspectorRuntimeAgent.h:
1181         * inspector/protocol/Runtime.json:
1182
1183 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
1184
1185         [JSC] Do not initialize Wasm related data if Wasm is not enabled
1186         https://bugs.webkit.org/show_bug.cgi?id=194728
1187
1188         Reviewed by Mark Lam.
1189
1190         Under non-JIT mode, these data structures are unnecessary. Should not allocate extra memory for that.
1191
1192         * runtime/InitializeThreading.cpp:
1193         (JSC::initializeThreading):
1194         * runtime/JSLock.cpp:
1195         (JSC::JSLock::didAcquireLock):
1196
1197 2019-02-15  Ross Kirsling  <ross.kirsling@sony.com>
1198
1199         [WTF] Add environment variable helpers
1200         https://bugs.webkit.org/show_bug.cgi?id=192405
1201
1202         Reviewed by Michael Catanzaro.
1203
1204         * inspector/remote/glib/RemoteInspectorGlib.cpp:
1205         (Inspector::RemoteInspector::RemoteInspector):
1206         (Inspector::RemoteInspector::start):
1207         * jsc.cpp:
1208         (startTimeoutThreadIfNeeded):
1209         * runtime/Options.cpp:
1210         (JSC::overrideOptionWithHeuristic):
1211         (JSC::Options::overrideAliasedOptionWithHeuristic):
1212         (JSC::Options::initialize):
1213         * runtime/VM.cpp:
1214         (JSC::enableAssembler):
1215         (JSC::VM::VM):
1216         * tools/CodeProfiling.cpp:
1217         (JSC::CodeProfiling::notifyAllocator):
1218         Utilize WTF::Environment where possible.
1219
1220 2019-02-15  Mark Lam  <mark.lam@apple.com>
1221
1222         SamplingProfiler::stackTracesAsJSON() should escape strings.
1223         https://bugs.webkit.org/show_bug.cgi?id=194649
1224         <rdar://problem/48072386>
1225
1226         Reviewed by Saam Barati.
1227
1228         Ditto for TypeSet::toJSONString() and TypeSet::toJSONString().
1229
1230         * runtime/SamplingProfiler.cpp:
1231         (JSC::SamplingProfiler::stackTracesAsJSON):
1232         * runtime/TypeSet.cpp:
1233         (JSC::TypeSet::toJSONString const):
1234         (JSC::StructureShape::toJSONString const):
1235
1236 2019-02-15  Robin Morisset  <rmorisset@apple.com>
1237
1238         CodeBlock::jettison should clear related watchpoints
1239         https://bugs.webkit.org/show_bug.cgi?id=194544
1240
1241         Reviewed by Mark Lam.
1242
1243         * bytecode/CodeBlock.cpp:
1244         (JSC::CodeBlock::jettison):
1245         * dfg/DFGCommonData.h:
1246         (JSC::DFG::CommonData::clearWatchpoints): Added.
1247         * dfg/CommonData.cpp:
1248         (JSC::DFG::CommonData::clearWatchpoints): Added.
1249
1250 2019-02-15  Tadeu Zagallo  <tzagallo@apple.com>
1251
1252         Move bytecode cache-related filesystem code out of CodeCache
1253         https://bugs.webkit.org/show_bug.cgi?id=194675
1254
1255         Reviewed by Saam Barati.
1256
1257         That code is only used for the bytecode-cache tests, so it should live in
1258         jsc.cpp rather than in the CodeCache.
1259
1260         * jsc.cpp:
1261         (CliSourceProvider::create):
1262         (CliSourceProvider::~CliSourceProvider):
1263         (CliSourceProvider::cachePath const):
1264         (CliSourceProvider::loadBytecode):
1265         (CliSourceProvider::CliSourceProvider):
1266         (jscSource):
1267         (GlobalObject::moduleLoaderFetch):
1268         (functionDollarEvalScript):
1269         (runWithOptions):
1270         * parser/SourceProvider.h:
1271         (JSC::SourceProvider::cacheBytecode const):
1272         * runtime/CodeCache.cpp:
1273         (JSC::writeCodeBlock):
1274         * runtime/CodeCache.h:
1275         (JSC::CodeCacheMap::fetchFromDiskImpl):
1276
1277 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
1278
1279         [JSC] DFG, FTL, and Wasm worklist creation should be fenced
1280         https://bugs.webkit.org/show_bug.cgi?id=194714
1281
1282         Reviewed by Mark Lam.
1283
1284         Let's consider about the following extreme case.
1285
1286         1. VM (A) is created.
1287         2. Another VM (B) is created on a different thread.
1288         3. (A) is being destroyed. It calls DFG::existingWorklistForIndexOrNull in a destructor.
1289         4. At the same time, (B) starts using DFG Worklist and it is instantiated in call_once.
1290         5. But (A) reads the pointer directly through DFG::existingWorklistForIndexOrNull.
1291         6. (A) sees the half-baked worklist, which may be in the middle of creation.
1292
1293         This patch puts store-store fence just before putting a pointer to a global variable.
1294         This fence is executed only three times at most, for DFG, FTL, and Wasm worklist initializations.
1295
1296         * dfg/DFGWorklist.cpp:
1297         (JSC::DFG::ensureGlobalDFGWorklist):
1298         (JSC::DFG::ensureGlobalFTLWorklist):
1299         * wasm/WasmWorklist.cpp:
1300         (JSC::Wasm::ensureWorklist):
1301
1302 2019-02-15  Commit Queue  <commit-queue@webkit.org>
1303
1304         Unreviewed, rolling out r241559 and r241566.
1305         https://bugs.webkit.org/show_bug.cgi?id=194710
1306
1307         Causes layout test crashes under GuardMalloc (Requested by
1308         ryanhaddad on #webkit).
1309
1310         Reverted changesets:
1311
1312         "[WTF] Add environment variable helpers"
1313         https://bugs.webkit.org/show_bug.cgi?id=192405
1314         https://trac.webkit.org/changeset/241559
1315
1316         "Unreviewed build fix for WinCairo Debug after r241559."
1317         https://trac.webkit.org/changeset/241566
1318
1319 2019-02-15  Yusuke Suzuki  <ysuzuki@apple.com>
1320
1321         [JSC] Do not even allocate JIT worklists in non-JIT mode
1322         https://bugs.webkit.org/show_bug.cgi?id=194693
1323
1324         Reviewed by Mark Lam.
1325
1326         Heap always allocates JIT worklists for Baseline, DFG, and FTL. While they do not have actual threads, Worklist itself already allocates some memory.
1327         And we do not perform any GC operations that are only meaningful in JIT environment.
1328
1329         1. We add VM::canUseJIT() check in Heap's ensureXXXWorklist things to prevent them from being allocated.
1330         2. We remove DFG marking constraint in non-JIT mode.
1331         3. We do not gather conservative roots from scratch buffers under the non-JIT mode (BTW, # of scratch buffers are always zero in non-JIT mode)
1332         4. We do not visit JITStubRoutineSet.
1333         5. Align JITWorklist function names to the other worklists.
1334
1335         * dfg/DFGOSRExitPreparation.cpp:
1336         (JSC::DFG::prepareCodeOriginForOSRExit):
1337         * dfg/DFGPlan.h:
1338         * dfg/DFGWorklist.cpp:
1339         (JSC::DFG::markCodeBlocks): Deleted.
1340         * dfg/DFGWorklist.h:
1341         * heap/Heap.cpp:
1342         (JSC::Heap::completeAllJITPlans):
1343         (JSC::Heap::iterateExecutingAndCompilingCodeBlocks):
1344         (JSC::Heap::gatherScratchBufferRoots):
1345         (JSC::Heap::removeDeadCompilerWorklistEntries):
1346         (JSC::Heap::stopThePeriphery):
1347         (JSC::Heap::suspendCompilerThreads):
1348         (JSC::Heap::resumeCompilerThreads):
1349         (JSC::Heap::addCoreConstraints):
1350         * jit/JITWorklist.cpp:
1351         (JSC::JITWorklist::existingGlobalWorklistOrNull):
1352         (JSC::JITWorklist::ensureGlobalWorklist):
1353         (JSC::JITWorklist::instance): Deleted.
1354         * jit/JITWorklist.h:
1355         * llint/LLIntSlowPaths.cpp:
1356         (JSC::LLInt::jitCompileAndSetHeuristics):
1357         * runtime/VM.cpp:
1358         (JSC::VM::~VM):
1359         (JSC::VM::gatherScratchBufferRoots):
1360         (JSC::VM::gatherConservativeRoots): Deleted.
1361         * runtime/VM.h:
1362
1363 2019-02-15  Saam barati  <sbarati@apple.com>
1364
1365         [WebAssembly] Write a new register allocator for Air O0 and make BBQ use it
1366         https://bugs.webkit.org/show_bug.cgi?id=194036
1367
1368         Reviewed by Yusuke Suzuki.
1369
1370         This patch adds a new Air-O0 backend. Air-O0 runs fewer passes and doesn't
1371         use linear scan for register allocation. Instead of linear scan, Air-O0 does
1372         mostly block-local register allocation, and it does this as it's emitting
1373         code directly. The register allocator uses liveness analysis to reduce
1374         the number of spills. Doing register allocation as we're emitting code
1375         allows us to skip editing the IR to insert spills, which saves a non trivial
1376         amount of compile time. For stack allocation, we give each Tmp its own slot.
1377         This is less than ideal. We probably want to do some trivial live range analysis
1378         in the future. The reason this isn't a deal breaker for Wasm is that this patch
1379         makes it so that we reuse Tmps as we're generating Air IR in the AirIRGenerator.
1380         Because Wasm is a stack machine, we trivially know when we kill a stack value (its last use).
1381         
1382         This patch is another 25% Wasm startup time speedup. It seems to be worth
1383         another 1% on JetStream2.
1384
1385         * JavaScriptCore.xcodeproj/project.pbxproj:
1386         * Sources.txt:
1387         * b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp: Added.
1388         (JSC::B3::Air::GenerateAndAllocateRegisters::GenerateAndAllocateRegisters):
1389         (JSC::B3::Air::GenerateAndAllocateRegisters::buildLiveRanges):
1390         (JSC::B3::Air::GenerateAndAllocateRegisters::insertBlocksForFlushAfterTerminalPatchpoints):
1391         (JSC::B3::Air::callFrameAddr):
1392         (JSC::B3::Air::GenerateAndAllocateRegisters::flush):
1393         (JSC::B3::Air::GenerateAndAllocateRegisters::spill):
1394         (JSC::B3::Air::GenerateAndAllocateRegisters::alloc):
1395         (JSC::B3::Air::GenerateAndAllocateRegisters::freeDeadTmpsIfNeeded):
1396         (JSC::B3::Air::GenerateAndAllocateRegisters::assignTmp):
1397         (JSC::B3::Air::GenerateAndAllocateRegisters::isDisallowedRegister):
1398         (JSC::B3::Air::GenerateAndAllocateRegisters::prepareForGeneration):
1399         (JSC::B3::Air::GenerateAndAllocateRegisters::generate):
1400         * b3/air/AirAllocateRegistersAndStackAndGenerateCode.h: Added.
1401         * b3/air/AirCode.cpp:
1402         * b3/air/AirCode.h:
1403         * b3/air/AirGenerate.cpp:
1404         (JSC::B3::Air::prepareForGeneration):
1405         (JSC::B3::Air::generateWithAlreadyAllocatedRegisters):
1406         (JSC::B3::Air::generate):
1407         * b3/air/AirHandleCalleeSaves.cpp:
1408         (JSC::B3::Air::handleCalleeSaves):
1409         * b3/air/AirHandleCalleeSaves.h:
1410         * b3/air/AirTmpMap.h:
1411         * runtime/Options.h:
1412         * wasm/WasmAirIRGenerator.cpp:
1413         (JSC::Wasm::AirIRGenerator::didKill):
1414         (JSC::Wasm::AirIRGenerator::newTmp):
1415         (JSC::Wasm::AirIRGenerator::AirIRGenerator):
1416         (JSC::Wasm::parseAndCompileAir):
1417         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF64>):
1418         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF32>):
1419         * wasm/WasmAirIRGenerator.h:
1420         * wasm/WasmB3IRGenerator.cpp:
1421         (JSC::Wasm::B3IRGenerator::didKill):
1422         * wasm/WasmBBQPlan.cpp:
1423         (JSC::Wasm::BBQPlan::compileFunctions):
1424         * wasm/WasmFunctionParser.h:
1425         (JSC::Wasm::FunctionParser<Context>::parseBody):
1426         (JSC::Wasm::FunctionParser<Context>::parseExpression):
1427         * wasm/WasmValidate.cpp:
1428         (JSC::Wasm::Validate::didKill):
1429
1430 2019-02-14  Saam barati  <sbarati@apple.com>
1431
1432         lowerStackArgs should lower Lea32/64 on ARM64 to Add
1433         https://bugs.webkit.org/show_bug.cgi?id=194656
1434
1435         Reviewed by Yusuke Suzuki.
1436
1437         On arm64, Lea is just implemented as an add. However, Air treats it as an
1438         address with a given width. Because of this width, we were incorrectly
1439         computing whether or not this immediate could fit into the instruction itself
1440         or it needed to be explicitly put into a register. This patch makes
1441         AirLowerStackArgs lower Lea to Add on arm64.
1442
1443         * b3/air/AirLowerStackArgs.cpp:
1444         (JSC::B3::Air::lowerStackArgs):
1445         * b3/air/AirOpcode.opcodes:
1446         * b3/air/testair.cpp:
1447
1448 2019-02-14  Saam Barati  <sbarati@apple.com>
1449
1450         Cache the results of BytecodeGenerator::getVariablesUnderTDZ
1451         https://bugs.webkit.org/show_bug.cgi?id=194583
1452         <rdar://problem/48028140>
1453
1454         Reviewed by Yusuke Suzuki.
1455
1456         This patch makes it so that getVariablesUnderTDZ caches a result of
1457         CompactVariableMap::Handle. getVariablesUnderTDZ is costly when
1458         it's called in an environment where there are a lot of variables.
1459         This patch makes it so we cache its results. This is profitable when
1460         getVariablesUnderTDZ is called repeatedly with the same environment
1461         state. This is common since we call this every time we encounter a
1462         function definition/expression node.
1463
1464         * builtins/BuiltinExecutables.cpp:
1465         (JSC::BuiltinExecutables::createExecutable):
1466         * bytecode/UnlinkedFunctionExecutable.cpp:
1467         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
1468         * bytecode/UnlinkedFunctionExecutable.h:
1469         * bytecompiler/BytecodeGenerator.cpp:
1470         (JSC::BytecodeGenerator::popLexicalScopeInternal):
1471         (JSC::BytecodeGenerator::liftTDZCheckIfPossible):
1472         (JSC::BytecodeGenerator::pushTDZVariables):
1473         (JSC::BytecodeGenerator::getVariablesUnderTDZ):
1474         (JSC::BytecodeGenerator::restoreTDZStack):
1475         * bytecompiler/BytecodeGenerator.h:
1476         (JSC::BytecodeGenerator::makeFunction):
1477         * parser/VariableEnvironment.cpp:
1478         (JSC::CompactVariableMap::Handle::Handle):
1479         (JSC::CompactVariableMap::Handle::operator=):
1480         * parser/VariableEnvironment.h:
1481         (JSC::CompactVariableMap::Handle::operator bool const):
1482         * runtime/CodeCache.cpp:
1483         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
1484
1485 2019-02-14  Yusuke Suzuki  <ysuzuki@apple.com>
1486
1487         [JSC] Non-JIT entrypoints should share NativeJITCode per entrypoint type
1488         https://bugs.webkit.org/show_bug.cgi?id=194659
1489
1490         Reviewed by Mark Lam.
1491
1492         Non-JIT entrypoints create NativeJITCode every time it is called. But it is meaningless since these entry point code are identical.
1493         We should create one per entrypoint type (for function, we should have CodeForCall and CodeForConstruct) and continue to use them.
1494         And we use NativeJITCode instead of DirectJITCode if it does not have difference between usual entrypoint and arity check entrypoint.
1495
1496         * dfg/DFGJITCode.h:
1497         * dfg/DFGJITFinalizer.cpp:
1498         (JSC::DFG::JITFinalizer::finalize):
1499         (JSC::DFG::JITFinalizer::finalizeFunction):
1500         * jit/JITCode.cpp:
1501         (JSC::DirectJITCode::initializeCodeRefForDFG):
1502         (JSC::DirectJITCode::initializeCodeRef): Deleted.
1503         (JSC::NativeJITCode::initializeCodeRef): Deleted.
1504         * jit/JITCode.h:
1505         * llint/LLIntEntrypoint.cpp:
1506         (JSC::LLInt::setFunctionEntrypoint):
1507         (JSC::LLInt::setEvalEntrypoint):
1508         (JSC::LLInt::setProgramEntrypoint):
1509         (JSC::LLInt::setModuleProgramEntrypoint): Retagged is removed since the tag is the same.
1510
1511 2019-02-14  Ross Kirsling  <ross.kirsling@sony.com>
1512
1513         [WTF] Add environment variable helpers
1514         https://bugs.webkit.org/show_bug.cgi?id=192405
1515
1516         Reviewed by Michael Catanzaro.
1517
1518         * inspector/remote/glib/RemoteInspectorGlib.cpp:
1519         (Inspector::RemoteInspector::RemoteInspector):
1520         (Inspector::RemoteInspector::start):
1521         * jsc.cpp:
1522         (startTimeoutThreadIfNeeded):
1523         * runtime/Options.cpp:
1524         (JSC::overrideOptionWithHeuristic):
1525         (JSC::Options::overrideAliasedOptionWithHeuristic):
1526         (JSC::Options::initialize):
1527         * runtime/VM.cpp:
1528         (JSC::enableAssembler):
1529         (JSC::VM::VM):
1530         * tools/CodeProfiling.cpp:
1531         (JSC::CodeProfiling::notifyAllocator):
1532         Utilize WTF::Environment where possible.
1533
1534 2019-02-14  Yusuke Suzuki  <ysuzuki@apple.com>
1535
1536         [JSC] Should have default NativeJITCode
1537         https://bugs.webkit.org/show_bug.cgi?id=194634
1538
1539         Reviewed by Mark Lam.
1540
1541         In JSC_useJIT=false mode, we always create identical NativeJITCode for call and construct when we create NativeExecutable.
1542         This is meaningless since we do not modify NativeJITCode after the creation. This patch adds singleton used as a default one.
1543         Since NativeJITCode (& JITCode) is ThreadSafeRefCounted, we can just share it in a whole process level. This removes 446 NativeJITCode
1544         allocations, which takes 14KB.
1545
1546         * runtime/VM.cpp:
1547         (JSC::jitCodeForCallTrampoline):
1548         (JSC::jitCodeForConstructTrampoline):
1549         (JSC::VM::getHostFunction):
1550
1551 2019-02-14  Tadeu Zagallo  <tzagallo@apple.com>
1552
1553         generateUnlinkedCodeBlockForFunctions shouldn't need to create a FunctionExecutable just to get its source code
1554         https://bugs.webkit.org/show_bug.cgi?id=194576
1555
1556         Reviewed by Saam Barati.
1557
1558         Extract a new function, `linkedSourceCode` from UnlinkedFunctionExecutable::link
1559         and use it in `generateUnlinkedCodeBlockForFunctions` instead.
1560
1561         * bytecode/UnlinkedFunctionExecutable.cpp:
1562         (JSC::UnlinkedFunctionExecutable::linkedSourceCode const):
1563         (JSC::UnlinkedFunctionExecutable::link):
1564         * bytecode/UnlinkedFunctionExecutable.h:
1565         * runtime/CodeCache.cpp:
1566         (JSC::generateUnlinkedCodeBlockForFunctions):
1567
1568 2019-02-14  Tadeu Zagallo  <tzagallo@apple.com>
1569
1570         CachedBitVector's size must be converted from bits to bytes
1571         https://bugs.webkit.org/show_bug.cgi?id=194441
1572
1573         Reviewed by Saam Barati.
1574
1575         CachedBitVector used its size in bits for memcpy. That didn't cause any
1576         issues when encoding, since the size in bits was also used in the allocation,
1577         but would overflow the actual BitVector buffer when decoding.
1578
1579         * runtime/CachedTypes.cpp:
1580         (JSC::CachedBitVector::encode):
1581         (JSC::CachedBitVector::decode const):
1582
1583 2019-02-13  Brian Burg  <bburg@apple.com>
1584
1585         Web Inspector: don't include accessibility role in DOM.Node object payloads
1586         https://bugs.webkit.org/show_bug.cgi?id=194623
1587         <rdar://problem/36384037>
1588
1589         Reviewed by Devin Rousso.
1590
1591         Remove property of DOM.Node that is no longer being sent.
1592
1593         * inspector/protocol/DOM.json:
1594
1595 2019-02-13  Keith Miller  <keith_miller@apple.com> and Yusuke Suzuki  <ysuzuki@apple.com>
1596
1597         We should only make rope strings when concatenating strings long enough.
1598         https://bugs.webkit.org/show_bug.cgi?id=194465
1599
1600         Reviewed by Mark Lam.
1601
1602         This patch stops us from allocating a rope string if the resulting
1603         rope would be smaller than the size of the JSRopeString object we
1604         would need to allocate.
1605
1606         This patch also adds paths so that we don't unnecessarily allocate
1607         JSString cells for primitives we are going to concatenate with a
1608         string anyway.
1609
1610         The important change from the previous one is that we do not apply
1611         the above rule to JSRopeStrings generated by JSStrings. If we convert
1612         it to JSString, comparison of memory consumption becomes the following,
1613         because JSRopeString does not have StringImpl until it is resolved.
1614
1615             sizeof(JSRopeString) v.s. sizeof(JSString) + sizeof(StringImpl) + content
1616
1617         Since sizeof(JSString) + sizeof(StringImpl) is larger than sizeof(JSRopeString),
1618         resolving eagerly increases memory footprint. The point is that we need to
1619         account newly created JSString and JSRopeString from the operands. This is the
1620         reason why this patch adds different thresholds for each jsString functions.
1621
1622         This patch also avoids concatenation for ropes conservatively. Many ropes are
1623         temporary cells. So we do not resolve eagerly if one of operands is already a
1624         rope.
1625
1626         In CLI execution, this change is performance neutral in JetStream2 (run 6 times, 1 for warming up and average in latter 5.).
1627
1628             Before: 159.3778
1629             After:  160.72340000000003
1630
1631         * dfg/DFGOperations.cpp:
1632         * runtime/CommonSlowPaths.cpp:
1633         (JSC::SLOW_PATH_DECL):
1634         * runtime/JSString.h:
1635         (JSC::JSString::isRope const):
1636         * runtime/Operations.cpp:
1637         (JSC::jsAddSlowCase):
1638         * runtime/Operations.h:
1639         (JSC::jsString):
1640         (JSC::jsAddNonNumber):
1641         (JSC::jsAdd):
1642
1643 2019-02-13  Saam Barati  <sbarati@apple.com>
1644
1645         AirIRGenerator::addSwitch switch patchpoint needs to model clobbering the scratch register
1646         https://bugs.webkit.org/show_bug.cgi?id=194610
1647
1648         Reviewed by Michael Saboff.
1649
1650         BinarySwitch might use the scratch register. We must model the
1651         effects of that properly. This is already caught by our br-table
1652         tests on arm64.
1653
1654         * wasm/WasmAirIRGenerator.cpp:
1655         (JSC::Wasm::AirIRGenerator::addSwitch):
1656
1657 2019-02-13  Mark Lam  <mark.lam@apple.com>
1658
1659         Create a randomized free list for new StructureIDs on StructureIDTable resize.
1660         https://bugs.webkit.org/show_bug.cgi?id=194566
1661         <rdar://problem/47975502>
1662
1663         Reviewed by Michael Saboff.
1664
1665         Also isolate 32-bit implementation of StructureIDTable out more so the 64-bit
1666         implementation is a little easier to read.
1667
1668         This patch appears to be perf neutral on JetStream2 (as run from the command line).
1669
1670         * runtime/StructureIDTable.cpp:
1671         (JSC::StructureIDTable::StructureIDTable):
1672         (JSC::StructureIDTable::makeFreeListFromRange):
1673         (JSC::StructureIDTable::resize):
1674         (JSC::StructureIDTable::allocateID):
1675         (JSC::StructureIDTable::deallocateID):
1676         * runtime/StructureIDTable.h:
1677         (JSC::StructureIDTable::get):
1678         (JSC::StructureIDTable::deallocateID):
1679         (JSC::StructureIDTable::allocateID):
1680         (JSC::StructureIDTable::flushOldTables):
1681
1682 2019-02-13  Tadeu Zagallo  <tzagallo@apple.com>
1683
1684         VariableLengthObject::allocate<T> should initialize objects
1685         https://bugs.webkit.org/show_bug.cgi?id=194534
1686
1687         Reviewed by Michael Saboff.
1688
1689         `buffer()` should not be called for empty VariableLengthObjects, but
1690         these cases were not being caught due to the objects not being properly
1691         initialized. Fix it so that allocate calls the constructor and fix the
1692         assertion failues.
1693
1694         * runtime/CachedTypes.cpp:
1695         (JSC::CachedObject::operator new):
1696         (JSC::VariableLengthObject::allocate):
1697         (JSC::CachedVector::encode):
1698         (JSC::CachedVector::decode const):
1699         (JSC::CachedUniquedStringImpl::decode const):
1700         (JSC::CachedBitVector::encode):
1701         (JSC::CachedBitVector::decode const):
1702         (JSC::CachedArray::encode):
1703         (JSC::CachedArray::decode const):
1704         (JSC::CachedImmutableButterfly::CachedImmutableButterfly):
1705         (JSC::CachedBigInt::decode const):
1706
1707 2019-02-13  Tadeu Zagallo  <tzagallo@apple.com>
1708
1709         CodeBlocks read from disk should not be re-written
1710         https://bugs.webkit.org/show_bug.cgi?id=194535
1711
1712         Reviewed by Michael Saboff.
1713
1714         Keep track of which CodeBlocks have been read from disk or have already
1715         been serialized in CodeCache.
1716
1717         * runtime/CodeCache.cpp:
1718         (JSC::CodeCache::write):
1719         * runtime/CodeCache.h:
1720         (JSC::SourceCodeValue::SourceCodeValue):
1721         (JSC::CodeCacheMap::fetchFromDiskImpl):
1722
1723 2019-02-13  Tadeu Zagallo  <tzagallo@apple.com>
1724
1725         SourceCode should be copied when generating bytecode for functions
1726         https://bugs.webkit.org/show_bug.cgi?id=194536
1727
1728         Reviewed by Saam Barati.
1729
1730         The FunctionExecutable might be collected while generating the bytecode
1731         for nested functions, in which case the SourceCode reference would no
1732         longer be valid.
1733
1734         * runtime/CodeCache.cpp:
1735         (JSC::generateUnlinkedCodeBlockForFunctions):
1736
1737 2019-02-12  Saam barati  <sbarati@apple.com>
1738
1739         JSScript needs to retain its cache path NSURL*
1740         https://bugs.webkit.org/show_bug.cgi?id=194577
1741
1742         Reviewed by Tim Horton.
1743
1744         * API/JSScript.mm:
1745         (+[JSScript scriptFromASCIIFile:inVirtualMachine:withCodeSigning:andBytecodeCache:]):
1746         (-[JSScript dealloc]):
1747
1748 2019-02-12  Robin Morisset  <rmorisset@apple.com>
1749
1750         Make B3Value::returnsBool() more precise
1751         https://bugs.webkit.org/show_bug.cgi?id=194457
1752
1753         Reviewed by Saam Barati.
1754
1755         It is currently used repeatedly in B3ReduceStrength, as well as once in B3LowerToAir.
1756         It has a needlessly complex rule for BitAnd, and has no rule for other easy cases such as BitOr or Select.
1757         No new tests added as this should be indirectly tested by the already existing tests.
1758
1759         * b3/B3Value.cpp:
1760         (JSC::B3::Value::returnsBool const):
1761
1762 2019-02-12  Michael Catanzaro  <mcatanzaro@igalia.com>
1763
1764         Unreviewed, fix -Wimplicit-fallthrough warning after r241140
1765         https://bugs.webkit.org/show_bug.cgi?id=194399
1766         <rdar://problem/47889777>
1767
1768         * dfg/DFGDoesGC.cpp:
1769         (JSC::DFG::doesGC):
1770
1771 2019-02-12  Michael Catanzaro  <mcatanzaro@igalia.com>
1772
1773         [WPE][GTK] Unsafe g_unsetenv() use in WebProcessPool::platformInitialize
1774         https://bugs.webkit.org/show_bug.cgi?id=194370
1775
1776         Reviewed by Darin Adler.
1777
1778         Change a couple WTFLogAlways to use g_warning, for good measure. Of course this isn't
1779         necessary, but it will make errors more visible.
1780
1781         * inspector/remote/glib/RemoteInspectorGlib.cpp:
1782         (Inspector::RemoteInspector::start):
1783         (Inspector::dbusConnectionCallAsyncReadyCallback):
1784         * inspector/remote/glib/RemoteInspectorServer.cpp:
1785         (Inspector::RemoteInspectorServer::start):
1786
1787 2019-02-12  Andy Estes  <aestes@apple.com>
1788
1789         [iOSMac] Enable Parental Controls Content Filtering
1790         https://bugs.webkit.org/show_bug.cgi?id=194521
1791         <rdar://39732376>
1792
1793         Reviewed by Tim Horton.
1794
1795         * Configurations/FeatureDefines.xcconfig:
1796
1797 2019-02-11  Mark Lam  <mark.lam@apple.com>
1798
1799         Randomize insertion of deallocated StructureIDs into the StructureIDTable's free list.
1800         https://bugs.webkit.org/show_bug.cgi?id=194512
1801         <rdar://problem/47975465>
1802
1803         Reviewed by Yusuke Suzuki.
1804
1805         * runtime/StructureIDTable.cpp:
1806         (JSC::StructureIDTable::StructureIDTable):
1807         (JSC::StructureIDTable::allocateID):
1808         (JSC::StructureIDTable::deallocateID):
1809         * runtime/StructureIDTable.h:
1810
1811 2019-02-10  Mark Lam  <mark.lam@apple.com>
1812
1813         Remove the RELEASE_ASSERT check for duplicate cases in the BinarySwitch constructor.
1814         https://bugs.webkit.org/show_bug.cgi?id=194493
1815         <rdar://problem/36380852>
1816
1817         Reviewed by Yusuke Suzuki.
1818
1819         Having duplicate cases in the BinarySwitch is not a correctness issue.  It is
1820         however not good for performance and memory usage.  As such, a debug ASSERT will
1821         do.  We'll also do an audit of the clients of BinarySwitch to see if it's
1822         possible to be instantiated with duplicate cases in
1823         https://bugs.webkit.org/show_bug.cgi?id=194492 later.
1824
1825         Also added some value dumps to the RELEASE_ASSERT to help debug the issue when we
1826         see duplicate cases.
1827
1828         * jit/BinarySwitch.cpp:
1829         (JSC::BinarySwitch::BinarySwitch):
1830
1831 2019-02-10  Darin Adler  <darin@apple.com>
1832
1833         Switch uses of StringBuilder with String::format for hex numbers to use HexNumber.h instead
1834         https://bugs.webkit.org/show_bug.cgi?id=194485
1835
1836         Reviewed by Daniel Bates.
1837
1838         * heap/HeapSnapshotBuilder.cpp:
1839         (JSC::HeapSnapshotBuilder::json): Use appendUnsignedAsHex along with
1840         reinterpret_cast<uintptr_t> to replace uses of String::format with "%p".
1841
1842         * runtime/JSGlobalObjectFunctions.cpp:
1843         (JSC::encode): Removed some unneeded casts in StringBuilder code,
1844         including one in a call to appendByteAsHex.
1845         (JSC::globalFuncEscape): Ditto.
1846
1847 2019-02-10  Commit Queue  <commit-queue@webkit.org>
1848
1849         Unreviewed, rolling out r241230.
1850         https://bugs.webkit.org/show_bug.cgi?id=194488
1851
1852         "It regressed JetStream2 by ~6%" (Requested by saamyjoon on
1853         #webkit).
1854
1855         Reverted changeset:
1856
1857         "We should only make rope strings when concatenating strings
1858         long enough."
1859         https://bugs.webkit.org/show_bug.cgi?id=194465
1860         https://trac.webkit.org/changeset/241230
1861
1862 2019-02-10  Saam barati  <sbarati@apple.com>
1863
1864         BBQ-Air: Emit better code for switch
1865         https://bugs.webkit.org/show_bug.cgi?id=194053
1866
1867         Reviewed by Yusuke Suzuki.
1868
1869         Instead of emitting a linear set of jumps for Switch, this patch
1870         makes the BBQ-Air backend emit a binary switch.
1871
1872         * wasm/WasmAirIRGenerator.cpp:
1873         (JSC::Wasm::AirIRGenerator::addSwitch):
1874
1875 2019-02-09  Yusuke Suzuki  <ysuzuki@apple.com>
1876
1877         Unreviewed, Lexer should use isLatin1 implementation in WTF
1878         https://bugs.webkit.org/show_bug.cgi?id=194466
1879
1880         Follow-up after r241233 pointed by Darin.
1881
1882         * parser/Lexer.cpp:
1883         (JSC::isLatin1): Deleted.
1884
1885 2019-02-09  Darin Adler  <darin@apple.com>
1886
1887         Eliminate unnecessary String temporaries by using StringConcatenateNumbers
1888         https://bugs.webkit.org/show_bug.cgi?id=194021
1889
1890         Reviewed by Geoffrey Garen.
1891
1892         * inspector/agents/InspectorConsoleAgent.cpp:
1893         (Inspector::InspectorConsoleAgent::count): Remove String::number and let
1894         makeString do the conversion without allocating/destroying a String.
1895         * inspector/agents/InspectorDebuggerAgent.cpp:
1896         (Inspector::objectGroupForBreakpointAction): Ditto.
1897         (Inspector::InspectorDebuggerAgent::setBreakpointByUrl): Ditto.
1898         (Inspector::InspectorDebuggerAgent::setBreakpoint): Ditto.
1899         * runtime/JSGenericTypedArrayViewInlines.h:
1900         (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty): Ditto.
1901         * runtime/NumberPrototype.cpp:
1902         (JSC::numberProtoFuncToFixed): Use String::numberToStringFixedWidth instead
1903         of calling numberToFixedWidthString to do the same thing.
1904         (JSC::numberProtoFuncToPrecision): Use String::number instead of calling
1905         numberToFixedPrecisionString to do the same thing.
1906         * runtime/SamplingProfiler.cpp:
1907         (JSC::SamplingProfiler::reportTopFunctions): Ditto.
1908
1909 2019-02-09  Yusuke Suzuki  <ysuzuki@apple.com>
1910
1911         Unreviewed, rolling in r241237 again
1912         https://bugs.webkit.org/show_bug.cgi?id=194469
1913
1914         * runtime/JSString.h:
1915         (JSC::jsSubstring):
1916
1917 2019-02-09  Commit Queue  <commit-queue@webkit.org>
1918
1919         Unreviewed, rolling out r241237.
1920         https://bugs.webkit.org/show_bug.cgi?id=194474
1921
1922         Shows significant memory increase in WSL (Requested by
1923         yusukesuzuki on #webkit).
1924
1925         Reverted changeset:
1926
1927         "[WTF] Use BufferInternal StringImpl if substring StringImpl
1928         takes more memory"
1929         https://bugs.webkit.org/show_bug.cgi?id=194469
1930         https://trac.webkit.org/changeset/241237
1931
1932 2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>
1933
1934         [WTF] Use BufferInternal StringImpl if substring StringImpl takes more memory
1935         https://bugs.webkit.org/show_bug.cgi?id=194469
1936
1937         Reviewed by Geoffrey Garen.
1938
1939         * runtime/JSString.h:
1940         (JSC::jsSubstring):
1941
1942 2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>
1943
1944         [JSC] CachedTypes should use jsString instead of JSString::create
1945         https://bugs.webkit.org/show_bug.cgi?id=194471
1946
1947         Reviewed by Mark Lam.
1948
1949         Use jsString() here because JSString::create is a bit low-level API and it requires some invariant like "length is not zero".
1950
1951         * runtime/CachedTypes.cpp:
1952         (JSC::CachedJSValue::decode const):
1953
1954 2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>
1955
1956         [JSC] Increase StructureIDTable initial capacity
1957         https://bugs.webkit.org/show_bug.cgi?id=194468
1958
1959         Reviewed by Mark Lam.
1960
1961         Currently, # of structures just after initializing JSGlobalObject (precisely, initializing GlobalObject in
1962         JSC shell), 281, already exceeds the current initial value 256. We should increase the capacity since
1963         unnecessary resizing requires more operations, keeps old StructureID array until GC happens, and makes
1964         more memory dirty. We also remove some structures that are no longer used.
1965
1966         * runtime/JSGlobalObject.h:
1967         (JSC::JSGlobalObject::callbackObjectStructure const):
1968         (JSC::JSGlobalObject::propertyNameIteratorStructure const): Deleted.
1969         * runtime/StructureIDTable.h:
1970         * runtime/VM.h:
1971
1972 2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>
1973
1974         [JSC] String.fromCharCode's slow path always generates 16bit string
1975         https://bugs.webkit.org/show_bug.cgi?id=194466
1976
1977         Reviewed by Keith Miller.
1978
1979         String.fromCharCode(a1) has a fast path and the most frequently used. And String.fromCharCode(a1, a2, ...)
1980         goes to the slow path. However, in the slow path, we always create 16bit string. 16bit string takes 2x memory,
1981         and even worse, taints ropes 16bit if 16bit string is included in the given rope. We find that acorn-wtb
1982         creates very large strings multiple times with String.fromCharCode, and String.fromCharCode always produces
1983         16bit string. However, only few strings are actually 16bit strings. This patch attempts to make 8bit string
1984         as much as possible.
1985
1986         It improves non JIT acorn-wtb's peak and current memory footprint by 6% and 3% respectively.
1987
1988         * runtime/StringConstructor.cpp:
1989         (JSC::stringFromCharCode):
1990
1991 2019-02-08  Keith Miller  <keith_miller@apple.com>
1992
1993         We should only make rope strings when concatenating strings long enough.
1994         https://bugs.webkit.org/show_bug.cgi?id=194465
1995
1996         Reviewed by Saam Barati.
1997
1998         This patch stops us from allocating a rope string if the resulting
1999         rope would be smaller than the size of the JSRopeString object we
2000         would need to allocate.
2001
2002         This patch also adds paths so that we don't unnecessarily allocate
2003         JSString cells for primitives we are going to concatenate with a
2004         string anyway.
2005
2006         * dfg/DFGOperations.cpp:
2007         * runtime/CommonSlowPaths.cpp:
2008         (JSC::SLOW_PATH_DECL):
2009         * runtime/JSString.h:
2010         * runtime/Operations.cpp:
2011         (JSC::jsAddSlowCase):
2012         * runtime/Operations.h:
2013         (JSC::jsString):
2014         (JSC::jsAdd):
2015
2016 2019-02-08  Saam barati  <sbarati@apple.com>
2017
2018         Nodes that rely on being dominated by CheckInBounds should have a child edge to it
2019         https://bugs.webkit.org/show_bug.cgi?id=194334
2020         <rdar://problem/47844327>
2021
2022         Reviewed by Mark Lam.
2023
2024         * dfg/DFGAbstractInterpreterInlines.h:
2025         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
2026         * dfg/DFGArgumentsEliminationPhase.cpp:
2027         * dfg/DFGByteCodeParser.cpp:
2028         (JSC::DFG::ByteCodeParser::parseBlock):
2029         * dfg/DFGClobberize.h:
2030         (JSC::DFG::clobberize):
2031         * dfg/DFGConstantFoldingPhase.cpp:
2032         (JSC::DFG::ConstantFoldingPhase::foldConstants):
2033         * dfg/DFGFixupPhase.cpp:
2034         (JSC::DFG::FixupPhase::fixupNode):
2035         (JSC::DFG::FixupPhase::convertToHasIndexedProperty):
2036         * dfg/DFGIntegerCheckCombiningPhase.cpp:
2037         (JSC::DFG::IntegerCheckCombiningPhase::handleBlock):
2038         * dfg/DFGIntegerRangeOptimizationPhase.cpp:
2039         * dfg/DFGNodeType.h:
2040         * dfg/DFGSSALoweringPhase.cpp:
2041         (JSC::DFG::SSALoweringPhase::lowerBoundsCheck):
2042         * dfg/DFGSpeculativeJIT.cpp:
2043         (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty):
2044         * ftl/FTLLowerDFGToB3.cpp:
2045         (JSC::FTL::DFG::LowerDFGToB3::compileCheckInBounds):
2046         (JSC::FTL::DFG::LowerDFGToB3::compileHasIndexedProperty):
2047
2048 2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>
2049
2050         [JSC] Shrink sizeof(CodeBlock) more
2051         https://bugs.webkit.org/show_bug.cgi?id=194419
2052
2053         Reviewed by Mark Lam.
2054
2055         This patch further shrinks the size of CodeBlock, from 352 to 296 (304).
2056
2057         1. CodeBlock copies so many data from ScriptExecutable even if ScriptExecutable
2058         has the same information. These data is not touched in CodeBlock::~CodeBlock,
2059         so we can just use the data in ScriptExecutable instead of holding it in CodeBlock.
2060
2061         2. We remove m_instructions pointer since the ownership is managed by UnlinkedCodeBlock.
2062         And we do not touch it in CodeBlock::~CodeBlock.
2063
2064         3. We move m_calleeSaveRegisters from CodeBlock to CodeBlock::JITData. For baseline and LLInt
2065         cases, this patch offers RegisterAtOffsetList::llintBaselineCalleeSaveRegisters() which returns
2066         singleton to `const RegisterAtOffsetList*` usable for LLInt and Baseline JIT CodeBlocks.
2067
2068         4. Move m_catchProfiles to RareData and materialize only when op_catch's slow path is called.
2069
2070         5. Drop ownerScriptExecutable. ownerExecutable() returns ScriptExecutable*.
2071
2072         * bytecode/CodeBlock.cpp:
2073         (JSC::CodeBlock::hash const):
2074         (JSC::CodeBlock::sourceCodeForTools const):
2075         (JSC::CodeBlock::dumpAssumingJITType const):
2076         (JSC::CodeBlock::dumpSource):
2077         (JSC::CodeBlock::CodeBlock):
2078         (JSC::CodeBlock::finishCreation):
2079         (JSC::CodeBlock::propagateTransitions):
2080         (JSC::CodeBlock::finalizeLLIntInlineCaches):
2081         (JSC::CodeBlock::setCalleeSaveRegisters):
2082         (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeOffset):
2083         (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeOffsetSlow):
2084         (JSC::CodeBlock::lineNumberForBytecodeOffset):
2085         (JSC::CodeBlock::expressionRangeForBytecodeOffset const):
2086         (JSC::CodeBlock::hasOpDebugForLineAndColumn):
2087         (JSC::CodeBlock::newReplacement):
2088         (JSC::CodeBlock::replacement):
2089         (JSC::CodeBlock::computeCapabilityLevel):
2090         (JSC::CodeBlock::jettison):
2091         (JSC::CodeBlock::calleeSaveRegisters const):
2092         (JSC::CodeBlock::calleeSaveSpaceAsVirtualRegisters):
2093         (JSC::CodeBlock::updateOSRExitCounterAndCheckIfNeedToReoptimize):
2094         (JSC::CodeBlock::getArrayProfile):
2095         (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
2096         (JSC::CodeBlock::notifyLexicalBindingUpdate):
2097         (JSC::CodeBlock::tryGetValueProfileForBytecodeOffset):
2098         (JSC::CodeBlock::validate):
2099         (JSC::CodeBlock::outOfLineJumpTarget):
2100         (JSC::CodeBlock::arithProfileForBytecodeOffset):
2101         (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler):
2102         * bytecode/CodeBlock.h:
2103         (JSC::CodeBlock::specializationKind const):
2104         (JSC::CodeBlock::isStrictMode const):
2105         (JSC::CodeBlock::isConstructor const):
2106         (JSC::CodeBlock::codeType const):
2107         (JSC::CodeBlock::isKnownNotImmediate):
2108         (JSC::CodeBlock::instructions const):
2109         (JSC::CodeBlock::ownerExecutable const):
2110         (JSC::CodeBlock::thisRegister const):
2111         (JSC::CodeBlock::source const):
2112         (JSC::CodeBlock::sourceOffset const):
2113         (JSC::CodeBlock::firstLineColumnOffset const):
2114         (JSC::CodeBlock::createRareDataIfNecessary):
2115         (JSC::CodeBlock::ownerScriptExecutable const): Deleted.
2116         (JSC::CodeBlock::setThisRegister): Deleted.
2117         (JSC::CodeBlock::calleeSaveRegisters const): Deleted.
2118         * bytecode/EvalCodeBlock.h:
2119         * bytecode/FunctionCodeBlock.h:
2120         * bytecode/GlobalCodeBlock.h:
2121         (JSC::GlobalCodeBlock::GlobalCodeBlock):
2122         * bytecode/ModuleProgramCodeBlock.h:
2123         * bytecode/ProgramCodeBlock.h:
2124         * debugger/Debugger.cpp:
2125         (JSC::Debugger::toggleBreakpoint):
2126         * debugger/DebuggerCallFrame.cpp:
2127         (JSC::DebuggerCallFrame::sourceID const):
2128         (JSC::DebuggerCallFrame::sourceIDForCallFrame):
2129         * debugger/DebuggerScope.cpp:
2130         (JSC::DebuggerScope::location const):
2131         * dfg/DFGByteCodeParser.cpp:
2132         (JSC::DFG::ByteCodeParser::InlineStackEntry::executable):
2133         (JSC::DFG::ByteCodeParser::inliningCost):
2134         (JSC::DFG::ByteCodeParser::parseCodeBlock):
2135         * dfg/DFGCapabilities.cpp:
2136         (JSC::DFG::isSupportedForInlining):
2137         (JSC::DFG::mightCompileEval):
2138         (JSC::DFG::mightCompileProgram):
2139         (JSC::DFG::mightCompileFunctionForCall):
2140         (JSC::DFG::mightCompileFunctionForConstruct):
2141         (JSC::DFG::canUseOSRExitFuzzing):
2142         * dfg/DFGGraph.h:
2143         (JSC::DFG::Graph::executableFor):
2144         * dfg/DFGJITCompiler.cpp:
2145         (JSC::DFG::JITCompiler::compileFunction):
2146         * dfg/DFGOSREntry.cpp:
2147         (JSC::DFG::prepareOSREntry):
2148         * dfg/DFGOSRExit.cpp:
2149         (JSC::DFG::restoreCalleeSavesFor):
2150         (JSC::DFG::saveCalleeSavesFor):
2151         (JSC::DFG::saveOrCopyCalleeSavesFor):
2152         * dfg/DFGOSRExitCompilerCommon.cpp:
2153         (JSC::DFG::handleExitCounts):
2154         * dfg/DFGOperations.cpp:
2155         * dfg/DFGToFTLDeferredCompilationCallback.cpp:
2156         (JSC::DFG::ToFTLDeferredCompilationCallback::compilationDidComplete):
2157         * ftl/FTLCapabilities.cpp:
2158         (JSC::FTL::canCompile):
2159         * ftl/FTLLink.cpp:
2160         (JSC::FTL::link):
2161         * ftl/FTLOSRExitCompiler.cpp:
2162         (JSC::FTL::compileStub):
2163         * interpreter/CallFrame.cpp:
2164         (JSC::CallFrame::callerSourceOrigin):
2165         * interpreter/Interpreter.cpp:
2166         (JSC::eval):
2167         (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const):
2168         * interpreter/StackVisitor.cpp:
2169         (JSC::StackVisitor::Frame::calleeSaveRegisters):
2170         (JSC::StackVisitor::Frame::sourceURL const):
2171         (JSC::StackVisitor::Frame::sourceID):
2172         (JSC::StackVisitor::Frame::computeLineAndColumn const):
2173         * interpreter/StackVisitor.h:
2174         * jit/AssemblyHelpers.h:
2175         (JSC::AssemblyHelpers::emitSaveCalleeSavesFor):
2176         (JSC::AssemblyHelpers::emitSaveOrCopyCalleeSavesFor):
2177         (JSC::AssemblyHelpers::emitRestoreCalleeSavesFor):
2178         * jit/CallFrameShuffleData.cpp:
2179         (JSC::CallFrameShuffleData::setupCalleeSaveRegisters):
2180         * jit/JIT.cpp:
2181         (JSC::JIT::compileWithoutLinking):
2182         * jit/JITToDFGDeferredCompilationCallback.cpp:
2183         (JSC::JITToDFGDeferredCompilationCallback::compilationDidComplete):
2184         * jit/JITWorklist.cpp:
2185         (JSC::JITWorklist::Plan::finalize):
2186         (JSC::JITWorklist::compileNow):
2187         * jit/RegisterAtOffsetList.cpp:
2188         (JSC::RegisterAtOffsetList::llintBaselineCalleeSaveRegisters):
2189         * jit/RegisterAtOffsetList.h:
2190         (JSC::RegisterAtOffsetList::at const):
2191         * runtime/ErrorInstance.cpp:
2192         (JSC::appendSourceToError):
2193         * runtime/ScriptExecutable.cpp:
2194         (JSC::ScriptExecutable::newCodeBlockFor):
2195         * runtime/StackFrame.cpp:
2196         (JSC::StackFrame::sourceID const):
2197         (JSC::StackFrame::sourceURL const):
2198         (JSC::StackFrame::computeLineAndColumn const):
2199
2200 2019-02-08  Robin Morisset  <rmorisset@apple.com>
2201
2202         B3LowerMacros wrongly sets m_changed to true in the case of AtomicWeakCAS on x86
2203         https://bugs.webkit.org/show_bug.cgi?id=194460
2204
2205         Reviewed by Mark Lam.
2206
2207         Trivial fix, should already be covered by testAtomicWeakCAS in testb3.cpp.
2208
2209         * b3/B3LowerMacros.cpp:
2210
2211 2019-02-08  Mark Lam  <mark.lam@apple.com>
2212
2213         Use maxSingleCharacterString in comparisons instead of literal constants.
2214         https://bugs.webkit.org/show_bug.cgi?id=194452
2215
2216         Reviewed by Yusuke Suzuki.
2217
2218         This way, if we ever change maxSingleCharacterString, it won't break all this code
2219         that relies on it being 0xff implicitly.
2220
2221         * dfg/DFGSpeculativeJIT.cpp:
2222         (JSC::DFG::SpeculativeJIT::compileStringSlice):
2223         (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
2224         * ftl/FTLLowerDFGToB3.cpp:
2225         (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
2226         (JSC::FTL::DFG::LowerDFGToB3::compileStringSlice):
2227         * jit/ThunkGenerators.cpp:
2228         (JSC::stringGetByValGenerator):
2229         (JSC::charToString):
2230
2231 2019-02-08  Mark Lam  <mark.lam@apple.com>
2232
2233         Fix DFG's doesGC() for CheckTierUp*, GetByVal, PutByVal*, and StringCharAt nodes.
2234         https://bugs.webkit.org/show_bug.cgi?id=194446
2235         <rdar://problem/47926792>
2236
2237         Reviewed by Saam Barati.
2238
2239         Fix doesGC() for the following nodes:
2240
2241             CheckTierUpAtReturn:
2242                 Calls triggerTierUpNow(), which calls triggerFTLReplacementCompile(),
2243                 which calls Worklist::completeAllReadyPlansForVM(), which uses DeferGC.
2244
2245             CheckTierUpInLoop:
2246                 Calls triggerTierUpNowInLoop(), which calls tierUpCommon(), which calls
2247                 Worklist::completeAllReadyPlansForVM(), which uses DeferGC.
2248
2249             CheckTierUpAndOSREnter:
2250                 Calls triggerOSREntryNow(), which calls tierUpCommon(), which calls
2251                 Worklist::completeAllReadyPlansForVM(), which uses DeferGC.
2252
2253             GetByVal:
2254                 case Array::String calls operationSingleCharacterString(), which calls
2255                 jsSingleCharacterString(), which can allocate a string.
2256
2257             PutByValDirect:
2258             PutByVal:
2259             PutByValAlias:
2260                 For the DFG only, the integer TypeArrays calls compilePutByValForIntTypedArray(),
2261                 which may call slow paths operationPutByValDirectStrict(), operationPutByValDirectNonStrict(),
2262                 operationPutByValStrict(), or operationPutByValNonStrict().  All of these
2263                 slow paths call putByValInternal(), which may create exception objects, or
2264                 call the generic JSValue::put() which may execute arbitrary code.
2265
2266             StringCharAt:
2267                 Can call operationSingleCharacterString(), which calls jsSingleCharacterString(),
2268                 which can allocate a string.
2269
2270         Also fix DFG::SpeculativeJIT::compileGetByValOnString() and FTL's compileStringCharAt()
2271         to use the maxSingleCharacterString constant instead of a literal constant.
2272
2273         * dfg/DFGDoesGC.cpp:
2274         (JSC::DFG::doesGC):
2275         * dfg/DFGSpeculativeJIT.cpp:
2276         (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
2277         * dfg/DFGSpeculativeJIT64.cpp:
2278         (JSC::DFG::SpeculativeJIT::compile):
2279         * ftl/FTLLowerDFGToB3.cpp:
2280         (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
2281         (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
2282         (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
2283
2284 2019-02-08  Yusuke Suzuki  <ysuzuki@apple.com>
2285
2286         [JSC] SourceProviderCacheItem should be small
2287         https://bugs.webkit.org/show_bug.cgi?id=194432
2288
2289         Reviewed by Saam Barati.
2290
2291         Some JetStream2 tests stress the JS parser. At that time, so many SourceProviderCacheItems are created.
2292         While they are removed when full-GC happens, it significantly increases the peak memory usage.
2293         This patch reduces the size of SourceProviderCacheItem from 56 to 32.
2294
2295         * parser/Parser.cpp:
2296         (JSC::Parser<LexerType>::parseFunctionInfo):
2297         * parser/ParserModes.h:
2298         * parser/ParserTokens.h:
2299         * parser/SourceProviderCacheItem.h:
2300         (JSC::SourceProviderCacheItem::endFunctionToken const):
2301         (JSC::SourceProviderCacheItem::SourceProviderCacheItem):
2302
2303 2019-02-07  Robin Morisset  <rmorisset@apple.com>
2304
2305         Fix Abs(Neg(x)) -> Abs(x) optimization in B3ReduceStrength
2306         https://bugs.webkit.org/show_bug.cgi?id=194420
2307
2308         Reviewed by Saam Barati.
2309
2310         In https://bugs.webkit.org/show_bug.cgi?id=194250, I added an optimization: Abs(Neg(x)) -> Abs(x).
2311         But I introduced two bugs, one is that I actually implemented Abs(Neg(x)) -> x, and the other is that the test is looking at Abs(Abs(x)) instead (both were stupid copy-paste mistakes).
2312         This trivial patch fixes both.
2313
2314         * b3/B3ReduceStrength.cpp:
2315         * b3/testb3.cpp:
2316         (JSC::B3::testAbsNegArg):
2317
2318 2019-02-07  Keith Miller  <keith_miller@apple.com>
2319
2320         Better error messages for module loader SPI
2321         https://bugs.webkit.org/show_bug.cgi?id=194421
2322
2323         Reviewed by Saam Barati.
2324
2325         * API/JSAPIGlobalObject.mm:
2326         (JSC::JSAPIGlobalObject::moduleLoaderImportModule):
2327
2328 2019-02-07  Mark Lam  <mark.lam@apple.com>
2329
2330         Fix more doesGC() for CheckTraps, GetMapBucket, and Switch nodes.
2331         https://bugs.webkit.org/show_bug.cgi?id=194399
2332         <rdar://problem/47889777>
2333
2334         Reviewed by Yusuke Suzuki.
2335
2336         Fix doesGC() for the following nodes:
2337
2338             CheckTraps:
2339                 We normally will not emit this node because Options::usePollingTraps() is
2340                 false by default.  However, as it is implemented now, CheckTraps can GC
2341                 because it can allocate a TerminatedExecutionException.  If we make the
2342                 TerminatedExecutionException a singleton allocated at initialization time,
2343                 doesGC() can return false for CheckTraps.
2344                 https://bugs.webkit.org/show_bug.cgi?id=194323
2345
2346             GetMapBucket:
2347                 Can call operationJSMapFindBucket() or operationJSSetFindBucket(),
2348                 which calls HashMapImpl::findBucket(), which calls jsMapHash(), which
2349                 can resolve a rope.
2350
2351             Switch:
2352                 If switchData kind is SwitchChar, can call operationResolveRope() .
2353                 If switchData kind is SwitchString and the child use kind is not StringIdentUse,
2354                     can call operationSwitchString() which resolves ropes.
2355
2356             DirectTailCall:
2357             ForceOSRExit:
2358             Return:
2359             TailCallForwardVarargs:
2360             TailCallVarargs:
2361             Throw:
2362                 These are terminal nodes.  It shouldn't really matter what doesGC() returns
2363                 for them, but following our conservative practice, unless we have a good
2364                 reason for doesGC() to return false, we should just return true.
2365
2366         * dfg/DFGDoesGC.cpp:
2367         (JSC::DFG::doesGC):
2368
2369 2019-02-07  Robin Morisset  <rmorisset@apple.com>
2370
2371         B3ReduceStrength: missing peephole optimizations for Neg and Sub
2372         https://bugs.webkit.org/show_bug.cgi?id=194250
2373
2374         Reviewed by Saam Barati.
2375
2376         Adds the following optimizations for integers:
2377         - Sub(x, x) => 0
2378             Already covered by the test testSubArg
2379         - Sub(x1, Neg(x2)) => Add (x1, x2)
2380             Added test: testSubNeg
2381         - Neg(Sub(x1, x2)) => Sub(x2, x1)
2382             Added test: testNegSub
2383         - Add(Neg(x1), x2) => Sub(x2, x1)
2384             Added test: testAddNeg1
2385         - Add(x1, Neg(x2)) => Sub(x1, x2)
2386             Added test: testAddNeg2
2387         Adds the following optimization for floating point values:
2388         - Abs(Neg(x)) => Abs(x)
2389             Added test: testAbsNegArg
2390             Adds the following optimization:
2391
2392         Also did some trivial refactoring, using m_value->isInteger() everywhere instead of isInt(m_value->type()), and using replaceWithNew<Value> instead of replaceWithNewValue(m_proc.add<Value(..))
2393
2394         * b3/B3ReduceStrength.cpp:
2395         * b3/testb3.cpp:
2396         (JSC::B3::testAddNeg1):
2397         (JSC::B3::testAddNeg2):
2398         (JSC::B3::testSubNeg):
2399         (JSC::B3::testNegSub):
2400         (JSC::B3::testAbsAbsArg):
2401         (JSC::B3::testAbsNegArg):
2402         (JSC::B3::run):
2403
2404 2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>
2405
2406         [JSC] Use BufferInternal single character StringImpl for SmallStrings
2407         https://bugs.webkit.org/show_bug.cgi?id=194374
2408
2409         Reviewed by Geoffrey Garen.
2410
2411         Currently, we first create a large StringImpl, and create bunch of substrings with length = 1.
2412         But pointer is larger than single character. BufferInternal StringImpl with single character
2413         is more memory efficient.
2414
2415         * runtime/SmallStrings.cpp:
2416         (JSC::SmallStringsStorage::SmallStringsStorage):
2417         (JSC::SmallStrings::SmallStrings):
2418         * runtime/SmallStrings.h:
2419
2420 2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>
2421
2422         [JSC] InitializeEntrypointArguments should produce SpecCellCheck if FlushFormat is FlushedCell
2423         https://bugs.webkit.org/show_bug.cgi?id=194369
2424         <rdar://problem/47813087>
2425
2426         Reviewed by Saam Barati.
2427
2428         InitializeEntrypointArguments says SpecCell if the FlushFormat is FlushedCell. But this actually has
2429         JSEmpty if it is TDZ. This incorrectly proved type information removes necessary CheckNotEmpty in
2430         constant folding phase.
2431
2432         * dfg/DFGAbstractInterpreterInlines.h:
2433         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
2434
2435 2019-02-06  Devin Rousso  <drousso@apple.com>
2436
2437         Web Inspector: DOM: don't send the entire function string with each event listener
2438         https://bugs.webkit.org/show_bug.cgi?id=194293
2439         <rdar://problem/47822809>
2440
2441         Reviewed by Joseph Pecoraro.
2442
2443         * inspector/protocol/DOM.json:
2444
2445         * runtime/JSFunction.h:
2446         Export `calculatedDisplayName`.
2447
2448 2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>
2449
2450         [JSC] PrivateName to PublicName hash table is wasteful
2451         https://bugs.webkit.org/show_bug.cgi?id=194277
2452
2453         Reviewed by Michael Saboff.
2454
2455         PrivateNames account for a lot of memory in the initial JSC footprint. BuiltinNames have Identifier fields corresponding to these PrivateNames
2456         which makes the sizeof(BuiltinNames) about 6KB. It also maintains hash tables for "PublicName to PrivateName" and "PrivateName to PublicName",
2457         each of which takes 16KB memory. While "PublicName to PrivateName" functionality is used in builtin JS (parsing "@xxx" and get a private
2458         name for "xxx"), "PrivateName to PublicName" is rarely used. Holding 16KB hash table for rarely used feature is costly.
2459
2460         In this patch, we add some rules to remove "PrivateName to PublicName" hash table.
2461
2462         1. PrivateName's content should be the same to PublicName.
2463         2. If PrivateName is not actually a private name (we introduced hacky mapping like "@iteratorSymbol" => Symbol.iterator),
2464            the public name should be easily crafted from the given PrivateName.
2465
2466         We modify the content of private names to ensure (1). And for (2), we can meet this requirement by ensuring that the "@xxxSymbol"
2467         is converted to "Symbol.xxx". (1) and (2) allow us to convert a private name to a public name without a large hash table.
2468
2469         We also remove unused identifiers in CommonIdentifiers. And we also move some of them to WebCore's WebCoreBuiltinNames if it is only used in
2470         WebCore.
2471
2472         * builtins/BuiltinNames.cpp:
2473         (JSC::BuiltinNames::BuiltinNames):
2474         * builtins/BuiltinNames.h:
2475         (JSC::BuiltinNames::lookUpPrivateName const):
2476         (JSC::BuiltinNames::getPublicName const):
2477         (JSC::BuiltinNames::checkPublicToPrivateMapConsistency):
2478         (JSC::BuiltinNames::appendExternalName):
2479         (JSC::BuiltinNames::lookUpPublicName const): Deleted.
2480         * builtins/BuiltinUtils.h:
2481         * bytecode/BytecodeDumper.cpp:
2482         (JSC::BytecodeDumper<Block>::dumpIdentifiers):
2483         * bytecompiler/NodesCodegen.cpp:
2484         (JSC::BytecodeIntrinsicNode::emit_intrinsic_getByIdDirectPrivate):
2485         (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate):
2486         * parser/Lexer.cpp:
2487         (JSC::Lexer<LChar>::parseIdentifier):
2488         (JSC::Lexer<UChar>::parseIdentifier):
2489         * parser/Parser.cpp:
2490         (JSC::Parser<LexerType>::createGeneratorParameters):
2491         (JSC::Parser<LexerType>::parseFunctionDeclaration):
2492         (JSC::Parser<LexerType>::parseAsyncFunctionDeclaration):
2493         (JSC::Parser<LexerType>::parseClassDeclaration):
2494         (JSC::Parser<LexerType>::parseExportDeclaration):
2495         (JSC::Parser<LexerType>::parseMemberExpression):
2496         * parser/ParserArena.h:
2497         (JSC::IdentifierArena::makeIdentifier):
2498         * runtime/CachedTypes.cpp:
2499         (JSC::CachedUniquedStringImpl::encode):
2500         (JSC::CachedUniquedStringImpl::decode const):
2501         * runtime/CommonIdentifiers.cpp:
2502         (JSC::CommonIdentifiers::CommonIdentifiers):
2503         (JSC::CommonIdentifiers::lookUpPrivateName const):
2504         (JSC::CommonIdentifiers::getPublicName const):
2505         (JSC::CommonIdentifiers::lookUpPublicName const): Deleted.
2506         * runtime/CommonIdentifiers.h:
2507         * runtime/ExceptionHelpers.cpp:
2508         (JSC::createUndefinedVariableError):
2509         * runtime/Identifier.cpp:
2510         (JSC::Identifier::dump const):
2511         * runtime/Identifier.h:
2512         * runtime/IdentifierInlines.h:
2513         (JSC::Identifier::fromUid):
2514         * runtime/JSTypedArrayViewPrototype.cpp:
2515         (JSC::JSTypedArrayViewPrototype::finishCreation):
2516         * tools/JSDollarVM.cpp:
2517         (JSC::functionGetPrivateProperty):
2518
2519 2019-02-06  Keith Rollin  <krollin@apple.com>
2520
2521         Really enable the automatic checking and regenerations of .xcfilelists during builds
2522         https://bugs.webkit.org/show_bug.cgi?id=194357
2523         <rdar://problem/47861231>
2524
2525         Reviewed by Chris Dumez.
2526
2527         Bug 194124 was supposed to enable the automatic checking and
2528         regenerating of .xcfilelist files during the build. While related
2529         changes were included in that patch, the change to actually enable the
2530         operation somehow was omitted. This patch actually enables the
2531         operation. The check-xcfilelist.sh scripts now check
2532         WK_DISABLE_CHECK_XCFILELISTS, and if it's "1", opts-out the developer
2533         from the checking.
2534
2535         * Scripts/check-xcfilelists.sh:
2536
2537 2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>
2538
2539         [JSC] Unify indirectEvalExecutableSpace and directEvalExecutableSpace
2540         https://bugs.webkit.org/show_bug.cgi?id=194339
2541
2542         Reviewed by Michael Saboff.
2543
2544         DirectEvalExecutable and IndirectEvalExecutable have completely same memory layout.
2545         They have even the same structure. This patch unifies the subspaces for them.
2546
2547         * runtime/DirectEvalExecutable.h:
2548         * runtime/EvalExecutable.h:
2549         (JSC::EvalExecutable::subspaceFor):
2550         * runtime/IndirectEvalExecutable.h:
2551         * runtime/VM.cpp:
2552         * runtime/VM.h:
2553         (JSC::VM::forEachScriptExecutableSpace):
2554
2555 2019-02-06  Yusuke Suzuki  <ysuzuki@apple.com>
2556
2557         [JSC] NativeExecutable should be smaller
2558         https://bugs.webkit.org/show_bug.cgi?id=194331
2559
2560         Reviewed by Michael Saboff.
2561
2562         NativeExecutable takes 88 bytes now. Since our GC rounds the size with 16, it actually takes 96 bytes in IsoSubspaces.
2563         Since a lot of NativeExecutable are allocated, we already has two MarkedBlocks even just after JSGlobalObject initialization.
2564         This patch makes sizeof(NativeExecutable) 64 bytes, which is 32 bytes smaller than 96 bytes. Now our JSGlobalObject initialization
2565         only takes one MarkedBlock for NativeExecutable.
2566
2567         To make NativeExecutable smaller,
2568
2569         1. m_numParametersForCall and m_numParametersForConstruct in ExecutableBase are only meaningful in ScriptExecutable subclasses. Since
2570            they are not touched from JIT, we can remove them from ExecutableBase and move them to ScriptExecutable.
2571
2572         2. DOMJIT::Signature* is rarely used. Rather than having it in NativeExecutable, we should put it in NativeJITCode. Since NativeExecutable
2573            always has JITCode, we can safely query the value from NativeExecutable. This patch creates NativeDOMJITCode, which is a subclass of
2574            NativeJITCode, and instantiated only when DOMJIT::Signature* is given.
2575
2576         3. Move Intrinsic to a member of ScriptExecutable or JITCode. Since JITCode has some paddings to put things, we can leverage this to put
2577            Intrinsic for NativeExecutable.
2578
2579         We also move "clearCode" code from ExecutableBase to ScriptExecutable since it is only valid for ScriptExecutable subclasses.
2580
2581         * CMakeLists.txt:
2582         * JavaScriptCore.xcodeproj/project.pbxproj:
2583         * bytecode/CallVariant.h:
2584         * interpreter/Interpreter.cpp:
2585         * jit/JITCode.cpp:
2586         (JSC::DirectJITCode::DirectJITCode):
2587         (JSC::NativeJITCode::NativeJITCode):
2588         (JSC::NativeDOMJITCode::NativeDOMJITCode):
2589         * jit/JITCode.h:
2590         (JSC::JITCode::signature const):
2591         (JSC::JITCode::intrinsic):
2592         * jit/JITOperations.cpp:
2593         * jit/JITThunks.cpp:
2594         (JSC::JITThunks::hostFunctionStub):
2595         * jit/Repatch.cpp:
2596         * llint/LLIntSlowPaths.cpp:
2597         * runtime/ExecutableBase.cpp:
2598         (JSC::ExecutableBase::dump const):
2599         (JSC::ExecutableBase::hashFor const):
2600         (JSC::ExecutableBase::hasClearableCode const): Deleted.
2601         (JSC::ExecutableBase::clearCode): Deleted.
2602         * runtime/ExecutableBase.h:
2603         (JSC::ExecutableBase::ExecutableBase):
2604         (JSC::ExecutableBase::isModuleProgramExecutable):
2605         (JSC::ExecutableBase::isHostFunction const):
2606         (JSC::ExecutableBase::generatedJITCodeForCall const):
2607         (JSC::ExecutableBase::generatedJITCodeForConstruct const):
2608         (JSC::ExecutableBase::generatedJITCodeFor const):
2609         (JSC::ExecutableBase::generatedJITCodeForCall): Deleted.
2610         (JSC::ExecutableBase::generatedJITCodeForConstruct): Deleted.
2611         (JSC::ExecutableBase::generatedJITCodeFor): Deleted.
2612         (JSC::ExecutableBase::offsetOfNumParametersFor): Deleted.
2613         (JSC::ExecutableBase::hasJITCodeForCall const): Deleted.
2614         (JSC::ExecutableBase::hasJITCodeForConstruct const): Deleted.
2615         (JSC::ExecutableBase::intrinsic const): Deleted.
2616         * runtime/ExecutableBaseInlines.h: Added.
2617         (JSC::ExecutableBase::intrinsic const):
2618         (JSC::ExecutableBase::hasJITCodeForCall const):
2619         (JSC::ExecutableBase::hasJITCodeForConstruct const):
2620         * runtime/JSBoundFunction.cpp:
2621         * runtime/JSType.cpp:
2622         (WTF::printInternal):
2623         * runtime/JSType.h:
2624         * runtime/NativeExecutable.cpp:
2625         (JSC::NativeExecutable::create):
2626         (JSC::NativeExecutable::createStructure):
2627         (JSC::NativeExecutable::NativeExecutable):
2628         (JSC::NativeExecutable::signatureFor const):
2629         (JSC::NativeExecutable::intrinsic const):
2630         * runtime/NativeExecutable.h:
2631         * runtime/ScriptExecutable.cpp:
2632         (JSC::ScriptExecutable::ScriptExecutable):
2633         (JSC::ScriptExecutable::clearCode):
2634         (JSC::ScriptExecutable::installCode):
2635         (JSC::ScriptExecutable::hasClearableCode const):
2636         * runtime/ScriptExecutable.h:
2637         (JSC::ScriptExecutable::intrinsic const):
2638         (JSC::ScriptExecutable::hasJITCodeForCall const):
2639         (JSC::ScriptExecutable::hasJITCodeForConstruct const):
2640         * runtime/VM.cpp:
2641         (JSC::VM::getHostFunction):
2642
2643 2019-02-06  Pablo Saavedra  <psaavedra@igalia.com>
2644
2645         Build failure after r240431
2646         https://bugs.webkit.org/show_bug.cgi?id=194330
2647
2648         Reviewed by Žan Doberšek.
2649
2650         * API/glib/JSCOptions.cpp:
2651
2652 2019-02-05  Mark Lam  <mark.lam@apple.com>
2653
2654         Fix DFG's doesGC() for a few more nodes.
2655         https://bugs.webkit.org/show_bug.cgi?id=194307
2656         <rdar://problem/47832956>
2657
2658         Reviewed by Yusuke Suzuki.
2659
2660         Fix doesGC() for the following nodes:
2661
2662             NumberToStringWithValidRadixConstant:
2663                 Calls operationInt32ToStringWithValidRadix(), which calls int32ToString(),
2664                 which can allocate a string.
2665                 Calls operationInt52ToStringWithValidRadix(), which calls int52ToString(),
2666                 which can allocate a string.
2667                 Calls operationDoubleToStringWithValidRadix(), which calls numberToString(),
2668                 which can allocate a string.
2669
2670             RegExpExecNonGlobalOrSticky: calls createRegExpMatchesArray() which allocates
2671                 memory for all kinds of objects.
2672             RegExpMatchFast: calls operationRegExpMatchFastString(), which calls
2673                 RegExpObject::execInline() and RegExpObject::matchGlobal().  Both of
2674                 these allocates memory for the match result.
2675             RegExpMatchFastGlobal: calls operationRegExpMatchFastGlobalString(), which
2676                 calls RegExpObject's collectMatches(), which allocates an array amongst
2677                 other objects.
2678
2679             StringFromCharCode:
2680                 If the uint32 code to convert is greater than maxSingleCharacterString,
2681                 we'll call operationStringFromCharCode(), which calls jsSingleCharacterString(),
2682                 which allocates a new string if the code is greater than maxSingleCharacterString.
2683
2684         Also fix SpeculativeJIT::compileFromCharCode() and FTL's compileStringFromCharCode()
2685         to use maxSingleCharacterString instead of a literal constant.
2686
2687         * dfg/DFGDoesGC.cpp:
2688         (JSC::DFG::doesGC):
2689         * dfg/DFGSpeculativeJIT.cpp:
2690         (JSC::DFG::SpeculativeJIT::compileFromCharCode):
2691         * ftl/FTLLowerDFGToB3.cpp:
2692         (JSC::FTL::DFG::LowerDFGToB3::compileStringFromCharCode):
2693
2694 2019-02-05  Keith Rollin  <krollin@apple.com>
2695
2696         Enable the automatic checking and regenerations of .xcfilelists during builds
2697         https://bugs.webkit.org/show_bug.cgi?id=194124
2698         <rdar://problem/47721277>
2699
2700         Reviewed by Tim Horton.
2701
2702         Bug 193790 add a facility for checking -- during build time -- that
2703         any needed .xcfilelist files are up-to-date and for updating them if
2704         they are not. This facility was initially opt-in by setting
2705         WK_ENABLE_CHECK_XCFILELISTS until other pieces were in place and until
2706         the process seemed robust. Its now time to enable this facility and
2707         make it opt-out. If there is a need to disable this facility, set and
2708         export WK_DISABLE_CHECK_XCFILELISTS=1 in your environment before
2709         running `make` or `build-webkit`, or before running Xcode from the
2710         command line.
2711
2712         Additionally, remove the step that generates a list of source files
2713         going into the UnifiedSources build step. It's only necessarily to
2714         specify Sources.txt and SourcesCocoa.txt as inputs.
2715
2716         * JavaScriptCore.xcodeproj/project.pbxproj:
2717         * UnifiedSources-input.xcfilelist: Removed.
2718
2719 2019-02-05  Keith Rollin  <krollin@apple.com>
2720
2721         Update .xcfilelist files
2722         https://bugs.webkit.org/show_bug.cgi?id=194121
2723         <rdar://problem/47720863>
2724
2725         Reviewed by Tim Horton.
2726
2727         Preparatory to enabling the facility for automatically updating the
2728         .xcfilelist files, check in a freshly-updated set so that not everyone
2729         runs up against having to regenerate them themselves.
2730
2731         * DerivedSources-input.xcfilelist:
2732         * DerivedSources-output.xcfilelist:
2733
2734 2019-02-05  Andy VanWagoner  <andy@vanwagoner.family>
2735
2736         [INTL] improve efficiency of Intl.NumberFormat formatToParts
2737         https://bugs.webkit.org/show_bug.cgi?id=185557
2738
2739         Reviewed by Mark Lam.
2740
2741         Since field nesting depth is minimal, this algorithm should be effectively O(n),
2742         where n is the number of characters in the formatted string.
2743         It may be less memory efficient than the previous impl, since the intermediate Vector
2744         is the length of the string, instead of the count of the fields.
2745
2746         * runtime/IntlNumberFormat.cpp:
2747         (JSC::IntlNumberFormat::formatToParts):
2748         * runtime/IntlNumberFormat.h:
2749
2750 2019-02-05  Mark Lam  <mark.lam@apple.com>
2751
2752         Move DFG nodes that clobberize() says will write(Heap) to the doesGC() list that returns true.
2753         https://bugs.webkit.org/show_bug.cgi?id=194298
2754         <rdar://problem/47827555>
2755
2756         Reviewed by Saam Barati.
2757
2758         We do this for 3 reasons:
2759         1. It's clearer when reading doesGC()'s code that these nodes will return true.
2760         2. If things change in the future where clobberize() no longer reports these nodes
2761            as write(Heap), each node should be vetted first to make sure that it can never
2762            GC before being moved back to the doesGC() list that returns false.
2763         3. This reduces the list of nodes that we need to audit to make sure doesGC() is
2764            correct in its claims about the nodes' GCing possibility.
2765
2766         The list of nodes moved are:
2767
2768             ArrayPush
2769             ArrayPop
2770             Call
2771             CallEval
2772             CallForwardVarargs
2773             CallVarargs
2774             Construct
2775             ConstructForwardVarargs
2776             ConstructVarargs
2777             DefineDataProperty
2778             DefineAccessorProperty
2779             DeleteById
2780             DeleteByVal
2781             DirectCall
2782             DirectConstruct
2783             DirectTailCallInlinedCaller
2784             GetById
2785             GetByIdDirect
2786             GetByIdDirectFlush
2787             GetByIdFlush
2788             GetByIdWithThis
2789             GetByValWithThis
2790             GetDirectPname
2791             GetDynamicVar
2792             HasGenericProperty
2793             HasOwnProperty
2794             HasStructureProperty
2795             InById
2796             InByVal
2797             InstanceOf
2798             InstanceOfCustom
2799             LoadVarargs
2800             NumberToStringWithRadix
2801             PutById
2802             PutByIdDirect
2803             PutByIdFlush
2804             PutByIdWithThis
2805             PutByOffset
2806             PutByValWithThis
2807             PutDynamicVar
2808             PutGetterById
2809             PutGetterByVal
2810             PutGetterSetterById
2811             PutSetterById
2812             PutSetterByVal
2813             PutStack
2814             PutToArguments
2815             RegExpExec
2816             RegExpTest
2817             ResolveScope
2818             ResolveScopeForHoistingFuncDeclInEval
2819             TailCall
2820             TailCallForwardVarargsInlinedCaller
2821             TailCallInlinedCaller
2822             TailCallVarargsInlinedCaller
2823             ToNumber
2824             ToPrimitive
2825             ValueNegate
2826
2827         * dfg/DFGDoesGC.cpp:
2828         (JSC::DFG::doesGC):
2829
2830 2019-02-05  Yusuke Suzuki  <ysuzuki@apple.com>
2831
2832         [JSC] Shrink sizeof(UnlinkedCodeBlock)
2833         https://bugs.webkit.org/show_bug.cgi?id=194281
2834
2835         Reviewed by Michael Saboff.
2836
2837         This patch first attempts to reduce the size of UnlinkedCodeBlock in a relatively simpler way. Reordering members, remove unused member, and
2838         move rarely used members to RareData. This changes sizeof(UnlinkedCodeBlock) from 312 to 256.
2839
2840         Still we have several chances to reduce sizeof(UnlinkedCodeBlock). Making more Vectors to RefCountedArrays can be done with some restructuring
2841         of generatorification phase. It would be possible to remove m_sourceURLDirective and m_sourceMappingURLDirective from UnlinkedCodeBlock since
2842         they should be in SourceProvider and that should be enough. These changes require some intrusive modifications and we make them as a future work.
2843
2844         * bytecode/CodeBlock.cpp:
2845         (JSC::CodeBlock::finishCreation):
2846         * bytecode/CodeBlock.h:
2847         (JSC::CodeBlock::bitVectors const): Deleted.
2848         * bytecode/CodeType.h:
2849         * bytecode/UnlinkedCodeBlock.cpp:
2850         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
2851         (JSC::UnlinkedCodeBlock::shrinkToFit):
2852         * bytecode/UnlinkedCodeBlock.h:
2853         (JSC::UnlinkedCodeBlock::bitVector):
2854         (JSC::UnlinkedCodeBlock::addBitVector):
2855         (JSC::UnlinkedCodeBlock::addSetConstant):
2856         (JSC::UnlinkedCodeBlock::constantRegisters):
2857         (JSC::UnlinkedCodeBlock::numberOfConstantIdentifierSets const):
2858         (JSC::UnlinkedCodeBlock::constantIdentifierSets):
2859         (JSC::UnlinkedCodeBlock::codeType const):
2860         (JSC::UnlinkedCodeBlock::didOptimize const):
2861         (JSC::UnlinkedCodeBlock::setDidOptimize):
2862         (JSC::UnlinkedCodeBlock::usesGlobalObject const): Deleted.
2863         (JSC::UnlinkedCodeBlock::setGlobalObjectRegister): Deleted.
2864         (JSC::UnlinkedCodeBlock::globalObjectRegister const): Deleted.
2865         (JSC::UnlinkedCodeBlock::bitVectors const): Deleted.
2866         * bytecompiler/BytecodeGenerator.cpp:
2867         (JSC::BytecodeGenerator::emitLoad):
2868         (JSC::BytecodeGenerator::emitLoadGlobalObject): Deleted.
2869         * bytecompiler/BytecodeGenerator.h:
2870         * runtime/CachedTypes.cpp:
2871         (JSC::CachedCodeBlockRareData::encode):
2872         (JSC::CachedCodeBlockRareData::decode const):
2873         (JSC::CachedCodeBlock::scopeRegister const):
2874         (JSC::CachedCodeBlock::codeType const):
2875         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
2876         (JSC::CachedCodeBlock<CodeBlockType>::decode const):
2877         (JSC::CachedCodeBlock<CodeBlockType>::encode):
2878         (JSC::CachedCodeBlock::globalObjectRegister const): Deleted.
2879
2880 2019-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
2881
2882         Unreviewed, add missing exception checks after r240637
2883         https://bugs.webkit.org/show_bug.cgi?id=193546
2884
2885         * tools/JSDollarVM.cpp:
2886         (JSC::functionShadowChickenFunctionsOnStack):
2887
2888 2019-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
2889
2890         [JSC] Shrink size of VM by lazily allocating IsoSubspaces for non-common types
2891         https://bugs.webkit.org/show_bug.cgi?id=193993
2892
2893         Reviewed by Keith Miller.
2894
2895         JSC::VM has a lot of IsoSubspaces, and each takes 504B. This unnecessarily makes VM so large.
2896         And some of them are rarely used. We should allocate it lazily.
2897
2898         In this patch, we make some `IsoSubspaces` `std::unique_ptr<IsoSubspace>`. And we add ensureXXXSpace
2899         functions which allocate IsoSubspaces lazily. This function is used by subspaceFor<> in each class.
2900         And we also add subspaceForConcurrently<> function, which is called from concurrent JIT tiers. This
2901         returns nullptr if the subspace is not allocated yet. JSCell::subspaceFor now takes second template
2902         parameter which tells the function whether subspaceFor is concurrently done. If the IsoSubspace is
2903         lazily created, we may return nullptr for the concurrent access. We ensure the space's initialization
2904         by using WTF::storeStoreFence when lazily allocating it.
2905
2906         In GC's constraint solving, we may touch these lazily allocated spaces. At that time, we check the
2907         existence of the space before touching this. This is not racy because the main thread is stopped when
2908         the constraint solving is working.
2909
2910         This changes sizeof(VM) from 64736 to 56472.
2911
2912         Another interesting thing is that we removed `PreventCollectionScope preventCollectionScope(heap);` in
2913         `Subspace::initialize`. This is really dangerous API since it easily causes dead-lock between the
2914         collector and the mutator if IsoSubspace is dynamically created. We do want to make IsoSubspaces
2915         dynamically-created ones since the requirement of the pre-allocation poses a scalability problem
2916         of IsoSubspace adoption because IsoSubspace is large. Registered Subspace is only touched in the
2917         EndPhase, and the peripheries should be stopped when running EndPhase. Thus, as long as the main thread
2918         can run this IsoSubspace code, the collector is never EndPhase. So this is safe.
2919
2920         * API/JSCallbackFunction.h:
2921         * API/ObjCCallbackFunction.h:
2922         (JSC::ObjCCallbackFunction::subspaceFor):
2923         * API/glib/JSCCallbackFunction.h:
2924         * CMakeLists.txt:
2925         * JavaScriptCore.xcodeproj/project.pbxproj:
2926         * bytecode/CodeBlock.cpp:
2927         (JSC::CodeBlock::visitChildren):
2928         (JSC::CodeBlock::finalizeUnconditionally):
2929         * bytecode/CodeBlock.h:
2930         * bytecode/EvalCodeBlock.h:
2931         * bytecode/ExecutableToCodeBlockEdge.h:
2932         * bytecode/FunctionCodeBlock.h:
2933         * bytecode/ModuleProgramCodeBlock.h:
2934         * bytecode/ProgramCodeBlock.h:
2935         * bytecode/UnlinkedFunctionExecutable.cpp:
2936         (JSC::UnlinkedFunctionExecutable::unlinkedCodeBlockFor):
2937         * bytecode/UnlinkedFunctionExecutable.h:
2938         * dfg/DFGSpeculativeJIT.cpp:
2939         (JSC::DFG::SpeculativeJIT::emitAllocateRawObject):
2940         (JSC::DFG::SpeculativeJIT::compileMakeRope):
2941         (JSC::DFG::SpeculativeJIT::compileNewObject):
2942         * ftl/FTLLowerDFGToB3.cpp:
2943         (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope):
2944         (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
2945         (JSC::FTL::DFG::LowerDFGToB3::allocateObject):
2946         (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedObject):
2947         (JSC::FTL::DFG::LowerDFGToB3::allocateVariableSizedCell):
2948         * heap/Heap.cpp:
2949         (JSC::Heap::finalizeUnconditionalFinalizers):
2950         (JSC::Heap::deleteAllCodeBlocks):
2951         (JSC::Heap::deleteAllUnlinkedCodeBlocks):
2952         (JSC::Heap::addCoreConstraints):
2953         * heap/Subspace.cpp:
2954         (JSC::Subspace::initialize):
2955         * jit/AssemblyHelpers.h:
2956         (JSC::AssemblyHelpers::emitAllocateJSObjectWithKnownSize):
2957         (JSC::AssemblyHelpers::emitAllocateVariableSizedCell):
2958         * jit/JITOpcodes.cpp:
2959         (JSC::JIT::emit_op_new_object):
2960         * jit/JITOpcodes32_64.cpp:
2961         (JSC::JIT::emit_op_new_object):
2962         * runtime/DirectArguments.h:
2963         * runtime/DirectEvalExecutable.h:
2964         * runtime/ErrorInstance.h:
2965         (JSC::ErrorInstance::subspaceFor):
2966         * runtime/ExecutableBase.h:
2967         * runtime/FunctionExecutable.h:
2968         * runtime/IndirectEvalExecutable.h:
2969         * runtime/InferredValue.cpp:
2970         (JSC::InferredValue::visitChildren):
2971         * runtime/InferredValue.h:
2972         * runtime/InferredValueInlines.h:
2973         (JSC::InferredValue::finalizeUnconditionally):
2974         * runtime/InternalFunction.h:
2975         * runtime/JSAsyncFunction.h:
2976         * runtime/JSAsyncGeneratorFunction.h:
2977         * runtime/JSBoundFunction.h:
2978         * runtime/JSCell.h:
2979         (JSC::subspaceFor):
2980         (JSC::subspaceForConcurrently):
2981         * runtime/JSCellInlines.h:
2982         (JSC::allocatorForNonVirtualConcurrently):
2983         * runtime/JSCustomGetterSetterFunction.h:
2984         * runtime/JSDestructibleObject.h:
2985         * runtime/JSFunction.h:
2986         * runtime/JSGeneratorFunction.h:
2987         * runtime/JSImmutableButterfly.h:
2988         * runtime/JSLexicalEnvironment.h:
2989         (JSC::JSLexicalEnvironment::subspaceFor):
2990         * runtime/JSNativeStdFunction.h:
2991         * runtime/JSSegmentedVariableObject.h:
2992         * runtime/JSString.h:
2993         * runtime/ModuleProgramExecutable.h:
2994         * runtime/NativeExecutable.h:
2995         * runtime/ProgramExecutable.h:
2996         * runtime/PropertyMapHashTable.h:
2997         * runtime/ProxyRevoke.h:
2998         * runtime/ScopedArguments.h:
2999         * runtime/ScriptExecutable.cpp:
3000         (JSC::ScriptExecutable::clearCode):
3001         (JSC::ScriptExecutable::installCode):
3002         * runtime/Structure.h:
3003         * runtime/StructureRareData.h:
3004         * runtime/SubspaceAccess.h: Copied from Source/JavaScriptCore/runtime/InferredValueInlines.h.
3005         * runtime/VM.cpp:
3006         (JSC::VM::VM):
3007         * runtime/VM.h:
3008         (JSC::VM::SpaceAndSet::SpaceAndSet):
3009         (JSC::VM::SpaceAndSet::setFor):
3010         (JSC::VM::forEachScriptExecutableSpace):
3011         (JSC::VM::SpaceAndFinalizerSet::SpaceAndFinalizerSet): Deleted.
3012         (JSC::VM::SpaceAndFinalizerSet::finalizerSetFor): Deleted.
3013         (JSC::VM::ScriptExecutableSpaceAndSet::ScriptExecutableSpaceAndSet): Deleted.
3014         (JSC::VM::ScriptExecutableSpaceAndSet::clearableCodeSetFor): Deleted.
3015         (JSC::VM::UnlinkedFunctionExecutableSpaceAndSet::UnlinkedFunctionExecutableSpaceAndSet): Deleted.
3016         (JSC::VM::UnlinkedFunctionExecutableSpaceAndSet::clearableCodeSetFor): Deleted.
3017         * runtime/WeakMapImpl.h:
3018         (JSC::WeakMapImpl::subspaceFor):
3019         * wasm/js/JSWebAssemblyCodeBlock.h:
3020         * wasm/js/JSWebAssemblyMemory.h:
3021         * wasm/js/WebAssemblyFunction.h:
3022         * wasm/js/WebAssemblyWrapperFunction.h:
3023
3024 2019-02-04  Keith Miller  <keith_miller@apple.com>
3025
3026         Change llint operand macros to inline functions
3027         https://bugs.webkit.org/show_bug.cgi?id=194248
3028
3029         Reviewed by Mark Lam.
3030
3031         * llint/LLIntSlowPaths.cpp:
3032         (JSC::LLInt::getNonConstantOperand):
3033         (JSC::LLInt::getOperand):
3034         (JSC::LLInt::llint_trace_value):
3035         (JSC::LLInt::LLINT_SLOW_PATH_DECL):
3036         (JSC::LLInt::getByVal):
3037         (JSC::LLInt::genericCall):
3038         (JSC::LLInt::varargsSetup):
3039         (JSC::LLInt::commonCallEval):
3040
3041 2019-02-04  Robin Morisset  <rmorisset@apple.com>
3042
3043         when lowering AssertNotEmpty, create the value before creating the patchpoint
3044         https://bugs.webkit.org/show_bug.cgi?id=194231
3045
3046         Reviewed by Saam Barati.
3047
3048         This is a very simple change: we should never generate B3 IR where an instruction depends on a value that comes later in the instruction stream.
3049         AssertNotEmpty was generating some such IR, it probably slipped through until now because it is a rather rare and tricky instruction to generate.
3050
3051         * ftl/FTLLowerDFGToB3.cpp:
3052         (JSC::FTL::DFG::LowerDFGToB3::compileAssertNotEmpty):
3053
3054 2019-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
3055
3056         [JSC] ExecutableToCodeBlockEdge should be smaller
3057         https://bugs.webkit.org/show_bug.cgi?id=194244
3058
3059         Reviewed by Michael Saboff.
3060
3061         ExecutableToCodeBlockEdge is allocated so many times. However its memory layout is not efficient.
3062         sizeof(ExecutableToCodeBlockEdge) is 24bytes, but it discards 7bytes due to one bool m_isActive flag.
3063         Because our size classes are rounded by 16bytes, ExecutableToCodeBlockEdge takes 32bytes. So, half of
3064         it is wasted. We should fit it into 16bytes so that we can efficiently allocate it.
3065
3066         In this patch, we leverages TypeInfoMayBePrototype bit in JSTypeInfo. It is a bit special TypeInfo bit
3067         since this is per-cell bit. We rename this to TypeInfoPerCellBit, and use it as a `m_isActive` mark in
3068         ExecutableToCodeBlockEdge. In JSObject subclasses, we use it as MayBePrototype flag.
3069
3070         Since this flag is not changed in CAS style, we must not change this in concurrent threads. This is OK
3071         for ExecutableToCodeBlockEdge's m_isActive flag since this is touched on the main thread (ScriptExecutable::installCode
3072         does not touch it if it is called in non-main threads).
3073
3074         * bytecode/ExecutableToCodeBlockEdge.cpp:
3075         (JSC::ExecutableToCodeBlockEdge::finishCreation):
3076         (JSC::ExecutableToCodeBlockEdge::visitChildren):
3077         (JSC::ExecutableToCodeBlockEdge::activate):
3078         (JSC::ExecutableToCodeBlockEdge::deactivate):
3079         (JSC::ExecutableToCodeBlockEdge::isActive const):
3080         * bytecode/ExecutableToCodeBlockEdge.h:
3081         * runtime/JSCell.h:
3082         * runtime/JSCellInlines.h:
3083         (JSC::JSCell::perCellBit const):
3084         (JSC::JSCell::setPerCellBit):
3085         (JSC::JSCell::mayBePrototype const): Deleted.
3086         (JSC::JSCell::didBecomePrototype): Deleted.
3087         * runtime/JSObject.cpp:
3088         (JSC::JSObject::setPrototypeDirect):
3089         * runtime/JSObject.h:
3090         * runtime/JSObjectInlines.h:
3091         (JSC::JSObject::mayBePrototype const):
3092         (JSC::JSObject::didBecomePrototype):
3093         * runtime/JSTypeInfo.h:
3094         (JSC::TypeInfo::perCellBit):
3095         (JSC::TypeInfo::mergeInlineTypeFlags):
3096         (JSC::TypeInfo::mayBePrototype): Deleted.
3097
3098 2019-02-04  Yusuke Suzuki  <ysuzuki@apple.com>
3099
3100         [JSC] Shrink size of FunctionExecutable
3101         https://bugs.webkit.org/show_bug.cgi?id=194191
3102
3103         Reviewed by Michael Saboff.
3104
3105         This patch reduces the size of FunctionExecutable. Since it is allocated in IsoSubspace, reducing the size directly
3106         improves the allocation efficiency.
3107
3108         1. ScriptExecutable (base class of FunctionExecutable) has several members, but it is meaningful only in FunctionExecutable.
3109            We remove this from ScriptExecutable, and move it to FunctionExecutable.
3110
3111         2. FunctionExecutable has several data which are rarely used. One for FunctionOverrides functionality, which is typically
3112            used for JSC debugging purpose, and another is TypeSet and offsets for type profiler. We move them to RareData and reduce
3113            the size of FunctionExecutable in the common case.
3114
3115         This patch changes the size of FunctionExecutable from 176 to 144.
3116
3117         * bytecode/CodeBlock.cpp:
3118         (JSC::CodeBlock::dumpSource):
3119         (JSC::CodeBlock::finishCreation):
3120         * dfg/DFGNode.h:
3121         (JSC::DFG::Node::OpInfoWrapper::as const):
3122         * interpreter/StackVisitor.cpp:
3123         (JSC::StackVisitor::Frame::computeLineAndColumn const):
3124         * runtime/ExecutableBase.h:
3125         * runtime/FunctionExecutable.cpp:
3126         (JSC::FunctionExecutable::FunctionExecutable):
3127         (JSC::FunctionExecutable::ensureRareDataSlow):
3128         * runtime/FunctionExecutable.h:
3129         * runtime/Intrinsic.h:
3130         * runtime/ModuleProgramExecutable.cpp:
3131         (JSC::ModuleProgramExecutable::ModuleProgramExecutable):
3132         * runtime/ProgramExecutable.cpp:
3133         (JSC::ProgramExecutable::ProgramExecutable):
3134         * runtime/ScriptExecutable.cpp:
3135         (JSC::ScriptExecutable::ScriptExecutable):
3136         (JSC::ScriptExecutable::overrideLineNumber const):
3137         (JSC::ScriptExecutable::typeProfilingStartOffset const):
3138         (JSC::ScriptExecutable::typeProfilingEndOffset const):
3139         * runtime/ScriptExecutable.h:
3140         (JSC::ScriptExecutable::firstLine const):
3141         (JSC::ScriptExecutable::setOverrideLineNumber): Deleted.
3142         (JSC::ScriptExecutable::hasOverrideLineNumber const): Deleted.
3143         (JSC::ScriptExecutable::overrideLineNumber const): Deleted.
3144         (JSC::ScriptExecutable::typeProfilingStartOffset const): Deleted.
3145         (JSC::ScriptExecutable::typeProfilingEndOffset const): Deleted.
3146         * runtime/StackFrame.cpp:
3147         (JSC::StackFrame::computeLineAndColumn const):
3148         * tools/JSDollarVM.cpp:
3149         (JSC::functionReturnTypeFor):
3150
3151 2019-02-04  Mark Lam  <mark.lam@apple.com>
3152
3153         DFG's doesGC() is incorrect about the SameValue node's behavior.
3154         https://bugs.webkit.org/show_bug.cgi?id=194211
3155         <rdar://problem/47608913>
3156
3157         Reviewed by Saam Barati.
3158
3159         Only the DoubleRepUse case is guaranteed to not GC.  The other case may GC because
3160         it calls operationSameValue() which may allocate memory for resolving ropes.
3161
3162         * dfg/DFGDoesGC.cpp:
3163         (JSC::DFG::doesGC):
3164
3165 2019-02-03  Yusuke Suzuki  <ysuzuki@apple.com>
3166
3167         [JSC] UnlinkedMetadataTable assumes that MetadataTable is destroyed before it is destructed, but order of destruction of JS heap cells are not guaranteed
3168         https://bugs.webkit.org/show_bug.cgi?id=194031
3169
3170         Reviewed by Saam Barati.
3171
3172         UnlinkedMetadataTable assumes that MetadataTable linked against this UnlinkedMetadataTable is already destroyed when UnlinkedMetadataTable is destroyed.
3173         This means that UnlinkedCodeBlock is destroyed after all the linked CodeBlocks are destroyed. But this assumption is not valid since GC's finalizer
3174         sweeps objects without considering the dependencies among swept objects. UnlinkedMetadataTable can be destroyed even before linked MetadataTable is
3175         destroyed if UnlinkedCodeBlock is destroyed before linked CodeBlock is destroyed.
3176
3177         To make the above assumption valid, we make UnlinkedMetadataTable RefCounted object, and make MetadataTable hold the strong ref to UnlinkedMetadataTable.
3178         This ensures that UnlinkedMetadataTable is destroyed after all the linked MetadataTables are destroyed.
3179
3180         * bytecode/MetadataTable.cpp:
3181         (JSC::MetadataTable::MetadataTable):
3182         (JSC::MetadataTable::~MetadataTable):
3183         * bytecode/UnlinkedCodeBlock.cpp:
3184         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
3185         (JSC::UnlinkedCodeBlock::visitChildren):
3186         (JSC::UnlinkedCodeBlock::estimatedSize):
3187         (JSC::UnlinkedCodeBlock::setInstructions):
3188         * bytecode/UnlinkedCodeBlock.h:
3189         (JSC::UnlinkedCodeBlock::metadata):
3190         (JSC::UnlinkedCodeBlock::metadataSizeInBytes):
3191         * bytecode/UnlinkedMetadataTable.h:
3192         (JSC::UnlinkedMetadataTable::create):
3193         * bytecode/UnlinkedMetadataTableInlines.h:
3194         (JSC::UnlinkedMetadataTable::UnlinkedMetadataTable):
3195         * runtime/CachedTypes.cpp:
3196         (JSC::CachedMetadataTable::decode const):
3197         (JSC::CachedCodeBlock::metadata const):
3198         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
3199         (JSC::CachedCodeBlock<CodeBlockType>::decode const):
3200         (JSC::CachedCodeBlock<CodeBlockType>::encode):
3201
3202 2019-02-01  Yusuke Suzuki  <ysuzuki@apple.com>
3203
3204         [JSC] Decouple JIT related data from CodeBlock
3205         https://bugs.webkit.org/show_bug.cgi?id=194187
3206
3207         Reviewed by Saam Barati.
3208
3209         CodeBlock holds bunch of data which is only used after JIT starts compiling it.
3210         We have three types of data in CodeBlock.
3211
3212         1. The data which is always used. CodeBlock needs to hold it.
3213         2. The data which is touched even in LLInt, but it is only meaningful in JIT tiers. The example is profiling.
3214         3. The data which is used after the JIT compiler starts running for the given CodeBlock.
3215
3216         This patch decouples (3) from CodeBlock as CodeBlock::JITData. Even if we have bunch of CodeBlocks, only small
3217         number of them gets JIT compilation. Always allocating (3) data enlarges the size of CodeBlock, leading to the
3218         memory waste. Potentially we can decouple (2) in another data structure, but we first do (3) since (3) is beneficial
3219         in both non-JIT and *JIT* modes.
3220
3221         JITData is created only when JIT compiler wants to use it. So it can be concurrently created and used, so it is guarded
3222         by the lock of CodeBlock.
3223
3224         The size of CodeBlock is reduced from 512 to 352.
3225
3226         This patch improves memory footprint and gets 1.1% improvement in RAMification.
3227
3228             Footprint geomean: 36696503 (34.997 MB)
3229             Peak Footprint geomean: 38595988 (36.808 MB)
3230             Score: 37634263 (35.891 MB)
3231
3232             Footprint geomean: 37172768 (35.451 MB)
3233             Peak Footprint geomean: 38978288 (37.173 MB)
3234             Score: 38064824 (36.301 MB)
3235
3236         * bytecode/CodeBlock.cpp:
3237         (JSC::CodeBlock::~CodeBlock):
3238         (JSC::CodeBlock::propagateTransitions):
3239         (JSC::CodeBlock::ensureJITDataSlow):
3240         (JSC::CodeBlock::finalizeBaselineJITInlineCaches):
3241         (JSC::CodeBlock::getICStatusMap):
3242         (JSC::CodeBlock::addStubInfo):
3243         (JSC::CodeBlock::addJITAddIC):
3244         (JSC::CodeBlock::addJITMulIC):
3245         (JSC::CodeBlock::addJITSubIC):
3246         (JSC::CodeBlock::addJITNegIC):
3247         (JSC::CodeBlock::findStubInfo):
3248         (JSC::CodeBlock::addByValInfo):
3249         (JSC::CodeBlock::addCallLinkInfo):
3250         (JSC::CodeBlock::getCallLinkInfoForBytecodeIndex):
3251         (JSC::CodeBlock::addRareCaseProfile):
3252         (JSC::CodeBlock::rareCaseProfileForBytecodeOffset):
3253         (JSC::CodeBlock::rareCaseProfileCountForBytecodeOffset):
3254         (JSC::CodeBlock::resetJITData):
3255         (JSC::CodeBlock::stronglyVisitStrongReferences):
3256         (JSC::CodeBlock::shrinkToFit):
3257         (JSC::CodeBlock::linkIncomingCall):
3258         (JSC::CodeBlock::linkIncomingPolymorphicCall):
3259         (JSC::CodeBlock::unlinkIncomingCalls):
3260         (JSC::CodeBlock::updateAllPredictionsAndCountLiveness):
3261         (JSC::CodeBlock::dumpValueProfiles):
3262         (JSC::CodeBlock::setPCToCodeOriginMap):
3263         (JSC::CodeBlock::findPC):
3264         (JSC::CodeBlock::dumpMathICStats):
3265         * bytecode/CodeBlock.h:
3266         (JSC::CodeBlock::ensureJITData):
3267         (JSC::CodeBlock::setJITCodeMap):
3268         (JSC::CodeBlock::jitCodeMap):
3269         (JSC::CodeBlock::likelyToTakeSlowCase):
3270         (JSC::CodeBlock::couldTakeSlowCase):
3271         (JSC::CodeBlock::lazyOperandValueProfiles):
3272         (JSC::CodeBlock::stubInfoBegin): Deleted.
3273         (JSC::CodeBlock::stubInfoEnd): Deleted.
3274         (JSC::CodeBlock::callLinkInfosBegin): Deleted.
3275         (JSC::CodeBlock::callLinkInfosEnd): Deleted.
3276         (JSC::CodeBlock::jitCodeMap const): Deleted.
3277         (JSC::CodeBlock::numberOfRareCaseProfiles): Deleted.
3278         * bytecode/MethodOfGettingAValueProfile.cpp:
3279         (JSC::MethodOfGettingAValueProfile::emitReportValue const):
3280         (JSC::MethodOfGettingAValueProfile::reportValue):
3281         * dfg/DFGByteCodeParser.cpp:
3282         (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
3283         * jit/JIT.h:
3284         * jit/JITOperations.cpp:
3285         (JSC::tryGetByValOptimize):
3286         * jit/JITPropertyAccess.cpp:
3287         (JSC::JIT::privateCompileGetByVal):
3288         (JSC::JIT::privateCompilePutByVal):
3289
3290 2018-12-16  Darin Adler  <darin@apple.com>
3291
3292         Convert additional String::format clients to alternative approaches
3293         https://bugs.webkit.org/show_bug.cgi?id=192746
3294
3295         Reviewed by Alexey Proskuryakov.
3296
3297         * inspector/agents/InspectorConsoleAgent.cpp:
3298         (Inspector::InspectorConsoleAgent::stopTiming): Use makeString
3299         and FormattedNumber::fixedWidth.
3300
3301 2019-02-01  Yusuke Suzuki  <ysuzuki@apple.com>
3302
3303         [JSC] Remove some of IsoSubspaces for JSFunction subclasses
3304         https://bugs.webkit.org/show_bug.cgi?id=194177
3305
3306         Reviewed by Saam Barati.
3307
3308         JSGeneratorFunction, JSAsyncFunction, and JSAsyncGeneratorFunction do not add any fields / classInfo methods.
3309         We can share the IsoSubspace for JSFunction.
3310
3311         * runtime/JSAsyncFunction.h:
3312         * runtime/JSAsyncGeneratorFunction.h:
3313         * runtime/JSGeneratorFunction.h:
3314         * runtime/VM.cpp:
3315         (JSC::VM::VM):
3316         * runtime/VM.h:
3317
3318 2019-02-01  Mark Lam  <mark.lam@apple.com>
3319
3320         Remove invalid assertion in DFG's compileDoubleRep().
3321         https://bugs.webkit.org/show_bug.cgi?id=194130
3322         <rdar://problem/47699474>
3323
3324         Reviewed by Saam Barati.
3325
3326         * dfg/DFGSpeculativeJIT.cpp:
3327         (JSC::DFG::SpeculativeJIT::compileDoubleRep):
3328
3329 2019-02-01  Yusuke Suzuki  <ysuzuki@apple.com>
3330
3331         [JSC] Unify CodeBlock IsoSubspaces
3332         https://bugs.webkit.org/show_bug.cgi?id=194167
3333
3334         Reviewed by Saam Barati.
3335
3336         When we move CodeBlock into its IsoSubspace, we create IsoSubspaces for each subclass of CodeBlock.
3337         But this is not necessary since,
3338
3339         1. They do not override the classInfo methods.
3340         2. sizeof(ProgramCodeBlock etc.) == sizeof(CodeBlock) since subclasses adds no additional fields.
3341
3342         Creating IsoSubspace for each subclass is costly in terms of memory. Especially, IsoSubspace for
3343         ProgramCodeBlock is. We typically create only one ProgramCodeBlock, and it means the rest of the
3344         MarkedBlock (16KB - sizeof(footer) - sizeof(ProgramCodeBlock)) is just wasted.
3345
3346         This patch unifies these IsoSubspaces into one.
3347
3348         * bytecode/CodeBlock.cpp:
3349         (JSC::CodeBlock::destroy):
3350         * bytecode/CodeBlock.h:
3351         * bytecode/EvalCodeBlock.cpp:
3352         (JSC::EvalCodeBlock::destroy): Deleted.
3353         * bytecode/EvalCodeBlock.h: We drop some utility functions in EvalCodeBlock and use UnlinkedEvalCodeBlock's one directly.
3354         * bytecode/FunctionCodeBlock.cpp:
3355         (JSC::FunctionCodeBlock::destroy): Deleted.
3356         * bytecode/FunctionCodeBlock.h:
3357         * bytecode/GlobalCodeBlock.h:
3358         * bytecode/ModuleProgramCodeBlock.cpp:
3359         (JSC::ModuleProgramCodeBlock::destroy): Deleted.
3360         * bytecode/ModuleProgramCodeBlock.h:
3361         * bytecode/ProgramCodeBlock.cpp:
3362         (JSC::ProgramCodeBlock::destroy): Deleted.
3363         * bytecode/ProgramCodeBlock.h:
3364         * interpreter/Interpreter.cpp:
3365         (JSC::Interpreter::execute):
3366         * runtime/VM.cpp:
3367         (JSC::VM::VM):
3368         * runtime/VM.h:
3369         (JSC::VM::forEachCodeBlockSpace):
3370
3371 2019-02-01  Yusuke Suzuki  <ysuzuki@apple.com>
3372
3373         Unreviewed, follow-up after r240859
3374         https://bugs.webkit.org/show_bug.cgi?id=194145
3375
3376         Replace OOB HeapCellType with cellHeapCellType since they are completely the same.
3377         And rename cellDangerousBitsSpace back to cellSpace.
3378
3379         * runtime/JSCellInlines.h:
3380         (JSC::JSCell::subspaceFor):
3381         * runtime/VM.cpp:
3382         (JSC::VM::VM):
3383         * runtime/VM.h:
3384
3385 2019-02-01  Yusuke Suzuki  <ysuzuki@apple.com>
3386
3387         [JSC] Remove cellJSValueOOBSpace
3388         https://bugs.webkit.org/show_bug.cgi?id=194145
3389
3390         Reviewed by Mark Lam.
3391
3392         * runtime/JSObject.h:
3393         (JSC::JSObject::subspaceFor): Deleted.
3394         * runtime/VM.cpp:
3395         (JSC::VM::VM):
3396         * runtime/VM.h:
3397
3398 2019-01-31  Mark Lam  <mark.lam@apple.com>
3399
3400         Remove poisoning from CodeBlock and LLInt code.
3401         https://bugs.webkit.org/show_bug.cgi?id=194113
3402
3403         Reviewed by Yusuke Suzuki.
3404
3405         * bytecode/CodeBlock.cpp:
3406         (JSC::CodeBlock::CodeBlock):
3407         (JSC::CodeBlock::~CodeBlock):
3408         (JSC::CodeBlock::setConstantRegisters):
3409         (JSC::CodeBlock::propagateTransitions):
3410         (JSC::CodeBlock::finalizeLLIntInlineCaches):
3411         (JSC::CodeBlock::jettison):
3412         (JSC::CodeBlock::predictedMachineCodeSize):
3413         * bytecode/CodeBlock.h:
3414         (JSC::CodeBlock::vm const):
3415         (JSC::CodeBlock::addConstant):
3416         (JSC::CodeBlock::heap const):
3417         (JSC::CodeBlock::replaceConstant):
3418         * llint/LLIntOfflineAsmConfig.h:
3419         * llint/LLIntSlowPaths.cpp:
3420         (JSC::LLInt::handleHostCall):
3421         (JSC::LLInt::setUpCall):
3422         * llint/LowLevelInterpreter.asm:
3423         * llint/LowLevelInterpreter32_64.asm:
3424         * llint/LowLevelInterpreter64.asm:
3425
3426 2019-01-31  Yusuke Suzuki  <ysuzuki@apple.com>
3427
3428         [JSC] Remove finalizer in AsyncFromSyncIteratorPrototype
3429         https://bugs.webkit.org/show_bug.cgi?id=194107
3430
3431         Reviewed by Saam Barati.
3432
3433         AsyncFromSyncIteratorPrototype uses the finalizer, but it is not necessary since it does not hold any objects which require destruction.
3434         We drop this finalizer. And we also make methods of AsyncFromSyncIteratorPrototype lazily allocated.
3435
3436         * CMakeLists.txt:
3437         * DerivedSources.make:
3438         * JavaScriptCore.xcodeproj/project.pbxproj:
3439         * runtime/AsyncFromSyncIteratorPrototype.cpp:
3440         (JSC::AsyncFromSyncIteratorPrototype::AsyncFromSyncIteratorPrototype):
3441         (JSC::AsyncFromSyncIteratorPrototype::finishCreation):
3442         (JSC::AsyncFromSyncIteratorPrototype::create):
3443         * runtime/AsyncFromSyncIteratorPrototype.h:
3444
3445 2019-01-31  Tadeu Zagallo  <tzagallo@apple.com>
3446
3447         Fix `runJITThreadLimitTests` in testapi
3448         https://bugs.webkit.org/show_bug.cgi?id=194064
3449         <rdar://problem/46139147>
3450
3451         Reviewed by Mark Lam.
3452
3453         Fix typo where `targetNumberOfThreads` was not being used.
3454
3455         * API/tests/testapi.mm:
3456         (runJITThreadLimitTests):
3457
3458 2019-01-31  Tadeu Zagallo  <tzagallo@apple.com>
3459
3460         testapi fails RELEASE_ASSERT(codeBlock) in fetchFromDisk() of CodeCache.h
3461         https://bugs.webkit.org/show_bug.cgi?id=194112
3462
3463         Reviewed by Mark Lam.
3464
3465         `testBytecodeCache` does not populate the bytecode cache for the global
3466         CodeBlock, so it should only enable `forceDiskCache` after its execution.
3467
3468         * API/tests/testapi.mm:
3469         (testBytecodeCache):
3470
3471 2019-01-31  Yusuke Suzuki  <ysuzuki@apple.com>
3472
3473         Unreviewed, follow-up after r240796
3474
3475         Initialize WriteBarrier<InferredValue> in the constructor. Otherwise, GC can see the broken one
3476         when allocating InferredValue in FunctionExecutable::finishCreation.
3477
3478         * runtime/FunctionExecutable.cpp:
3479         (JSC::FunctionExecutable::FunctionExecutable):
3480         (JSC::FunctionExecutable::finishCreation):
3481
3482 2019-01-31  Yusuke Suzuki  <ysuzuki@apple.com>
3483
3484         [JSC] Do not use InferredValue in non-JIT configuration
3485         https://bugs.webkit.org/show_bug.cgi?id=194084
3486
3487         Reviewed by Saam Barati.
3488
3489         InferredValue is not meaningful if our VM is non-JIT configuration. InferredValue is used to watch the instantiation of the  FunctionExecutable's
3490         JSFunction and SymbolTable's JSScope to explore the chance of folding them into constants in DFG and FTL. If it is instantiated only once, we can
3491         put a watchpoint and fold it into this constant. But if JIT is disabled, we do not need to care it.
3492         Even in non-JIT configuration, we still use InferredValue for FunctionExecutable to determine whether the given FunctionExecutable is preferable
3493         target for poly proto. If JSFunction for the FunctionExecutable is used as a constructor and instantiated more than once, poly proto Structure
3494         seems appropriate for objects created by this JSFunction. But at that time, only thing we would like to know is that whether JSFunction for this
3495         FunctionExecutable is instantiated multiple times. This does not require the full feature of InferredValue, WatchpointState is enough.
3496         To summarize, since nobody uses InferredValue feature in non-JIT configuration, we should not create it.
3497
3498         * bytecode/ObjectAllocationProfileInlines.h:
3499         (JSC::ObjectAllocationProfile::initializeProfile):
3500         * runtime/FunctionExecutable.cpp:
3501         (JSC::FunctionExecutable::finishCreation):
3502         (JSC::FunctionExecutable::visitChildren):
3503         * runtime/FunctionExecutable.h:
3504         * runtime/InferredValue.cpp:
3505         (JSC::InferredValue::create):
3506         * runtime/JSAsyncFunction.cpp:
3507         (JSC::JSAsyncFunction::create):
3508         * runtime/JSAsyncGeneratorFunction.cpp:
3509         (JSC::JSAsyncGeneratorFunction::create):
3510         * runtime/JSFunction.cpp:
3511         (JSC::JSFunction::create):
3512         * runtime/JSFunctionInlines.h:
3513         (JSC::JSFunction::createWithInvalidatedReallocationWatchpoint):
3514         * runtime/JSGeneratorFunction.cpp:
3515         (JSC::JSGeneratorFunction::create):
3516         * runtime/JSSymbolTableObject.h:
3517         (JSC::JSSymbolTableObject::setSymbolTable):
3518         * runtime/SymbolTable.cpp:
3519         (JSC::SymbolTable::finishCreation):
3520         * runtime/VM.cpp:
3521         (JSC::VM::VM):
3522
3523 2019-01-31  Fujii Hironori  <Hironori.Fujii@sony.com>
3524
3525         [CMake][JSC] Changing ud_opcode.py should trigger invoking ud_opcode.py
3526         https://bugs.webkit.org/show_bug.cgi?id=194085
3527
3528         Reviewed by Yusuke Suzuki.
3529
3530         r240730 changed ud_itab.py and caused incremental build failures
3531         for Ninja builds.
3532
3533         * CMakeLists.txt: Added ud_itab.py and optable.xml to UDIS_GEN_DEP.
3534
3535 2019-01-30  Yusuke Suzuki  <ysuzuki@apple.com>
3536
3537         [JSC] Symbol should be in destructibleCellSpace
3538         https://bugs.webkit.org/show_bug.cgi?id=194082
3539
3540         Reviewed by Saam Barati.
3541
3542         Because Symbol's member was not poisoned, we changed the subspace for Symbol from destructibleCellSpace
3543         to cellJSValueOOBSpace. But the problem is cellJSValueOOBSpace is a space for cells which are not
3544         destructible. As a result, Symbol::destroy is never called, and SymbolImpl is leaked. This patch makes
3545         Symbol's space destructibleCellSpace to appropriately call the destructor.
3546
3547         * runtime/Symbol.h:
3548
3549 2019-01-30  Michael Catanzaro  <mcatanzaro@igalia.com>
3550
3551         Unreviewed, rolling out r240755.
3552
3553         This was not correct
3554
3555         Reverted changeset:
3556
3557         "Unreviewed, fix GCC build after r240730"
3558         https://bugs.webkit.org/show_bug.cgi?id=194041
3559         https://trac.webkit.org/changeset/240755
3560
3561 2019-01-30  Michael Catanzaro  <mcatanzaro@igalia.com>
3562
3563         Unreviewed, fix GCC build after r240730
3564         https://bugs.webkit.org/show_bug.cgi?id=194041
3565         <rdar://problem/47680981>
3566
3567         * disassembler/udis86/ud_itab.py:
3568         (UdItabGenerator.genOpcodeTablesLookupIndex):
3569
3570 2019-01-30  Tadeu Zagallo  <tzagallo@apple.com>
3571
3572         testapi's `testBytecodeCache` does not need to run the code twice
3573         https://bugs.webkit.org/show_bug.cgi?id=194046
3574
3575         Reviewed by Mark Lam.
3576
3577         Since we populate the cache eagerly (unlike the stress tests) we don't
3578         need to run the code twice.
3579
3580         * API/tests/testapi.mm:
3581         (testBytecodeCache):
3582
3583 2019-01-30  Saam barati  <sbarati@apple.com>
3584
3585         [WebAssembly] Change BBQ to generate Air IR
3586         https://bugs.webkit.org/show_bug.cgi?id=191802
3587         <rdar://problem/47651718>
3588
3589         Reviewed by Keith Miller.
3590
3591         This patch adds a new Wasm compiler for the BBQ tier. Instead
3592         of compiling using  B3-01, we now generate Air code directly.
3593         The goal of doing this was to speed up compile times for Wasm
3594         programs.
3595         
3596         This patch provides us with a 20-30% compile time speedup. However, I
3597         have ideas on how to improve compile times even further. For example,
3598         we should probably implement a faster running register allocator:
3599         https://bugs.webkit.org/show_bug.cgi?id=194036
3600         
3601         We can also improve on the code we generate.
3602         We should emit better code for Switch: https://bugs.webkit.org/show_bug.cgi?id=194053
3603         And we should do better instruction selection in various
3604         areas: https://bugs.webkit.org/show_bug.cgi?id=193999
3605
3606         * JavaScriptCore.xcodeproj/project.pbxproj:
3607         * Sources.txt:
3608         * b3/B3LowerToAir.cpp:
3609         * b3/B3StackmapSpecial.h:
3610         * b3/air/AirCode.cpp:
3611         (JSC::B3::Air::Code::emitDefaultPrologue):
3612         * b3/air/AirCode.h:
3613         * b3/air/AirTmp.h:
3614         (JSC::B3::Air::Tmp::Tmp):
3615         * runtime/Options.h:
3616         * wasm/WasmAirIRGenerator.cpp: Added.
3617         (JSC::Wasm::ConstrainedTmp::ConstrainedTmp):
3618         (JSC::Wasm::TypedTmp::TypedTmp):
3619         (JSC::Wasm::TypedTmp::operator== const):
3620         (JSC::Wasm::TypedTmp::operator!= const):
3621         (JSC::Wasm::TypedTmp::operator bool const):
3622         (JSC::Wasm::TypedTmp::operator Tmp const):
3623         (JSC::Wasm::TypedTmp::operator Arg const):
3624         (JSC::Wasm::TypedTmp::tmp const):
3625         (JSC::Wasm::TypedTmp::type const):
3626         (JSC::Wasm::AirIRGenerator::ControlData::ControlData):
3627         (JSC::Wasm::AirIRGenerator::ControlData::dump const):
3628         (JSC::Wasm::AirIRGenerator::ControlData::type const):
3629         (JSC::Wasm::AirIRGenerator::ControlData::signature const):
3630         (JSC::Wasm::AirIRGenerator::ControlData::hasNonVoidSignature const):
3631         (JSC::Wasm::AirIRGenerator::ControlData::targetBlockForBranch):
3632         (JSC::Wasm::AirIRGenerator::ControlData::convertIfToBlock):
3633         (JSC::Wasm::AirIRGenerator::ControlData::resultForBranch const):
3634         (JSC::Wasm::AirIRGenerator::emptyExpression):
3635         (JSC::Wasm::AirIRGenerator::fail const):
3636         (JSC::Wasm::AirIRGenerator::setParser):
3637         (JSC::Wasm::AirIRGenerator::toTmpVector):
3638         (JSC::Wasm::AirIRGenerator::validateInst):
3639         (JSC::Wasm::AirIRGenerator::extractArg):
3640         (JSC::Wasm::AirIRGenerator::append):
3641         (JSC::Wasm::AirIRGenerator::appendEffectful):
3642         (JSC::Wasm::AirIRGenerator::newTmp):
3643         (JSC::Wasm::AirIRGenerator::g32):
3644         (JSC::Wasm::AirIRGenerator::g64):
3645         (JSC::Wasm::AirIRGenerator::f32):
3646         (JSC::Wasm::AirIRGenerator::f64):
3647         (JSC::Wasm::AirIRGenerator::tmpForType):
3648         (JSC::Wasm::AirIRGenerator::addPatchpoint):
3649         (JSC::Wasm::AirIRGenerator::emitPatchpoint):
3650         (JSC::Wasm::AirIRGenerator::emitCheck):
3651         (JSC::Wasm::AirIRGenerator::emitCCall):
3652         (JSC::Wasm::AirIRGenerator::moveOpForValueType):
3653         (JSC::Wasm::AirIRGenerator::instanceValue):
3654         (JSC::Wasm::AirIRGenerator::fixupPointerPlusOffset):
3655         (JSC::Wasm::AirIRGenerator::restoreWasmContextInstance):
3656         (JSC::Wasm::AirIRGenerator::AirIRGenerator):
3657         (JSC::Wasm::AirIRGenerator::restoreWebAssemblyGlobalState):
3658         (JSC::Wasm::AirIRGenerator::emitThrowException):
3659         (JSC::Wasm::AirIRGenerator::addLocal):
3660         (JSC::Wasm::AirIRGenerator::addConstant):
3661         (JSC::Wasm::AirIRGenerator::addArguments):
3662         (JSC::Wasm::AirIRGenerator::getLocal):
3663         (JSC::Wasm::AirIRGenerator::addUnreachable):
3664         (JSC::Wasm::AirIRGenerator::addGrowMemory):
3665         (JSC::Wasm::AirIRGenerator::addCurrentMemory):
3666         (JSC::Wasm::AirIRGenerator::setLocal):
3667         (JSC::Wasm::AirIRGenerator::getGlobal):
3668         (JSC::Wasm::AirIRGenerator::setGlobal):
3669         (JSC::Wasm::AirIRGenerator::emitCheckAndPreparePointer):
3670         (JSC::Wasm::sizeOfLoadOp):
3671         (JSC::Wasm::AirIRGenerator::emitLoadOp):
3672         (JSC::Wasm::AirIRGenerator::load):
3673         (JSC::Wasm::sizeOfStoreOp):
3674         (JSC::Wasm::AirIRGenerator::emitStoreOp):
3675         (JSC::Wasm::AirIRGenerator::store):
3676         (JSC::Wasm::AirIRGenerator::addSelect):
3677         (JSC::Wasm::AirIRGenerator::emitTierUpCheck):
3678         (JSC::Wasm::AirIRGenerator::addLoop):
3679         (JSC::Wasm::AirIRGenerator::addTopLevel):
3680         (JSC::Wasm::AirIRGenerator::addBlock):
3681         (JSC::Wasm::AirIRGenerator::addIf):
3682         (JSC::Wasm::AirIRGenerator::addElse):
3683         (JSC::Wasm::AirIRGenerator::addElseToUnreachable):
3684         (JSC::Wasm::AirIRGenerator::addReturn):
3685         (JSC::Wasm::AirIRGenerator::addBranch):
3686         (JSC::Wasm::AirIRGenerator::addSwitch):
3687         (JSC::Wasm::AirIRGenerator::endBlock):
3688         (JSC::Wasm::AirIRGenerator::addEndToUnreachable):
3689         (JSC::Wasm::AirIRGenerator::addCall):
3690         (JSC::Wasm::AirIRGenerator::addCallIndirect):
3691         (JSC::Wasm::AirIRGenerator::unify):
3692         (JSC::Wasm::AirIRGenerator::unifyValuesWithBlock):
3693         (JSC::Wasm::AirIRGenerator::dump):
3694         (JSC::Wasm::AirIRGenerator::origin):
3695         (JSC::Wasm::parseAndCompileAir):
3696         (JSC::Wasm::AirIRGenerator::emitChecksForModOrDiv):
3697         (JSC::Wasm::AirIRGenerator::emitModOrDiv):
3698         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32DivS>):
3699         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32RemS>):
3700         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32DivU>):
3701         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32RemU>):
3702         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64DivS>):
3703         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64RemS>):
3704         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64DivU>):
3705         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64RemU>):
3706         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Ctz>):
3707         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Ctz>):
3708         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Popcnt>):
3709         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Popcnt>):
3710         (JSC::Wasm::AirIRGenerator::addOp<F64ConvertUI64>):
3711         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ConvertUI64>):
3712         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Nearest>):
3713         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Nearest>):
3714         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Trunc>):
3715         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Trunc>):
3716         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncSF64>):
3717         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncSF32>):
3718         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncUF64>):
3719         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncUF32>):
3720         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncSF64>):
3721         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF64>):
3722         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncSF32>):
3723         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF32>):
3724         (JSC::Wasm::AirIRGenerator::addShift):
3725         (JSC::Wasm::AirIRGenerator::addIntegerSub):
3726         (JSC::Wasm::AirIRGenerator::addFloatingPointAbs):
3727         (JSC::Wasm::AirIRGenerator::addFloatingPointBinOp):
3728         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Ceil>):
3729         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Mul>):
3730         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Sub>):
3731         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Le>):
3732         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32DemoteF64>):
3733         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Min>):
3734         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Ne>):
3735         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Lt>):
3736         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Max>):
3737         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Mul>):
3738         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Div>):
3739         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Clz>):
3740         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Copysign>):
3741         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64ConvertUI32>):
3742         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ReinterpretI32>):
3743         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64And>):
3744         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Ne>):
3745         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Gt>):
3746         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Sqrt>):
3747         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Ge>):
3748         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64GtS>):
3749         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64GtU>):
3750         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Eqz>):
3751         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Div>):
3752         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Add>):
3753         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Or>):
3754         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32LeU>):
3755         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32LeS>):
3756         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Ne>):
3757         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Clz>):
3758         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Neg>):
3759         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32And>):
3760         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32LtU>):
3761         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Rotr>):
3762         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Abs>):
3763         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32LtS>):
3764         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Eq>):
3765         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Copysign>):
3766         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ConvertSI64>):
3767         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Rotl>):
3768         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Lt>):
3769         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64ConvertSI32>):
3770         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Eq>):
3771         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Le>):
3772         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Ge>):
3773         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32ShrU>):
3774         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ConvertUI32>):
3775         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32ShrS>):
3776         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32GeU>):
3777         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Ceil>):
3778         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32GeS>):
3779         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Shl>):
3780         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Floor>):
3781         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Xor>):
3782         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Abs>):
3783         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Min>):
3784         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Mul>):
3785         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Sub>):
3786         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32ReinterpretF32>):
3787         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Add>):
3788         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Sub>):
3789         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Or>):
3790         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64LtU>):
3791         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64LtS>):
3792         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64ConvertSI64>):
3793         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Xor>):
3794         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64GeU>):
3795         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Mul>):
3796         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Sub>):
3797         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64PromoteF32>):
3798         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Add>):
3799         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64GeS>):
3800         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ExtendUI32>):
3801         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Ne>):
3802         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64ReinterpretI64>):
3803         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Eq>):
3804         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Eq>):
3805         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Floor>):
3806         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32ConvertSI32>):
3807         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Eqz>):
3808         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ReinterpretF64>):
3809         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ShrS>):
3810         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ShrU>):
3811         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Sqrt>):
3812         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Shl>):
3813         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Gt>):
3814         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32WrapI64>):
3815         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Rotl>):
3816         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Rotr>):
3817         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32GtU>):
3818         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ExtendSI32>):
3819         (JSC::Wasm::AirIRGenerator::addOp<OpType::I32GtS>):
3820         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Neg>):
3821         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Max>):
3822         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64LeU>):
3823         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64LeS>):
3824         (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Add>):
3825         * wasm/WasmAirIRGenerator.h: Added.
3826         * wasm/WasmB3IRGenerator.cpp:
3827         (JSC::Wasm::B3IRGenerator::emptyExpression):
3828         * wasm/WasmBBQPlan.cpp:
3829         (JSC::Wasm::BBQPlan::compileFunctions):
3830         * wasm/WasmCallingConvention.cpp:
3831         (JSC::Wasm::jscCallingConventionAir):
3832         (JSC::Wasm::wasmCallingConventionAir):
3833         * wasm/WasmCallingConvention.h:
3834         (JSC::Wasm::CallingConvention::CallingConvention):
3835         (JSC::Wasm::CallingConvention::marshallArgumentImpl const):
3836         (JSC::Wasm::CallingConvention::marshallArgument const):
3837         (JSC::Wasm::CallingConventionAir::CallingConventionAir):
3838         (JSC::Wasm::CallingConventionAir::prologueScratch const):
3839         (JSC::Wasm::CallingConventionAir::marshallArgumentImpl const):
3840         (JSC::Wasm::CallingConventionAir::marshallArgument const):
3841         (JSC::Wasm::CallingConventionAir::headerSizeInBytes):
3842         (JSC::Wasm::CallingConventionAir::loadArguments const):
3843         (JSC::Wasm::CallingConventionAir::setupCall const):
3844         (JSC::Wasm::nextJSCOffset):
3845         * wasm/WasmFunctionParser.h:
3846         (JSC::Wasm::FunctionParser<Context>::parseExpression):
3847         * wasm/WasmValidate.cpp:
3848         (JSC::Wasm::Validate::emptyExpression):
3849
3850 2019-01-30  Robin Morisset  <rmorisset@apple.com>
3851
3852         Object.keys can now lead to a PhantomNewArrayBuffer, OSR exit from the FTL should know how to materialize a NewArrayBuffer in that case
3853         https://bugs.webkit.org/show_bug.cgi?id=194050
3854         <rdar://problem/47595592>
3855
3856         Following https://bugs.webkit.org/show_bug.cgi?id=190047, PhantomNewArrayBuffer is no longer guaranteed to originate from a NewArrayBuffer in the baseline jit.
3857         It can now come from Object.keys, which is a function call. We must teach the FTL how to OSR exit in that case.
3858
3859         Reviewed by Yusuke Suzuki.
3860
3861         * ftl/FTLOperations.cpp:
3862         (JSC::FTL::operationMaterializeObjectInOSR):
3863
3864 2019-01-30  Tadeu Zagallo  <tzagallo@apple.com>
3865
3866         Remove assertion that CachedSymbolTables should have no RareData
3867         https://bugs.webkit.org/show_bug.cgi?id=194037
3868
3869         Reviewed by Mark Lam.
3870
3871         It turns out that we don't need to cache the SymbolTableRareData and
3872         we should not assert that it's empty.
3873
3874         * runtime/CachedTypes.cpp:
3875         (JSC::CachedSymbolTable::encode):
3876
3877 2019-01-30  Tadeu Zagallo  <tzagallo@apple.com>
3878