Title: [176035] trunk/Source/_javascript_Core
- Revision
- 176035
- Author
- [email protected]
- Date
- 2014-11-12 13:13:13 -0800 (Wed, 12 Nov 2014)
Log Message
Generate get_by_id for bracket access with constant string subscript.
<https://webkit.org/b/138663>
Reviewed by Michael Saboff.
Transform o["f"] into o.f when generating bytecode. This allows our JIT
to inline-cache those accesses instead of always dropping out to C++.
This is surprisingly common in real-web content, less so in benchmarks.
Interestingly, Speedometer does hit the optimization quite a bit.
* bytecompiler/NodesCodegen.cpp:
(JSC::BracketAccessorNode::emitBytecode):
Modified Paths
Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (176034 => 176035)
--- trunk/Source/_javascript_Core/ChangeLog 2014-11-12 21:09:36 UTC (rev 176034)
+++ trunk/Source/_javascript_Core/ChangeLog 2014-11-12 21:13:13 UTC (rev 176035)
@@ -1,3 +1,19 @@
+2014-11-12 Andreas Kling <[email protected]>
+
+ Generate get_by_id for bracket access with constant string subscript.
+ <https://webkit.org/b/138663>
+
+ Reviewed by Michael Saboff.
+
+ Transform o["f"] into o.f when generating bytecode. This allows our JIT
+ to inline-cache those accesses instead of always dropping out to C++.
+
+ This is surprisingly common in real-web content, less so in benchmarks.
+ Interestingly, Speedometer does hit the optimization quite a bit.
+
+ * bytecompiler/NodesCodegen.cpp:
+ (JSC::BracketAccessorNode::emitBytecode):
+
2014-11-12 Mark Lam <[email protected]>
Rename USE(MASM_PROBE) to ENABLE(MASM_PROBE).
Modified: trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp (176034 => 176035)
--- trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp 2014-11-12 21:09:36 UTC (rev 176034)
+++ trunk/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp 2014-11-12 21:13:13 UTC (rev 176035)
@@ -389,11 +389,20 @@
return generator.emitGetArgumentByVal(generator.finalDestination(dst), generator.uncheckedLocalArgumentsRegister(), property);
}
- RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(m_base, m_subscriptHasAssignments, m_subscript->isPure(generator));
- RegisterID* property = generator.emitNode(m_subscript);
+ RegisterID* ret;
+ RegisterID* finalDest = generator.finalDestination(dst);
+
+ if (m_subscript->isString()) {
+ RefPtr<RegisterID> base = generator.emitNode(m_base);
+ ret = generator.emitGetById(finalDest, base.get(), static_cast<StringNode*>(m_subscript)->value());
+ } else {
+ RefPtr<RegisterID> base = generator.emitNodeForLeftHandSide(m_base, m_subscriptHasAssignments, m_subscript->isPure(generator));
+ RegisterID* property = generator.emitNode(m_subscript);
+ ret = generator.emitGetByVal(finalDest, base.get(), property);
+ }
+
generator.emitExpressionInfo(divot(), divotStart(), divotEnd());
- RegisterID* finalDest = generator.finalDestination(dst);
- RegisterID* ret = generator.emitGetByVal(finalDest, base.get(), property);
+
if (generator.vm()->typeProfiler()) {
generator.emitProfileType(finalDest, ProfileTypeBytecodeDoesNotHaveGlobalID, nullptr);
generator.emitTypeProfilerExpressionInfo(divotStart(), divotEnd());
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes