<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[242812] trunk/Source</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/242812">242812</a></dd>
<dt>Author</dt> <dd>rmorisset@apple.com</dd>
<dt>Date</dt> <dd>2019-03-12 12:07:04 -0700 (Tue, 12 Mar 2019)</dd>
</dl>

<h3>Log Message</h3>
<pre>A lot more classes have padding that can be reduced by reordering their fields
https://bugs.webkit.org/show_bug.cgi?id=195579

Reviewed by Mark Lam.

Source/bmalloc:

* bmalloc/Heap.h:
* bmalloc/Scavenger.h:

Source/JavaScriptCore:

* assembler/LinkBuffer.h:
* dfg/DFGArrayifySlowPathGenerator.h:
(JSC::DFG::ArrayifySlowPathGenerator::ArrayifySlowPathGenerator):
* dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
(JSC::DFG::CallArrayAllocatorSlowPathGenerator::CallArrayAllocatorSlowPathGenerator):
(JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::CallArrayAllocatorWithVariableSizeSlowPathGenerator):
* dfg/DFGGraph.h:
* dfg/DFGNode.h:
(JSC::DFG::SwitchData::SwitchData):
* dfg/DFGPlan.cpp:
(JSC::DFG::Plan::Plan):
* dfg/DFGPlan.h:
* dfg/DFGSlowPathGenerator.h:
(JSC::DFG::CallSlowPathGenerator::CallSlowPathGenerator):
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::SpeculativeJIT):
* dfg/DFGSpeculativeJIT.h:
* domjit/DOMJITSignature.h:
(JSC::DOMJIT::Signature::Signature):
(JSC::DOMJIT::Signature::effect):
(JSC::DOMJIT::Signature::argumentCount): Deleted.
* heap/MarkingConstraintSolver.h:
* heap/SlotVisitor.h:
* jit/CallFrameShuffleData.h:
* jit/JITDivGenerator.h:
* jit/SpillRegistersMode.h:
* parser/Nodes.h:
* profiler/ProfilerOSRExit.cpp:
(JSC::Profiler::OSRExit::OSRExit):
* profiler/ProfilerOSRExit.h:
* runtime/ArrayBufferView.h:
* runtime/SamplingProfiler.cpp:
(JSC::SamplingProfiler::SamplingProfiler):
* runtime/SamplingProfiler.h:
* runtime/TypeSet.cpp:
(JSC::StructureShape::StructureShape):
* runtime/TypeSet.h:
* runtime/Watchdog.h:

Source/WTF:

