Modified: releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/ChangeLog (198013 => 198014)
--- releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/ChangeLog 2016-03-11 14:14:11 UTC (rev 198013)
+++ releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/ChangeLog 2016-03-11 14:28:31 UTC (rev 198014)
@@ -1,3 +1,31 @@
+2016-02-28 Andreas Kling <[email protected]>
+
+ Shrink UnlinkedCodeBlock a bit.
+ <https://webkit.org/b/154797>
+
+ Reviewed by Anders Carlsson.
+
+ Move profiler-related members of UnlinkedCodeBlock into its RareData
+ structure, saving 40 bytes, and then reorder the other members of
+ UnlinkedCodeBlock to save another 24 bytes, netting a nice total 64.
+
+ The VM member was removed entirely since UnlinkedCodeBlock is a cell
+ and can retrieve its VM through MarkedBlock header lookup.
+
+ * bytecode/UnlinkedCodeBlock.cpp:
+ (JSC::UnlinkedCodeBlock::vm):
+ (JSC::UnlinkedCodeBlock::typeProfilerExpressionInfoForBytecodeOffset):
+ (JSC::UnlinkedCodeBlock::addTypeProfilerExpressionInfo):
+ (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock): Deleted.
+ * bytecode/UnlinkedCodeBlock.h:
+ (JSC::UnlinkedCodeBlock::addRegExp):
+ (JSC::UnlinkedCodeBlock::addConstant):
+ (JSC::UnlinkedCodeBlock::addFunctionDecl):
+ (JSC::UnlinkedCodeBlock::addFunctionExpr):
+ (JSC::UnlinkedCodeBlock::addOpProfileControlFlowBytecodeOffset):
+ (JSC::UnlinkedCodeBlock::opProfileControlFlowBytecodeOffsets):
+ (JSC::UnlinkedCodeBlock::vm): Deleted.
+
2016-03-07 Benjamin Poulain <[email protected]>
[JSC] Remove a useless "Move" from baseline-JIT op_mul's fast path
Modified: releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/bytecode/UnlinkedCodeBlock.cpp (198013 => 198014)
--- releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/bytecode/UnlinkedCodeBlock.cpp 2016-03-11 14:14:11 UTC (rev 198013)
+++ releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/bytecode/UnlinkedCodeBlock.cpp 2016-03-11 14:28:31 UTC (rev 198014)
@@ -56,7 +56,6 @@
, m_numVars(0)
, m_numCalleeLocals(0)
, m_numParameters(0)
- , m_vm(vm)
, m_globalObjectRegister(VirtualRegister())
, m_usesEval(info.usesEval())
, m_isStrictMode(info.isStrictMode())
@@ -85,6 +84,11 @@
ASSERT(m_constructorKind == static_cast<unsigned>(info.constructorKind()));
}
+VM* UnlinkedCodeBlock::vm() const
+{
+ return MarkedBlock::blockFor(this)->vm();
+}
+
void UnlinkedCodeBlock::visitChildren(JSCell* cell, SlotVisitor& visitor)
{
UnlinkedCodeBlock* thisObject = jsCast<UnlinkedCodeBlock*>(cell);
@@ -270,9 +274,10 @@
bool UnlinkedCodeBlock::typeProfilerExpressionInfoForBytecodeOffset(unsigned bytecodeOffset, unsigned& startDivot, unsigned& endDivot)
{
+ ASSERT(m_rareData);
static const bool verbose = false;
- auto iter = m_typeProfilerInfoMap.find(bytecodeOffset);
- if (iter == m_typeProfilerInfoMap.end()) {
+ auto iter = m_rareData->m_typeProfilerInfoMap.find(bytecodeOffset);
+ if (iter == m_rareData->m_typeProfilerInfoMap.end()) {
if (verbose)
dataLogF("Don't have assignment info for offset:%u\n", bytecodeOffset);
startDivot = UINT_MAX;
@@ -280,7 +285,7 @@
return false;
}
- TypeProfilerExpressionRange& range = iter->value;
+ RareData::TypeProfilerExpressionRange& range = iter->value;
startDivot = range.m_startDivot;
endDivot = range.m_endDivot;
return true;
@@ -288,10 +293,11 @@
void UnlinkedCodeBlock::addTypeProfilerExpressionInfo(unsigned instructionOffset, unsigned startDivot, unsigned endDivot)
{
- TypeProfilerExpressionRange range;
+ createRareDataIfNecessary();
+ RareData::TypeProfilerExpressionRange range;
range.m_startDivot = startDivot;
range.m_endDivot = endDivot;
- m_typeProfilerInfoMap.set(instructionOffset, range);
+ m_rareData->m_typeProfilerInfoMap.set(instructionOffset, range);
}
void UnlinkedProgramCodeBlock::visitChildren(JSCell* cell, SlotVisitor& visitor)
Modified: releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/bytecode/UnlinkedCodeBlock.h (198013 => 198014)
--- releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/bytecode/UnlinkedCodeBlock.h 2016-03-11 14:14:11 UTC (rev 198013)
+++ releases/WebKitGTK/webkit-2.12/Source/_javascript_Core/bytecode/UnlinkedCodeBlock.h 2016-03-11 14:28:31 UTC (rev 198014)
@@ -148,7 +148,7 @@
{
createRareDataIfNecessary();
unsigned size = m_rareData->m_regexps.size();
- m_rareData->m_regexps.append(WriteBarrier<RegExp>(*m_vm, this, r));
+ m_rareData->m_regexps.append(WriteBarrier<RegExp>(*vm(), this, r));
return size;
}
unsigned numberOfRegExps() const
@@ -170,7 +170,7 @@
{
unsigned result = m_constantRegisters.size();
m_constantRegisters.append(WriteBarrier<Unknown>());
- m_constantRegisters.last().set(*m_vm, this, v);
+ m_constantRegisters.last().set(*vm(), this, v);
m_constantsSourceCodeRepresentation.append(sourceCodeRepresentation);
return result;
}
@@ -249,7 +249,7 @@
{
unsigned size = m_functionDecls.size();
m_functionDecls.append(WriteBarrier<UnlinkedFunctionExecutable>());
- m_functionDecls.last().set(*m_vm, this, n);
+ m_functionDecls.last().set(*vm(), this, n);
return size;
}
UnlinkedFunctionExecutable* functionDecl(int index) { return m_functionDecls[index].get(); }
@@ -258,7 +258,7 @@
{
unsigned size = m_functionExprs.size();
m_functionExprs.append(WriteBarrier<UnlinkedFunctionExecutable>());
- m_functionExprs.last().set(*m_vm, this, n);
+ m_functionExprs.last().set(*vm(), this, n);
return size;
}
UnlinkedFunctionExecutable* functionExpr(int index) { return m_functionExprs[index].get(); }
@@ -269,7 +269,7 @@
void addExceptionHandler(const UnlinkedHandlerInfo& handler) { createRareDataIfNecessary(); return m_rareData->m_exceptionHandlers.append(handler); }
UnlinkedHandlerInfo& exceptionHandler(int index) { ASSERT(m_rareData); return m_rareData->m_exceptionHandlers[index]; }
- VM* vm() const { return m_vm; }
+ VM* vm() const;
UnlinkedArrayProfile addArrayProfile() { return m_arrayProfileCount++; }
unsigned numberOfArrayProfiles() { return m_arrayProfileCount; }
@@ -345,8 +345,16 @@
ALWAYS_INLINE unsigned startColumn() const { return 0; }
unsigned endColumn() const { return m_endColumn; }
- void addOpProfileControlFlowBytecodeOffset(size_t offset) { m_opProfileControlFlowBytecodeOffsets.append(offset); }
- const Vector<size_t>& opProfileControlFlowBytecodeOffsets() const { return m_opProfileControlFlowBytecodeOffsets; }
+ void addOpProfileControlFlowBytecodeOffset(size_t offset)
+ {
+ createRareDataIfNecessary();
+ m_rareData->m_opProfileControlFlowBytecodeOffsets.append(offset);
+ }
+ const Vector<size_t>& opProfileControlFlowBytecodeOffsets() const
+ {
+ ASSERT(m_rareData);
+ return m_rareData->m_opProfileControlFlowBytecodeOffsets;
+ }
void dumpExpressionRangeInfo(); // For debugging purpose only.
@@ -369,11 +377,10 @@
void getLineAndColumn(ExpressionRangeInfo&, unsigned& line, unsigned& column);
+ int m_numParameters;
+
std::unique_ptr<UnlinkedInstructionStream> m_unlinkedInstructions;
- int m_numParameters;
- VM* m_vm;
-
VirtualRegister m_thisRegister;
VirtualRegister m_scopeRegister;
VirtualRegister m_globalObjectRegister;
@@ -398,17 +405,17 @@
Vector<unsigned> m_jumpTargets;
+ Vector<unsigned> m_propertyAccessInstructions;
+
// Constant Pools
Vector<Identifier> m_identifiers;
Vector<WriteBarrier<Unknown>> m_constantRegisters;
Vector<SourceCodeRepresentation> m_constantsSourceCodeRepresentation;
- std::array<unsigned, LinkTimeConstantCount> m_linkTimeConstants;
typedef Vector<WriteBarrier<UnlinkedFunctionExecutable>> FunctionExpressionVector;
FunctionExpressionVector m_functionDecls;
FunctionExpressionVector m_functionExprs;
+ std::array<unsigned, LinkTimeConstantCount> m_linkTimeConstants;
- Vector<unsigned> m_propertyAccessInstructions;
-
unsigned m_arrayProfileCount;
unsigned m_arrayAllocationProfileCount;
unsigned m_objectAllocationProfileCount;
@@ -432,17 +439,18 @@
Vector<UnlinkedStringJumpTable> m_stringSwitchJumpTables;
Vector<ExpressionRangeInfo::FatPosition> m_expressionInfoFatPositions;
+
+ struct TypeProfilerExpressionRange {
+ unsigned m_startDivot;
+ unsigned m_endDivot;
+ };
+ HashMap<unsigned, TypeProfilerExpressionRange> m_typeProfilerInfoMap;
+ Vector<size_t> m_opProfileControlFlowBytecodeOffsets;
};
private:
std::unique_ptr<RareData> m_rareData;
Vector<ExpressionRangeInfo> m_expressionInfo;
- struct TypeProfilerExpressionRange {
- unsigned m_startDivot;
- unsigned m_endDivot;
- };
- HashMap<unsigned, TypeProfilerExpressionRange> m_typeProfilerInfoMap;
- Vector<size_t> m_opProfileControlFlowBytecodeOffsets;
protected:
static void visitChildren(JSCell*, SlotVisitor&);