Modified: releases/WebKitGTK/webkit-2.20/Source/_javascript_Core/ChangeLog (231422 => 231423)
--- releases/WebKitGTK/webkit-2.20/Source/_javascript_Core/ChangeLog 2018-05-07 09:04:52 UTC (rev 231422)
+++ releases/WebKitGTK/webkit-2.20/Source/_javascript_Core/ChangeLog 2018-05-07 09:04:57 UTC (rev 231423)
@@ -1,3 +1,23 @@
+2018-04-23 Filip Pizlo <[email protected]>
+
+ Unreviewed, revert accidental change to verbose flag.
+
+ * dfg/DFGByteCodeParser.cpp:
+
+2018-04-23 Filip Pizlo <[email protected]>
+
+ Roll out r226655 because it broke OSR entry when the pre-header is inadequately profiled.
+
+ Rubber stamped by Saam Barati.
+
+ This is a >2x speed-up in SunSpider/bitops-bitwise-and. We don't really care about SunSpider
+ anymore, but r226655 didn't result in any benchmark wins and just regressed this test by a lot.
+ Seems sensible to just roll it out.
+
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::addToGraph):
+ (JSC::DFG::ByteCodeParser::parse):
+
2018-04-08 Yusuke Suzuki <[email protected]>
Use alignas instead of compiler-specific attributes
Modified: releases/WebKitGTK/webkit-2.20/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp (231422 => 231423)
--- releases/WebKitGTK/webkit-2.20/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp 2018-05-07 09:04:52 UTC (rev 231422)
+++ releases/WebKitGTK/webkit-2.20/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp 2018-05-07 09:04:57 UTC (rev 231423)
@@ -693,10 +693,7 @@
Node* addToGraph(Node* node)
{
- m_hasAnyForceOSRExits |= (node->op() == ForceOSRExit);
-
VERBOSE_LOG(" appended ", node, " ", Graph::opName(node->op()), "\n");
-
m_currentBlock->append(node);
if (clobbersExitState(m_graph, node))
m_exitOK = false;
@@ -1153,7 +1150,6 @@
Instruction* m_currentInstruction;
bool m_hasDebuggerEnabled;
- bool m_hasAnyForceOSRExits { false };
};
BasicBlock* ByteCodeParser::allocateTargetableBlock(unsigned bytecodeIndex)
@@ -6649,78 +6645,6 @@
parseCodeBlock();
linkBlocks(inlineStackEntry.m_unlinkedBlocks, inlineStackEntry.m_blockLinkingTargets);
- if (m_hasAnyForceOSRExits) {
- InsertionSet insertionSet(m_graph);
- Operands<VariableAccessData*> mapping(OperandsLike, m_graph.block(0)->variablesAtHead);
-
- for (BasicBlock* block : m_graph.blocksInNaturalOrder()) {
- mapping.fill(nullptr);
- if (validationEnabled()) {
- // Verify that it's correct to fill mapping with nullptr.
- for (unsigned i = 0; i < block->variablesAtHead.size(); ++i) {
- Node* node = block->variablesAtHead.at(i);
- RELEASE_ASSERT(!node);
- }
- }
-
- for (unsigned nodeIndex = 0; nodeIndex < block->size(); ++nodeIndex) {
- Node* node = block->at(nodeIndex);
-
- if (node->hasVariableAccessData(m_graph))
- mapping.operand(node->local()) = node->variableAccessData();
-
- if (node->op() == ForceOSRExit) {
- NodeOrigin endOrigin = node->origin.withExitOK(true);
-
- if (validationEnabled()) {
- // This verifies that we don't need to change any of the successors's predecessor
- // list after planting the Unreachable below. At this point in the bytecode
- // parser, we haven't linked up the predecessor lists yet.
- for (BasicBlock* successor : block->successors())
- RELEASE_ASSERT(successor->predecessors.isEmpty());
- }
-
- block->resize(nodeIndex + 1);
-
- insertionSet.insertNode(block->size(), SpecNone, ExitOK, endOrigin);
-
- auto insertLivenessPreservingOp = [&] (InlineCallFrame* inlineCallFrame, NodeType op, VirtualRegister operand) {
- VariableAccessData* variable = mapping.operand(operand);
- if (!variable) {
- variable = newVariableAccessData(operand);
- mapping.operand(operand) = variable;
- }
-
- VirtualRegister argument = operand - (inlineCallFrame ? inlineCallFrame->stackOffset : 0);
- if (argument.isArgument() && !argument.isHeader()) {
- const Vector<ArgumentPosition*>& arguments = m_inlineCallFrameToArgumentPositions.get(inlineCallFrame);
- arguments[argument.toArgument()]->addVariable(variable);
- }
-
- insertionSet.insertNode(block->size(), SpecNone, op, endOrigin, OpInfo(variable));
- };
- auto addFlushDirect = [&] (InlineCallFrame* inlineCallFrame, VirtualRegister operand) {
- insertLivenessPreservingOp(inlineCallFrame, Flush, operand);
- };
- auto addPhantomLocalDirect = [&] (InlineCallFrame* inlineCallFrame, VirtualRegister operand) {
- insertLivenessPreservingOp(inlineCallFrame, PhantomLocal, operand);
- };
- flushForTerminalImpl(endOrigin.semantic, addFlushDirect, addPhantomLocalDirect);
-
- insertionSet.insertNode(block->size(), SpecNone, Unreachable, endOrigin);
- insertionSet.execute(block);
- break;
- }
- }
- }
- } else if (validationEnabled()) {
- // Ensure our bookkeeping for ForceOSRExit nodes is working.
- for (BasicBlock* block : m_graph.blocksInNaturalOrder()) {
- for (Node* node : *block)
- RELEASE_ASSERT(node->op() != ForceOSRExit);
- }
- }
-
m_graph.determineReachability();
m_graph.killUnreachableBlocks();