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