* wtf/CrossThreadQueue.h:
* wtf/Logger.h:
* wtf/MemoryPressureHandler.h:
* wtf/MetaAllocator.h:
* wtf/Threading.cpp:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreassemblerLinkBufferh">trunk/Source/JavaScriptCore/assembler/LinkBuffer.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGArrayifySlowPathGeneratorh">trunk/Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGCallArrayAllocatorSlowPathGeneratorh">trunk/Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGGraphh">trunk/Source/JavaScriptCore/dfg/DFGGraph.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGNodeh">trunk/Source/JavaScriptCore/dfg/DFGNode.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGPlancpp">trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGPlanh">trunk/Source/JavaScriptCore/dfg/DFGPlan.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSlowPathGeneratorh">trunk/Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJITcpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJITh">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredomjitDOMJITSignatureh">trunk/Source/JavaScriptCore/domjit/DOMJITSignature.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapMarkingConstraintSolverh">trunk/Source/JavaScriptCore/heap/MarkingConstraintSolver.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreheapSlotVisitorh">trunk/Source/JavaScriptCore/heap/SlotVisitor.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitCallFrameShuffleDatah">trunk/Source/JavaScriptCore/jit/CallFrameShuffleData.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitJITDivGeneratorh">trunk/Source/JavaScriptCore/jit/JITDivGenerator.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitSpillRegistersModeh">trunk/Source/JavaScriptCore/jit/SpillRegistersMode.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserNodesh">trunk/Source/JavaScriptCore/parser/Nodes.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreprofilerProfilerOSRExitcpp">trunk/Source/JavaScriptCore/profiler/ProfilerOSRExit.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreprofilerProfilerOSRExith">trunk/Source/JavaScriptCore/profiler/ProfilerOSRExit.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeArrayBufferViewh">trunk/Source/JavaScriptCore/runtime/ArrayBufferView.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeSamplingProfilercpp">trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeSamplingProfilerh">trunk/Source/JavaScriptCore/runtime/SamplingProfiler.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeTypeSetcpp">trunk/Source/JavaScriptCore/runtime/TypeSet.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeTypeSeth">trunk/Source/JavaScriptCore/runtime/TypeSet.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeWatchdogh">trunk/Source/JavaScriptCore/runtime/Watchdog.h</a></li>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfCrossThreadQueueh">trunk/Source/WTF/wtf/CrossThreadQueue.h</a></li>
<li><a href="#trunkSourceWTFwtfLoggerh">trunk/Source/WTF/wtf/Logger.h</a></li>
<li><a href="#trunkSourceWTFwtfMemoryPressureHandlerh">trunk/Source/WTF/wtf/MemoryPressureHandler.h</a></li>
<li><a href="#trunkSourceWTFwtfMetaAllocatorh">trunk/Source/WTF/wtf/MetaAllocator.h</a></li>
<li><a href="#trunkSourceWTFwtfThreadingcpp">trunk/Source/WTF/wtf/Threading.cpp</a></li>
<li><a href="#trunkSourcebmallocChangeLog">trunk/Source/bmalloc/ChangeLog</a></li>
<li><a href="#trunkSourcebmallocbmallocHeaph">trunk/Source/bmalloc/bmalloc/Heap.h</a></li>
<li><a href="#trunkSourcebmallocbmallocScavengerh">trunk/Source/bmalloc/bmalloc/Scavenger.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog    2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/ChangeLog       2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -1,3 +1,49 @@
</span><ins>+2019-03-12  Robin Morisset  <rmorisset@apple.com>
+
+        A lot more classes have padding that can be reduced by reordering their fields
+        https://bugs.webkit.org/show_bug.cgi?id=195579
+
+        Reviewed by Mark Lam.
+
+        * assembler/LinkBuffer.h:
+        * dfg/DFGArrayifySlowPathGenerator.h:
+        (JSC::DFG::ArrayifySlowPathGenerator::ArrayifySlowPathGenerator):
+        * dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
+        (JSC::DFG::CallArrayAllocatorSlowPathGenerator::CallArrayAllocatorSlowPathGenerator):
+        (JSC::DFG::CallArrayAllocatorWithVariableSizeSlowPathGenerator::CallArrayAllocatorWithVariableSizeSlowPathGenerator):
+        * dfg/DFGGraph.h:
+        * dfg/DFGNode.h:
+        (JSC::DFG::SwitchData::SwitchData):
+        * dfg/DFGPlan.cpp:
+        (JSC::DFG::Plan::Plan):
+        * dfg/DFGPlan.h:
+        * dfg/DFGSlowPathGenerator.h:
+        (JSC::DFG::CallSlowPathGenerator::CallSlowPathGenerator):
+        * dfg/DFGSpeculativeJIT.cpp:
+        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
+        * dfg/DFGSpeculativeJIT.h:
+        * domjit/DOMJITSignature.h:
+        (JSC::DOMJIT::Signature::Signature):
+        (JSC::DOMJIT::Signature::effect):
+        (JSC::DOMJIT::Signature::argumentCount): Deleted.
+        * heap/MarkingConstraintSolver.h:
+        * heap/SlotVisitor.h:
+        * jit/CallFrameShuffleData.h:
+        * jit/JITDivGenerator.h:
+        * jit/SpillRegistersMode.h:
+        * parser/Nodes.h:
+        * profiler/ProfilerOSRExit.cpp:
+        (JSC::Profiler::OSRExit::OSRExit):
+        * profiler/ProfilerOSRExit.h:
+        * runtime/ArrayBufferView.h:
+        * runtime/SamplingProfiler.cpp:
+        (JSC::SamplingProfiler::SamplingProfiler):
+        * runtime/SamplingProfiler.h:
+        * runtime/TypeSet.cpp:
+        (JSC::StructureShape::StructureShape):
+        * runtime/TypeSet.h:
+        * runtime/Watchdog.h:
+
</ins><span class="cx"> 2019-03-12  Mark Lam  <mark.lam@apple.com>
</span><span class="cx"> 
</span><span class="cx">         The HasIndexedProperty node does GC.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerLinkBufferh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/LinkBuffer.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/LinkBuffer.h       2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/assembler/LinkBuffer.h  2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -93,10 +93,10 @@
</span><span class="cx">     LinkBuffer(MacroAssembler& macroAssembler, MacroAssemblerCodePtr<tag> code, size_t size, JITCompilationEffort effort = JITCompilationMustSucceed, bool shouldPerformBranchCompaction = true)
</span><span class="cx">         : m_size(size)
</span><span class="cx">         , m_didAllocate(false)
</span><del>-        , m_code(code.template retagged<LinkBufferPtrTag>())
</del><span class="cx"> #ifndef NDEBUG
</span><span class="cx">         , m_completed(false)
</span><span class="cx"> #endif
</span><ins>+        , m_code(code.template retagged<LinkBufferPtrTag>())
</ins><span class="cx">     {
</span><span class="cx"> #if ENABLE(BRANCH_COMPACTION)
</span><span class="cx">         m_shouldPerformBranchCompaction = shouldPerformBranchCompaction;
</span><span class="lines">@@ -342,11 +342,11 @@
</span><span class="cx">     bool m_shouldPerformBranchCompaction { true };
</span><span class="cx"> #endif
</span><span class="cx">     bool m_didAllocate;
</span><del>-    MacroAssemblerCodePtr<LinkBufferPtrTag> m_code;
</del><span class="cx"> #ifndef NDEBUG
</span><span class="cx">     bool m_completed;
</span><span class="cx"> #endif
</span><span class="cx">     bool m_alreadyDisassembled { false };
</span><ins>+    MacroAssemblerCodePtr<LinkBufferPtrTag> m_code;
</ins><span class="cx">     Vector<RefPtr<SharedTask<void(LinkBuffer&)>>> m_linkTasks;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGArrayifySlowPathGeneratorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h   2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h      2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -43,8 +43,8 @@
</span><span class="cx">         GPRReg propertyGPR, GPRReg tempGPR, GPRReg structureGPR)
</span><span class="cx">         : JumpingSlowPathGenerator<MacroAssembler::JumpList>(from, jit)
</span><span class="cx">         , m_op(node->op())
</span><ins>+        , m_structure(node->op() == ArrayifyToStructure ? node->structure() : RegisteredStructure())
</ins><span class="cx">         , m_arrayMode(node->arrayMode())
</span><del>-        , m_structure(node->op() == ArrayifyToStructure ? node->structure() : RegisteredStructure())
</del><span class="cx">         , m_baseGPR(baseGPR)
</span><span class="cx">         , m_propertyGPR(propertyGPR)
</span><span class="cx">         , m_tempGPR(tempGPR)
</span><span class="lines">@@ -134,8 +134,8 @@
</span><span class="cx">     
</span><span class="cx"> private:
</span><span class="cx">     NodeType m_op;
</span><ins>+    RegisteredStructure m_structure;
</ins><span class="cx">     ArrayMode m_arrayMode;
</span><del>-    RegisteredStructure m_structure;
</del><span class="cx">     GPRReg m_baseGPR;
</span><span class="cx">     GPRReg m_propertyGPR;
</span><span class="cx">     GPRReg m_tempGPR;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGCallArrayAllocatorSlowPathGeneratorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h 2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/dfg/DFGCallArrayAllocatorSlowPathGenerator.h    2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -42,8 +42,8 @@
</span><span class="cx">         , m_function(function)
</span><span class="cx">         , m_resultGPR(resultGPR)
</span><span class="cx">         , m_storageGPR(storageGPR)
</span><ins>+        , m_size(size)
</ins><span class="cx">         , m_structure(structure)
</span><del>-        , m_size(size)
</del><span class="cx">     {
</span><span class="cx">         ASSERT(size < static_cast<size_t>(std::numeric_limits<int32_t>::max()));
</span><span class="cx">         jit->silentSpillAllRegistersImpl(false, m_plans, resultGPR);
</span><span class="lines">@@ -67,8 +67,8 @@
</span><span class="cx">     P_JITOperation_EStZB m_function;
</span><span class="cx">     GPRReg m_resultGPR;
</span><span class="cx">     GPRReg m_storageGPR;
</span><ins>+    int m_size;
</ins><span class="cx">     RegisteredStructure m_structure;
</span><del>-    int m_size;
</del><span class="cx">     Vector<SilentRegisterSavePlan, 2> m_plans;
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -79,9 +79,9 @@
</span><span class="cx">         GPRReg resultGPR, RegisteredStructure contiguousStructure, RegisteredStructure arrayStorageStructure, GPRReg sizeGPR, GPRReg storageGPR)
</span><span class="cx">         : JumpingSlowPathGenerator<MacroAssembler::JumpList>(from, jit)
</span><span class="cx">         , m_function(function)
</span><del>-        , m_resultGPR(resultGPR)
</del><span class="cx">         , m_contiguousStructure(contiguousStructure)
</span><span class="cx">         , m_arrayStorageOrContiguousStructure(arrayStorageStructure)
</span><ins>+        , m_resultGPR(resultGPR)
</ins><span class="cx">         , m_sizeGPR(sizeGPR)
</span><span class="cx">         , m_storageGPR(storageGPR)
</span><span class="cx">     {
</span><span class="lines">@@ -113,9 +113,9 @@
</span><span class="cx">     
</span><span class="cx"> private:
</span><span class="cx">     P_JITOperation_EStZB m_function;
</span><del>-    GPRReg m_resultGPR;
</del><span class="cx">     RegisteredStructure m_contiguousStructure;
</span><span class="cx">     RegisteredStructure m_arrayStorageOrContiguousStructure;
</span><ins>+    GPRReg m_resultGPR;
</ins><span class="cx">     GPRReg m_sizeGPR;
</span><span class="cx">     GPRReg m_storageGPR;
</span><span class="cx">     Vector<SilentRegisterSavePlan, 2> m_plans;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGGraphh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGGraph.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGGraph.h       2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/dfg/DFGGraph.h  2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -1022,16 +1022,6 @@
</span><span class="cx">     // So argumentFormats[0] are the argument formats for the normal call entrypoint.
</span><span class="cx">     Vector<Vector<FlushFormat>> m_argumentFormats;
</span><span class="cx"> 
</span><del>-    // This maps an entrypoint index to a particular op_catch bytecode offset. By convention,
-    // it'll never have zero as a key because we use zero to mean the op_enter entrypoint.
-    HashMap<unsigned, unsigned> m_entrypointIndexToCatchBytecodeOffset;
-
-    // This is the number of logical entrypoints that we're compiling. This is only used
-    // in SSA. Each EntrySwitch node must have m_numberOfEntrypoints cases. Note, this is
-    // not the same as m_roots.size(). m_roots.size() represents the number of roots in
-    // the CFG. In SSA, m_roots.size() == 1 even if we're compiling more than one entrypoint.
-    unsigned m_numberOfEntrypoints { UINT_MAX };
-
</del><span class="cx">     SegmentedVector<VariableAccessData, 16> m_variableAccessData;
</span><span class="cx">     SegmentedVector<ArgumentPosition, 8> m_argumentPositions;
</span><span class="cx">     Bag<Transition> m_transitions;
</span><span class="lines">@@ -1064,7 +1054,17 @@
</span><span class="cx">     unsigned m_localVars;
</span><span class="cx">     unsigned m_nextMachineLocal;
</span><span class="cx">     unsigned m_parameterSlots;
</span><del>-    
</del><ins>+
+    // This is the number of logical entrypoints that we're compiling. This is only used
+    // in SSA. Each EntrySwitch node must have m_numberOfEntrypoints cases. Note, this is
+    // not the same as m_roots.size(). m_roots.size() represents the number of roots in
+    // the CFG. In SSA, m_roots.size() == 1 even if we're compiling more than one entrypoint.
+    unsigned m_numberOfEntrypoints { UINT_MAX };
+
+    // This maps an entrypoint index to a particular op_catch bytecode offset. By convention,
+    // it'll never have zero as a key because we use zero to mean the op_enter entrypoint.
+    HashMap<unsigned, unsigned> m_entrypointIndexToCatchBytecodeOffset;
+
</ins><span class="cx">     HashSet<String> m_localStrings;
</span><span class="cx">     HashMap<const StringImpl*, String> m_copiedStrings;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGNode.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGNode.h        2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/dfg/DFGNode.h   2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -213,8 +213,8 @@
</span><span class="cx">     // constructing this should make sure to initialize everything they
</span><span class="cx">     // care about manually.
</span><span class="cx">     SwitchData()
</span><del>-        : kind(static_cast<SwitchKind>(-1))
-        , switchTableIndex(UINT_MAX)
</del><ins>+        : switchTableIndex(UINT_MAX)
+        , kind(static_cast<SwitchKind>(-1))
</ins><span class="cx">         , didUseJumpTable(false)
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="lines">@@ -221,8 +221,8 @@
</span><span class="cx">     
</span><span class="cx">     Vector<SwitchCase> cases;
</span><span class="cx">     BranchTarget fallThrough;
</span><ins>+    size_t switchTableIndex;
</ins><span class="cx">     SwitchKind kind;
</span><del>-    size_t switchTableIndex;
</del><span class="cx">     bool didUseJumpTable;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGPlancpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp      2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp 2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -136,12 +136,12 @@
</span><span class="cx"> Plan::Plan(CodeBlock* passedCodeBlock, CodeBlock* profiledDFGCodeBlock,
</span><span class="cx">     CompilationMode mode, unsigned osrEntryBytecodeIndex,
</span><span class="cx">     const Operands<Optional<JSValue>>& mustHandleValues)
</span><del>-    : m_vm(passedCodeBlock->vm())
</del><ins>+    : m_mode(mode)
+    , m_vm(passedCodeBlock->vm())
</ins><span class="cx">     , m_codeBlock(passedCodeBlock)
</span><span class="cx">     , m_profiledDFGCodeBlock(profiledDFGCodeBlock)
</span><del>-    , m_mode(mode)
</del><ins>+    , m_mustHandleValues(mustHandleValues)
</ins><span class="cx">     , m_osrEntryBytecodeIndex(osrEntryBytecodeIndex)
</span><del>-    , m_mustHandleValues(mustHandleValues)
</del><span class="cx">     , m_compilation(UNLIKELY(m_vm->m_perBytecodeProfiler) ? adoptRef(new Profiler::Compilation(m_vm->m_perBytecodeProfiler->ensureBytecodesFor(m_codeBlock), profilerCompilationKindForMode(mode))) : nullptr)
</span><span class="cx">     , m_inlineCallFrames(adoptRef(new InlineCallFrameSet()))
</span><span class="cx">     , m_identifiers(m_codeBlock)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGPlanh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGPlan.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGPlan.h        2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/dfg/DFGPlan.h   2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -129,6 +129,8 @@
</span><span class="cx">     // Warning: pretty much all of the pointer fields in this object get nulled by cancel(). So, if
</span><span class="cx">     // you're writing code that is callable on the cancel path, be sure to null check everything!
</span><span class="cx"> 
</span><ins>+    CompilationMode m_mode;
+
</ins><span class="cx">     VM* m_vm;
</span><span class="cx"> 
</span><span class="cx">     // These can be raw pointers because we visit them during every GC in checkLivenessAndVisitChildren.
</span><span class="lines">@@ -135,12 +137,14 @@
</span><span class="cx">     CodeBlock* m_codeBlock;
</span><span class="cx">     CodeBlock* m_profiledDFGCodeBlock;
</span><span class="cx"> 
</span><del>-    CompilationMode m_mode;
-    const unsigned m_osrEntryBytecodeIndex;
</del><span class="cx">     Operands<Optional<JSValue>> m_mustHandleValues;
</span><span class="cx">     bool m_mustHandleValuesMayIncludeGarbage { true };
</span><span class="cx">     Lock m_mustHandleValueCleaningLock;
</span><span class="cx"> 
</span><ins>+    bool m_willTryToTierUp { false };
+
+    const unsigned m_osrEntryBytecodeIndex;
+
</ins><span class="cx">     ThreadData* m_threadData;
</span><span class="cx"> 
</span><span class="cx">     RefPtr<Profiler::Compilation> m_compilation;
</span><span class="lines">@@ -155,8 +159,6 @@
</span><span class="cx">     DesiredGlobalProperties m_globalProperties;
</span><span class="cx">     RecordedStatuses m_recordedStatuses;
</span><span class="cx"> 
</span><del>-    bool m_willTryToTierUp { false };
-
</del><span class="cx">     HashMap<unsigned, Vector<unsigned>> m_tierUpInLoopHierarchy;
</span><span class="cx">     Vector<unsigned> m_tierUpAndOSREnterBytecodes;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSlowPathGeneratorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h   2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/dfg/DFGSlowPathGenerator.h      2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -66,8 +66,8 @@
</span><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="cx">     virtual void generateInternal(SpeculativeJIT*) = 0;
</span><ins>+    Node* m_currentNode;
</ins><span class="cx">     MacroAssembler::Label m_label;
</span><del>-    Node* m_currentNode;
</del><span class="cx">     unsigned m_streamIndex;
</span><span class="cx">     NodeOrigin m_origin;
</span><span class="cx"> };
</span><span class="lines">@@ -97,7 +97,7 @@
</span><span class="cx">     MacroAssembler::Label m_to;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-enum class ExceptionCheckRequirement {
</del><ins>+enum class ExceptionCheckRequirement : uint8_t {
</ins><span class="cx">     CheckNeeded,
</span><span class="cx">     CheckNotNeeded
</span><span class="cx"> };
</span><span class="lines">@@ -109,10 +109,10 @@
</span><span class="cx">         JumpType from, SpeculativeJIT* jit, FunctionType function,
</span><span class="cx">         SpillRegistersMode spillMode, ExceptionCheckRequirement requirement, ResultType result)
</span><span class="cx">         : JumpingSlowPathGenerator<JumpType>(from, jit)
</span><del>-        , m_function(function)
</del><span class="cx">         , m_spillMode(spillMode)
</span><span class="cx">         , m_exceptionCheckRequirement(requirement)
</span><span class="cx">         , m_result(result)
</span><ins>+        , m_function(function)
</ins><span class="cx">     {
</span><span class="cx">         if (m_spillMode == NeedToSpill)
</span><span class="cx">             jit->silentSpillAllRegistersImpl(false, m_plans, extractResult(result));
</span><span class="lines">@@ -149,11 +149,11 @@
</span><span class="cx">         this->jumpTo(jit);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    FunctionType m_function;
</del><ins>+    MacroAssembler::Call m_call;
</ins><span class="cx">     SpillRegistersMode m_spillMode;
</span><span class="cx">     ExceptionCheckRequirement m_exceptionCheckRequirement;
</span><span class="cx">     ResultType m_result;
</span><del>-    MacroAssembler::Call m_call;
</del><ins>+    FunctionType m_function;
</ins><span class="cx">     Vector<SilentRegisterSavePlan, 2> m_plans;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp    2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp       2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -71,13 +71,13 @@
</span><span class="cx"> namespace JSC { namespace DFG {
</span><span class="cx"> 
</span><span class="cx"> SpeculativeJIT::SpeculativeJIT(JITCompiler& jit)
</span><del>-    : m_compileOkay(true)
-    , m_jit(jit)
</del><ins>+    : m_jit(jit)
</ins><span class="cx">     , m_graph(m_jit.graph())
</span><span class="cx">     , m_currentNode(0)
</span><span class="cx">     , m_lastGeneratedNode(LastNodeType)
</span><span class="cx">     , m_indexInBlock(0)
</span><span class="cx">     , m_generationInfo(m_jit.graph().frameRegisterCount())
</span><ins>+    , m_compileOkay(true)
</ins><span class="cx">     , m_state(m_jit.graph())
</span><span class="cx">     , m_interpreter(m_jit.graph(), m_state)
</span><span class="cx">     , m_stream(&jit.jitCode()->variableEventStream)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJITh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h      2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h 2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -1652,12 +1652,6 @@
</span><span class="cx">     
</span><span class="cx">     void cageTypedArrayStorage(GPRReg);
</span><span class="cx">     
</span><del>-    // It is possible, during speculative generation, to reach a situation in which we
-    // can statically determine a speculation will fail (for example, when two nodes
-    // will make conflicting speculations about the same operand). In such cases this
-    // flag is cleared, indicating no further code generation should take place.
-    bool m_compileOkay;
-    
</del><span class="cx">     void recordSetLocal(
</span><span class="cx">         VirtualRegister bytecodeReg, VirtualRegister machineReg, DataFormat format)
</span><span class="cx">     {
</span><span class="lines">@@ -1700,6 +1694,12 @@
</span><span class="cx">     RegisterBank<GPRInfo> m_gprs;
</span><span class="cx">     RegisterBank<FPRInfo> m_fprs;
</span><span class="cx"> 
</span><ins>+    // It is possible, during speculative generation, to reach a situation in which we
+    // can statically determine a speculation will fail (for example, when two nodes
+    // will make conflicting speculations about the same operand). In such cases this
+    // flag is cleared, indicating no further code generation should take place.
+    bool m_compileOkay;
+
</ins><span class="cx">     Vector<MacroAssembler::Label> m_osrEntryHeads;
</span><span class="cx">     
</span><span class="cx">     struct BranchRecord {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredomjitDOMJITSignatureh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/domjit/DOMJITSignature.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/domjit/DOMJITSignature.h     2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/domjit/DOMJITSignature.h        2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -43,19 +43,19 @@
</span><span class="cx">     constexpr Signature(uintptr_t unsafeFunction, const ClassInfo* classInfo, Effect effect, SpeculatedType result, Arguments... arguments)
</span><span class="cx">         : unsafeFunction(unsafeFunction)
</span><span class="cx">         , classInfo(classInfo)
</span><del>-        , effect(effect)
</del><span class="cx">         , result(result)
</span><span class="cx">         , arguments {static_cast<SpeculatedType>(arguments)...}
</span><span class="cx">         , argumentCount(sizeof...(Arguments))
</span><ins>+        , effect(effect)
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     uintptr_t unsafeFunction;
</span><span class="cx">     const ClassInfo* const classInfo;
</span><del>-    const Effect effect;
</del><span class="cx">     const SpeculatedType result;
</span><span class="cx">     const SpeculatedType arguments[JSC_DOMJIT_SIGNATURE_MAX_ARGUMENTS];
</span><span class="cx">     const unsigned argumentCount;
</span><ins>+    const Effect effect;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapMarkingConstraintSolverh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/MarkingConstraintSolver.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/MarkingConstraintSolver.h       2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/heap/MarkingConstraintSolver.h  2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -97,8 +97,8 @@
</span><span class="cx">     Vector<unsigned, 32> m_toExecuteSequentially;
</span><span class="cx">     Lock m_lock;
</span><span class="cx">     Condition m_condition;
</span><ins>+    bool m_pickNextIsStillActive { true };
</ins><span class="cx">     unsigned m_numThreadsThatMayProduceWork { 0 };
</span><del>-    bool m_pickNextIsStillActive { true };
</del><span class="cx">     Vector<VisitCounter, 16> m_visitCounters;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreheapSlotVisitorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/heap/SlotVisitor.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/heap/SlotVisitor.h   2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/heap/SlotVisitor.h      2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -234,7 +234,6 @@
</span><span class="cx"> 
</span><span class="cx">     MarkStackArray m_collectorStack;
</span><span class="cx">     MarkStackArray m_mutatorStack;
</span><del>-    bool m_ignoreNewOpaqueRoots { false }; // Useful as a debugging mode.
</del><span class="cx">     
</span><span class="cx">     size_t m_bytesVisited;
</span><span class="cx">     size_t m_visitCount;
</span><span class="lines">@@ -241,6 +240,7 @@
</span><span class="cx">     size_t m_nonCellVisitCount { 0 }; // Used for incremental draining, ignored otherwise.
</span><span class="cx">     Checked<size_t, RecordOverflow> m_extraMemorySize { 0 };
</span><span class="cx">     bool m_isInParallelMode;
</span><ins>+    bool m_ignoreNewOpaqueRoots { false }; // Useful as a debugging mode.
</ins><span class="cx"> 
</span><span class="cx">     HeapVersion m_markingVersion;
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitCallFrameShuffleDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/CallFrameShuffleData.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/CallFrameShuffleData.h   2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/jit/CallFrameShuffleData.h      2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -35,9 +35,9 @@
</span><span class="cx"> struct CallFrameShuffleData {
</span><span class="cx">     WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> public:
</span><del>-    unsigned numLocals { UINT_MAX };
</del><span class="cx">     ValueRecovery callee;
</span><span class="cx">     Vector<ValueRecovery> args;
</span><ins>+    unsigned numLocals { UINT_MAX };
</ins><span class="cx">     unsigned numPassedArgs { UINT_MAX };
</span><span class="cx"> #if USE(JSVALUE64)
</span><span class="cx">     RegisterMap<ValueRecovery> registers;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITDivGeneratorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITDivGenerator.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITDivGenerator.h        2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/jit/JITDivGenerator.h   2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -70,8 +70,8 @@
</span><span class="cx">     FPRReg m_rightFPR;
</span><span class="cx">     GPRReg m_scratchGPR;
</span><span class="cx">     FPRReg m_scratchFPR;
</span><ins>+    bool m_didEmitFastPath { false };
</ins><span class="cx">     ArithProfile* m_arithProfile;
</span><del>-    bool m_didEmitFastPath { false };
</del><span class="cx"> 
</span><span class="cx">     CCallHelpers::JumpList m_endJumpList;
</span><span class="cx">     CCallHelpers::JumpList m_slowPathJumpList;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitSpillRegistersModeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/SpillRegistersMode.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/SpillRegistersMode.h     2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/jit/SpillRegistersMode.h        2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -27,6 +27,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><del>-enum SpillRegistersMode { NeedToSpill, DontSpill };
</del><ins>+enum SpillRegistersMode : uint8_t { NeedToSpill, DontSpill };
</ins><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserNodesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Nodes.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Nodes.h       2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/parser/Nodes.h  2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -2039,10 +2039,10 @@
</span><span class="cx">         unsigned m_constructorKind : 2;
</span><span class="cx">         unsigned m_isArrowFunctionBodyExpression : 1;
</span><span class="cx">         SourceParseMode m_parseMode;
</span><ins>+        FunctionMode m_functionMode;
</ins><span class="cx">         Identifier m_ident;
</span><span class="cx">         Identifier m_ecmaName;
</span><span class="cx">         Identifier m_inferredName;
</span><del>-        FunctionMode m_functionMode;
</del><span class="cx">         unsigned m_startColumn;
</span><span class="cx">         unsigned m_endColumn;
</span><span class="cx">         int m_functionKeywordStart;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreprofilerProfilerOSRExitcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/profiler/ProfilerOSRExit.cpp (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/profiler/ProfilerOSRExit.cpp 2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/profiler/ProfilerOSRExit.cpp    2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -33,8 +33,8 @@
</span><span class="cx"> namespace JSC { namespace Profiler {
</span><span class="cx"> 
</span><span class="cx"> OSRExit::OSRExit(unsigned id, const OriginStack& origin, ExitKind kind, bool isWatchpoint)
</span><del>-    : m_id(id)
-    , m_origin(origin)
</del><ins>+    : m_origin(origin)
+    , m_id(id)
</ins><span class="cx">     , m_exitKind(kind)
</span><span class="cx">     , m_isWatchpoint(isWatchpoint)
</span><span class="cx">     , m_counter(0)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreprofilerProfilerOSRExith"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/profiler/ProfilerOSRExit.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/profiler/ProfilerOSRExit.h   2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/profiler/ProfilerOSRExit.h      2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -48,8 +48,8 @@
</span><span class="cx">     JSValue toJS(ExecState*) const;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><ins>+    OriginStack m_origin;
</ins><span class="cx">     unsigned m_id;
</span><del>-    OriginStack m_origin;
</del><span class="cx">     ExitKind m_exitKind;
</span><span class="cx">     bool m_isWatchpoint;
</span><span class="cx">     uint64_t m_counter;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeArrayBufferViewh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ArrayBufferView.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ArrayBufferView.h    2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/runtime/ArrayBufferView.h       2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -148,12 +148,12 @@
</span><span class="cx">         *numElements = std::min(remainingElements, *numElements);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    unsigned m_byteOffset : 31;
+    bool m_isNeuterable : 1;
+
</ins><span class="cx">     // This is the address of the ArrayBuffer's storage, plus the byte offset.
</span><span class="cx">     CagedPtr<Gigacage::Primitive, void> m_baseAddress;
</span><span class="cx"> 
</span><del>-    unsigned m_byteOffset : 31;
-    bool m_isNeuterable : 1;
-
</del><span class="cx"> private:
</span><span class="cx">     friend class ArrayBuffer;
</span><span class="cx">     RefPtr<ArrayBuffer> m_buffer;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeSamplingProfilercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp 2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/runtime/SamplingProfiler.cpp    2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -277,12 +277,12 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> SamplingProfiler::SamplingProfiler(VM& vm, RefPtr<Stopwatch>&& stopwatch)
</span><del>-    : m_vm(vm)
</del><ins>+    : m_isPaused(false)
+    , m_isShutDown(false)
+    , m_vm(vm)
</ins><span class="cx">     , m_weakRandom()
</span><span class="cx">     , m_stopwatch(WTFMove(stopwatch))
</span><span class="cx">     , m_timingInterval(Seconds::fromMicroseconds(Options::sampleInterval()))
</span><del>-    , m_isPaused(false)
-    , m_isShutDown(false)
</del><span class="cx"> {
</span><span class="cx">     if (sReportStats) {
</span><span class="cx">         sNumTotalWalks = 0;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeSamplingProfilerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/SamplingProfiler.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/SamplingProfiler.h   2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/runtime/SamplingProfiler.h      2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -191,6 +191,10 @@
</span><span class="cx">     void timerLoop();
</span><span class="cx">     void takeSample(const AbstractLocker&, Seconds& stackTraceProcessingTime);
</span><span class="cx"> 
</span><ins>+    Lock m_lock;
+    bool m_isPaused;
+    bool m_isShutDown;
+    bool m_needsReportAtExit { false };
</ins><span class="cx">     VM& m_vm;
</span><span class="cx">     WeakRandom m_weakRandom;
</span><span class="cx">     RefPtr<Stopwatch> m_stopwatch;
</span><span class="lines">@@ -198,12 +202,8 @@
</span><span class="cx">     Vector<UnprocessedStackTrace> m_unprocessedStackTraces;
</span><span class="cx">     Seconds m_timingInterval;
</span><span class="cx">     Seconds m_lastTime;
</span><del>-    Lock m_lock;
</del><span class="cx">     RefPtr<Thread> m_thread;
</span><span class="cx">     RefPtr<Thread> m_jscExecutionThread;
</span><del>-    bool m_isPaused;
-    bool m_isShutDown;
-    bool m_needsReportAtExit { false };
</del><span class="cx">     HashSet<JSCell*> m_liveCellPointers;
</span><span class="cx">     Vector<UnprocessedStackFrame> m_currentFrames;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeTypeSetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/TypeSet.cpp (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/TypeSet.cpp  2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/runtime/TypeSet.cpp     2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -319,10 +319,10 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> StructureShape::StructureShape()
</span><del>-    : m_proto(nullptr)
</del><ins>+    : m_final(false)
+    , m_isInDictionaryMode(false)
+    , m_proto(nullptr)
</ins><span class="cx">     , m_propertyHash(nullptr)
</span><del>-    , m_final(false)
-    , m_isInDictionaryMode(false)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeTypeSeth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/TypeSet.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/TypeSet.h    2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/runtime/TypeSet.h       2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -71,13 +71,13 @@
</span><span class="cx">     static Ref<StructureShape> merge(Ref<StructureShape>&&, Ref<StructureShape>&&);
</span><span class="cx">     bool hasSamePrototypeChain(const StructureShape&);
</span><span class="cx"> 
</span><ins>+    bool m_final;
+    bool m_isInDictionaryMode;
</ins><span class="cx">     HashSet<RefPtr<UniquedStringImpl>, IdentifierRepHash> m_fields;
</span><span class="cx">     HashSet<RefPtr<UniquedStringImpl>, IdentifierRepHash> m_optionalFields;
</span><span class="cx">     RefPtr<StructureShape> m_proto;
</span><span class="cx">     std::unique_ptr<String> m_propertyHash;
</span><span class="cx">     String m_constructorName;
</span><del>-    bool m_final;
-    bool m_isInDictionaryMode;
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> class TypeSet : public ThreadSafeRefCounted<TypeSet> {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeWatchdogh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Watchdog.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Watchdog.h   2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/JavaScriptCore/runtime/Watchdog.h      2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -59,6 +59,8 @@
</span><span class="cx">     void startTimer(Seconds timeLimit);
</span><span class="cx">     void stopTimer();
</span><span class="cx"> 
</span><ins>+    bool m_hasEnteredVM { false };
+
</ins><span class="cx">     Lock m_lock; // Guards access to m_vm.
</span><span class="cx">     VM* m_vm;
</span><span class="cx"> 
</span><span class="lines">@@ -67,8 +69,6 @@
</span><span class="cx">     Seconds m_cpuDeadline;
</span><span class="cx">     MonotonicTime m_deadline;
</span><span class="cx"> 
</span><del>-    bool m_hasEnteredVM { false };
-
</del><span class="cx">     ShouldTerminateCallback m_callback;
</span><span class="cx">     void* m_callbackData1;
</span><span class="cx">     void* m_callbackData2;
</span></span></pre></div>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog       2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/WTF/ChangeLog  2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2019-03-12  Robin Morisset  <rmorisset@apple.com>
+
+        A lot more classes have padding that can be reduced by reordering their fields
+        https://bugs.webkit.org/show_bug.cgi?id=195579
+
+        Reviewed by Mark Lam.
+
+        * wtf/CrossThreadQueue.h:
+        * wtf/Logger.h:
+        * wtf/MemoryPressureHandler.h:
+        * wtf/MetaAllocator.h:
+        * wtf/Threading.cpp:
+
</ins><span class="cx"> 2019-03-11  Alex Christensen  <achristensen@webkit.org>
</span><span class="cx"> 
</span><span class="cx">         WTF::Expected should use std::addressof instead of operator&
</span></span></pre></div>
<a id="trunkSourceWTFwtfCrossThreadQueueh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/CrossThreadQueue.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/CrossThreadQueue.h  2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/WTF/wtf/CrossThreadQueue.h     2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -51,9 +51,9 @@
</span><span class="cx">     bool isEmpty() const;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><ins>+    Deque<DataType> m_queue;
</ins><span class="cx">     mutable Lock m_lock;
</span><span class="cx">     Condition m_condition;
</span><del>-    Deque<DataType> m_queue;
</del><span class="cx">     bool m_killed { false };
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWTFwtfLoggerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/Logger.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/Logger.h    2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/WTF/wtf/Logger.h       2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -252,8 +252,8 @@
</span><span class="cx">         return observers;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    bool m_enabled { true };
</ins><span class="cx">     const void* m_owner;
</span><del>-    bool m_enabled { true };
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template<> struct LogArgument<Logger::LogSiteIdentifier> {
</span></span></pre></div>
<a id="trunkSourceWTFwtfMemoryPressureHandlerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/MemoryPressureHandler.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/MemoryPressureHandler.h     2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/WTF/wtf/MemoryPressureHandler.h        2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -181,12 +181,13 @@
</span><span class="cx"> 
</span><span class="cx">     unsigned m_pageCount { 0 };
</span><span class="cx"> 
</span><del>-    bool m_installed { false };
</del><span class="cx">     LowMemoryHandler m_lowMemoryHandler;
</span><span class="cx"> 
</span><span class="cx">     std::atomic<bool> m_underMemoryPressure;
</span><ins>+    bool m_installed { false };
</ins><span class="cx">     bool m_isSimulatingMemoryPressure { false };
</span><span class="cx">     bool m_shouldLogMemoryMemoryPressureEvents { true };
</span><ins>+    bool m_hasInvokedDidExceedInactiveLimitWhileActiveCallback { false };
</ins><span class="cx"> 
</span><span class="cx">     std::unique_ptr<RunLoop::Timer<MemoryPressureHandler>> m_measurementTimer;
</span><span class="cx">     MemoryUsagePolicy m_memoryUsagePolicy { MemoryUsagePolicy::Unrestricted };
</span><span class="lines">@@ -193,7 +194,6 @@
</span><span class="cx">     WTF::Function<void()> m_memoryKillCallback;
</span><span class="cx">     WTF::Function<void(bool)> m_memoryPressureStatusChangedCallback;
</span><span class="cx">     WTF::Function<void()> m_didExceedInactiveLimitWhileActiveCallback;
</span><del>-    bool m_hasInvokedDidExceedInactiveLimitWhileActiveCallback { false };
</del><span class="cx"> 
</span><span class="cx"> #if OS(WINDOWS)
</span><span class="cx">     void windowsMeasurementTimerFired();
</span></span></pre></div>
<a id="trunkSourceWTFwtfMetaAllocatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/MetaAllocator.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/MetaAllocator.h     2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/WTF/wtf/MetaAllocator.h        2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -179,8 +179,8 @@
</span><span class="cx">     WTF_EXPORT_PRIVATE void freeFreeSpaceNode(FreeSpaceNode*);
</span><span class="cx">     
</span><span class="cx">     size_t m_allocationGranule;
</span><ins>+    size_t m_pageSize;
</ins><span class="cx">     unsigned m_logAllocationGranule;
</span><del>-    size_t m_pageSize;
</del><span class="cx">     unsigned m_logPageSize;
</span><span class="cx">     
</span><span class="cx">     Tree m_freeSpaceSizeMap;
</span></span></pre></div>
<a id="trunkSourceWTFwtfThreadingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/Threading.cpp (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/Threading.cpp       2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/WTF/wtf/Threading.cpp  2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -54,12 +54,12 @@
</span><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    enum class Stage { Start, EstablishedHandle, Initialized };
+    Stage stage { Stage::Start };
</ins><span class="cx">     const char* name;
</span><span class="cx">     Function<void()> entryPoint;
</span><span class="cx">     Ref<Thread> thread;
</span><span class="cx">     Mutex mutex;
</span><del>-    enum class Stage { Start, EstablishedHandle, Initialized };
-    Stage stage { Stage::Start };
</del><span class="cx"> 
</span><span class="cx"> #if !HAVE(STACK_BOUNDS_FOR_NEW_THREAD)
</span><span class="cx">     ThreadCondition condition;
</span></span></pre></div>
<a id="trunkSourcebmallocChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/bmalloc/ChangeLog (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/bmalloc/ChangeLog   2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/bmalloc/ChangeLog      2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2019-03-12  Robin Morisset  <rmorisset@apple.com>
+
+        A lot more classes have padding that can be reduced by reordering their fields
+        https://bugs.webkit.org/show_bug.cgi?id=195579
+
+        Reviewed by Mark Lam.
+
+        * bmalloc/Heap.h:
+        * bmalloc/Scavenger.h:
+
</ins><span class="cx"> 2019-03-05  Yusuke Suzuki  <ysuzuki@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [bmalloc] Bmalloc DebugHeap should have dump and scavenge features
</span></span></pre></div>
<a id="trunkSourcebmallocbmallocHeaph"></a>
<div class="modfile"><h4>Modified: trunk/Source/bmalloc/bmalloc/Heap.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/bmalloc/bmalloc/Heap.h      2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/bmalloc/bmalloc/Heap.h 2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -128,7 +128,10 @@
</span><span class="cx">     LargeRange splitAndAllocate(std::unique_lock<Mutex>&, LargeRange&, size_t alignment, size_t);
</span><span class="cx"> 
</span><span class="cx">     HeapKind m_kind;
</span><del>-    
</del><ins>+
+    bool m_hasPendingDecommits { false };
+    std::condition_variable_any m_condition;
+
</ins><span class="cx">     size_t m_vmPageSizePhysical;
</span><span class="cx">     Vector<LineMetadata> m_smallLineMetadata;
</span><span class="cx">     std::array<size_t, sizeClassCount> m_pageClasses;
</span><span class="lines">@@ -147,9 +150,6 @@
</span><span class="cx">     size_t m_footprint { 0 };
</span><span class="cx">     size_t m_freeableMemory { 0 };
</span><span class="cx"> 
</span><del>-    bool m_hasPendingDecommits { false };
-    std::condition_variable_any m_condition;
-
</del><span class="cx"> #if ENABLE_PHYSICAL_PAGE_MAP 
</span><span class="cx">     PhysicalPageMap m_physicalPageMap;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourcebmallocbmallocScavengerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/bmalloc/bmalloc/Scavenger.h (242811 => 242812)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/bmalloc/bmalloc/Scavenger.h 2019-03-12 19:03:01 UTC (rev 242811)
+++ trunk/Source/bmalloc/bmalloc/Scavenger.h    2019-03-12 19:07:04 UTC (rev 242812)
</span><span class="lines">@@ -95,6 +95,7 @@
</span><span class="cx">     std::atomic<State> m_state { State::Sleep };
</span><span class="cx">     size_t m_scavengerBytes { 0 };
</span><span class="cx">     bool m_isProbablyGrowing { false };
</span><ins>+    bool m_isInMiniMode { false };
</ins><span class="cx">     
</span><span class="cx">     Mutex m_mutex;
</span><span class="cx">     Mutex m_scavengingMutex;
</span><span class="lines">@@ -110,8 +111,6 @@
</span><span class="cx"> #endif
</span><span class="cx">     
</span><span class="cx">     Vector<DeferredDecommit> m_deferredDecommits;
</span><del>-
-    bool m_isInMiniMode { false };
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace bmalloc
</span></span></pre>
</div>
</div>

</body>
</html>