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