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