- Revision
- 275866
- Author
- [email protected]
- Date
- 2021-04-13 00:35:38 -0700 (Tue, 13 Apr 2021)
Log Message
[JSC] Remove CodeBlock::m_constantsSourceCodeRepresentation
https://bugs.webkit.org/show_bug.cgi?id=224473
Reviewed by Mark Lam.
CodeBlock::m_constantsSourceCodeRepresentation is identical to UnlinkedCodeBlock::m_constantsSourceCodeRepresentation.
1. For all constants existing at bytecode compile time, elements of the above vectors are identical.
2. For lazily added constants from DFG, it is always SourceCodeRepresentation::Other.
And the array is effectively accessed only when compiling DFG code. So we should remove copy of that in CodeBlock, and
get SourceCodeRepresentation from UnlinkedCodeBlock.
* bytecode/BytecodeDumper.cpp:
(JSC::CodeBlockBytecodeDumper<Block>::dumpConstants):
* bytecode/CodeBlock.cpp:
(JSC::CodeBlock::CodeBlock):
(JSC::CodeBlock::setConstantRegisters):
(JSC::CodeBlock::shrinkToFit):
* bytecode/CodeBlock.h:
(JSC::CodeBlock::constants):
(JSC::CodeBlock::addConstant):
(JSC::CodeBlock::addConstantLazily):
(JSC::CodeBlock::constantSourceCodeRepresentation const):
(JSC::CodeBlock::constantsSourceCodeRepresentation): Deleted.
* bytecode/UnlinkedCodeBlock.h:
(JSC::UnlinkedCodeBlock::constantSourceCodeRepresentation const):
* bytecode/UnlinkedCodeBlockGenerator.h:
(JSC::UnlinkedCodeBlockGenerator::constantSourceCodeRepresentation const):
(JSC::UnlinkedCodeBlockGenerator::constantsSourceCodeRepresentation): Deleted.
* dfg/DFGGraph.cpp:
(JSC::DFG::Graph::registerFrozenValues):
Modified Paths
Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (275865 => 275866)
--- trunk/Source/_javascript_Core/ChangeLog 2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/ChangeLog 2021-04-13 07:35:38 UTC (rev 275866)
@@ -1,3 +1,38 @@
+2021-04-12 Yusuke Suzuki <[email protected]>
+
+ [JSC] Remove CodeBlock::m_constantsSourceCodeRepresentation
+ https://bugs.webkit.org/show_bug.cgi?id=224473
+
+ Reviewed by Mark Lam.
+
+ CodeBlock::m_constantsSourceCodeRepresentation is identical to UnlinkedCodeBlock::m_constantsSourceCodeRepresentation.
+
+ 1. For all constants existing at bytecode compile time, elements of the above vectors are identical.
+ 2. For lazily added constants from DFG, it is always SourceCodeRepresentation::Other.
+
+ And the array is effectively accessed only when compiling DFG code. So we should remove copy of that in CodeBlock, and
+ get SourceCodeRepresentation from UnlinkedCodeBlock.
+
+ * bytecode/BytecodeDumper.cpp:
+ (JSC::CodeBlockBytecodeDumper<Block>::dumpConstants):
+ * bytecode/CodeBlock.cpp:
+ (JSC::CodeBlock::CodeBlock):
+ (JSC::CodeBlock::setConstantRegisters):
+ (JSC::CodeBlock::shrinkToFit):
+ * bytecode/CodeBlock.h:
+ (JSC::CodeBlock::constants):
+ (JSC::CodeBlock::addConstant):
+ (JSC::CodeBlock::addConstantLazily):
+ (JSC::CodeBlock::constantSourceCodeRepresentation const):
+ (JSC::CodeBlock::constantsSourceCodeRepresentation): Deleted.
+ * bytecode/UnlinkedCodeBlock.h:
+ (JSC::UnlinkedCodeBlock::constantSourceCodeRepresentation const):
+ * bytecode/UnlinkedCodeBlockGenerator.h:
+ (JSC::UnlinkedCodeBlockGenerator::constantSourceCodeRepresentation const):
+ (JSC::UnlinkedCodeBlockGenerator::constantsSourceCodeRepresentation): Deleted.
+ * dfg/DFGGraph.cpp:
+ (JSC::DFG::Graph::registerFrozenValues):
+
2021-04-12 Mark Lam <[email protected]>
Interpreter::executeProgram() should install its VMEntryScope at the top.
Modified: trunk/Source/_javascript_Core/bytecode/BytecodeDumper.cpp (275865 => 275866)
--- trunk/Source/_javascript_Core/bytecode/BytecodeDumper.cpp 2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/bytecode/BytecodeDumper.cpp 2021-04-13 07:35:38 UTC (rev 275866)
@@ -137,7 +137,7 @@
size_t i = 0;
for (const auto& constant : this->block()->constantRegisters()) {
const char* sourceCodeRepresentationDescription = nullptr;
- switch (this->block()->constantsSourceCodeRepresentation()[i]) {
+ switch (this->block()->constantSourceCodeRepresentation(i)) {
case SourceCodeRepresentation::Double:
sourceCodeRepresentationDescription = ": in source as double";
break;
Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp (275865 => 275866)
--- trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2021-04-13 07:35:38 UTC (rev 275866)
@@ -296,7 +296,6 @@
, m_vm(other.m_vm)
, m_instructionsRawPointer(other.m_instructionsRawPointer)
, m_constantRegisters(other.m_constantRegisters)
- , m_constantsSourceCodeRepresentation(other.m_constantsSourceCodeRepresentation)
, m_functionDecls(other.m_functionDecls)
, m_functionExprs(other.m_functionExprs)
, m_osrExitCounter(0)
@@ -883,12 +882,10 @@
{
ConcurrentJSLocker locker(m_lock);
m_constantRegisters.resizeToFit(count);
- m_constantsSourceCodeRepresentation.resizeToFit(count);
}
for (size_t i = 0; i < count; i++) {
JSValue constant = constants[i].get();
SourceCodeRepresentation representation = constantsSourceCodeRepresentation[i];
- m_constantsSourceCodeRepresentation[i] = representation;
switch (representation) {
case SourceCodeRepresentation::LinkTimeConstant:
constant = globalObject->linkTimeConstant(static_cast<LinkTimeConstant>(constant.asInt32AsAnyInt()));
@@ -2124,7 +2121,6 @@
#else
m_constantRegisters.shrinkToFit();
#endif
- m_constantsSourceCodeRepresentation.shrinkToFit();
if (shrinkMode == ShrinkMode::EarlyShrink) {
if (m_rareData)
Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.h (275865 => 275866)
--- trunk/Source/_javascript_Core/bytecode/CodeBlock.h 2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.h 2021-04-13 07:35:38 UTC (rev 275866)
@@ -572,13 +572,11 @@
#endif
Vector<WriteBarrier<Unknown>>& constants() { return m_constantRegisters; }
- Vector<SourceCodeRepresentation>& constantsSourceCodeRepresentation() { return m_constantsSourceCodeRepresentation; }
unsigned addConstant(const ConcurrentJSLocker&, JSValue v)
{
unsigned result = m_constantRegisters.size();
m_constantRegisters.append(WriteBarrier<Unknown>());
m_constantRegisters.last().set(*m_vm, this, v);
- m_constantsSourceCodeRepresentation.append(SourceCodeRepresentation::Other);
return result;
}
@@ -586,7 +584,6 @@
{
unsigned result = m_constantRegisters.size();
m_constantRegisters.append(WriteBarrier<Unknown>());
- m_constantsSourceCodeRepresentation.append(SourceCodeRepresentation::Other);
return result;
}
@@ -593,7 +590,8 @@
const Vector<WriteBarrier<Unknown>>& constantRegisters() { return m_constantRegisters; }
WriteBarrier<Unknown>& constantRegister(VirtualRegister reg) { return m_constantRegisters[reg.toConstantIndex()]; }
ALWAYS_INLINE JSValue getConstant(VirtualRegister reg) const { return m_constantRegisters[reg.toConstantIndex()].get(); }
- ALWAYS_INLINE SourceCodeRepresentation constantSourceCodeRepresentation(VirtualRegister reg) const { return m_constantsSourceCodeRepresentation[reg.toConstantIndex()]; }
+ ALWAYS_INLINE SourceCodeRepresentation constantSourceCodeRepresentation(VirtualRegister reg) const { return m_unlinkedCode->constantSourceCodeRepresentation(reg); }
+ ALWAYS_INLINE SourceCodeRepresentation constantSourceCodeRepresentation(unsigned index) const { return m_unlinkedCode->constantSourceCodeRepresentation(index); }
FunctionExecutable* functionDecl(int index) { return m_functionDecls[index].get(); }
int numberOfFunctionDecls() { return m_functionDecls.size(); }
@@ -1046,7 +1044,6 @@
// TODO: This could just be a pointer to m_unlinkedCodeBlock's data, but the DFG mutates
// it, so we're stuck with it for now.
Vector<WriteBarrier<Unknown>> m_constantRegisters;
- Vector<SourceCodeRepresentation> m_constantsSourceCodeRepresentation;
FixedVector<WriteBarrier<FunctionExecutable>> m_functionDecls;
FixedVector<WriteBarrier<FunctionExecutable>> m_functionExprs;
Modified: trunk/Source/_javascript_Core/bytecode/UnlinkedCodeBlock.h (275865 => 275866)
--- trunk/Source/_javascript_Core/bytecode/UnlinkedCodeBlock.h 2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/bytecode/UnlinkedCodeBlock.h 2021-04-13 07:35:38 UTC (rev 275866)
@@ -161,6 +161,17 @@
ALWAYS_INLINE JSValue getConstant(VirtualRegister reg) const { return m_constantRegisters[reg.toConstantIndex()].get(); }
const FixedVector<SourceCodeRepresentation>& constantsSourceCodeRepresentation() { return m_constantsSourceCodeRepresentation; }
+ SourceCodeRepresentation constantSourceCodeRepresentation(VirtualRegister reg) const
+ {
+ return constantSourceCodeRepresentation(reg.toConstantIndex());
+ }
+ SourceCodeRepresentation constantSourceCodeRepresentation(unsigned index) const
+ {
+ if (index < m_constantsSourceCodeRepresentation.size())
+ return m_constantsSourceCodeRepresentation[index];
+ return SourceCodeRepresentation::Other;
+ }
+
unsigned numberOfConstantIdentifierSets() const { return m_rareData ? m_rareData->m_constantIdentifierSets.size() : 0; }
const FixedVector<IdentifierSet>& constantIdentifierSets() { ASSERT(m_rareData); return m_rareData->m_constantIdentifierSets; }
Modified: trunk/Source/_javascript_Core/bytecode/UnlinkedCodeBlockGenerator.h (275865 => 275866)
--- trunk/Source/_javascript_Core/bytecode/UnlinkedCodeBlockGenerator.h 2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/bytecode/UnlinkedCodeBlockGenerator.h 2021-04-13 07:35:38 UTC (rev 275866)
@@ -124,8 +124,18 @@
const WriteBarrier<Unknown>& constantRegister(VirtualRegister reg) const { return m_constantRegisters[reg.toConstantIndex()]; }
const Vector<WriteBarrier<Unknown>>& constantRegisters() { return m_constantRegisters; }
ALWAYS_INLINE JSValue getConstant(VirtualRegister reg) const { return m_constantRegisters[reg.toConstantIndex()].get(); }
- const Vector<SourceCodeRepresentation>& constantsSourceCodeRepresentation() { return m_constantsSourceCodeRepresentation; }
+ SourceCodeRepresentation constantSourceCodeRepresentation(VirtualRegister reg) const
+ {
+ return constantSourceCodeRepresentation(reg.toConstantIndex());
+ }
+ SourceCodeRepresentation constantSourceCodeRepresentation(unsigned index) const
+ {
+ if (index < m_constantsSourceCodeRepresentation.size())
+ return m_constantsSourceCodeRepresentation[index];
+ return SourceCodeRepresentation::Other;
+ }
+
unsigned addConstant(JSValue v, SourceCodeRepresentation sourceCodeRepresentation = SourceCodeRepresentation::Other)
{
ASSERT(m_vm.heap.isDeferred());
Modified: trunk/Source/_javascript_Core/dfg/DFGGraph.cpp (275865 => 275866)
--- trunk/Source/_javascript_Core/dfg/DFGGraph.cpp 2021-04-13 06:11:34 UTC (rev 275865)
+++ trunk/Source/_javascript_Core/dfg/DFGGraph.cpp 2021-04-13 07:35:38 UTC (rev 275866)
@@ -1424,7 +1424,6 @@
{
ConcurrentJSLocker locker(m_codeBlock->m_lock);
m_codeBlock->constants().shrink(0);
- m_codeBlock->constantsSourceCodeRepresentation().resize(0);
for (FrozenValue* value : m_frozenValues) {
if (!value->pointsToHeap())
continue;
@@ -1445,7 +1444,6 @@
} }
}
m_codeBlock->constants().shrinkToFit();
- m_codeBlock->constantsSourceCodeRepresentation().shrinkToFit();
}
template<typename Visitor>