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