diff options
author | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2017-05-30 12:48:17 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2017-05-30 12:48:17 +0200 |
commit | 881da28418d380042aa95a97f0cbd42560a64f7c (patch) | |
tree | a794dff3274695e99c651902dde93d934ea7a5af /Source/JavaScriptCore/dfg/DFGPredictionInjectionPhase.cpp | |
parent | 7e104c57a70fdf551bb3d22a5d637cdcbc69dbea (diff) | |
parent | 0fcedcd17cc00d3dd44c718b3cb36c1033319671 (diff) | |
download | qtwebkit-881da28418d380042aa95a97f0cbd42560a64f7c.tar.gz |
Merge 'wip/next' into dev
Change-Id: Iff9ee5e23bb326c4371ec8ed81d56f2f05d680e9
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGPredictionInjectionPhase.cpp')
-rw-r--r-- | Source/JavaScriptCore/dfg/DFGPredictionInjectionPhase.cpp | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGPredictionInjectionPhase.cpp b/Source/JavaScriptCore/dfg/DFGPredictionInjectionPhase.cpp index d5a592024..d9a39f90f 100644 --- a/Source/JavaScriptCore/dfg/DFGPredictionInjectionPhase.cpp +++ b/Source/JavaScriptCore/dfg/DFGPredictionInjectionPhase.cpp @@ -31,7 +31,7 @@ #include "DFGBasicBlockInlines.h" #include "DFGGraph.h" #include "DFGPhase.h" -#include "Operations.h" +#include "JSCInlines.h" namespace JSC { namespace DFG { @@ -48,36 +48,35 @@ public: ASSERT(m_graph.m_unificationState == GloballyUnified); ASSERT(codeBlock()->numParameters() >= 1); - for (size_t arg = 0; arg < static_cast<size_t>(codeBlock()->numParameters()); ++arg) { - ValueProfile* profile = profiledBlock()->valueProfileForArgument(arg); - if (!profile) - continue; + { + ConcurrentJITLocker locker(profiledBlock()->m_lock); - m_graph.m_arguments[arg]->variableAccessData()->predict(profile->computeUpdatedPrediction()); + for (size_t arg = 0; arg < static_cast<size_t>(codeBlock()->numParameters()); ++arg) { + ValueProfile* profile = profiledBlock()->valueProfileForArgument(arg); + if (!profile) + continue; -#if DFG_ENABLE(DEBUG_VERBOSE) - dataLog( - "Argument [", arg, "] prediction: ", - SpeculationDump(m_graph.m_arguments[arg]->variableAccessData()->prediction()), "\n"); -#endif + m_graph.m_arguments[arg]->variableAccessData()->predict( + profile->computeUpdatedPrediction(locker)); + } } - for (BlockIndex blockIndex = 0; blockIndex < m_graph.m_blocks.size(); ++blockIndex) { - BasicBlock* block = m_graph.m_blocks[blockIndex].get(); + for (BlockIndex blockIndex = 0; blockIndex < m_graph.numBlocks(); ++blockIndex) { + BasicBlock* block = m_graph.block(blockIndex); if (!block) continue; if (!block->isOSRTarget) continue; - if (block->bytecodeBegin != m_graph.m_osrEntryBytecodeIndex) + if (block->bytecodeBegin != m_graph.m_plan.osrEntryBytecodeIndex) continue; - for (size_t i = 0; i < m_graph.m_mustHandleValues.size(); ++i) { - Node* node = block->variablesAtHead.operand( - m_graph.m_mustHandleValues.operandForIndex(i)); + for (size_t i = 0; i < m_graph.m_plan.mustHandleValues.size(); ++i) { + int operand = m_graph.m_plan.mustHandleValues.operandForIndex(i); + Node* node = block->variablesAtHead.operand(operand); if (!node) continue; - ASSERT(node->hasLocal()); + ASSERT(node->hasLocal(m_graph)); node->variableAccessData()->predict( - speculationFromValue(m_graph.m_mustHandleValues[i])); + speculationFromValue(m_graph.m_plan.mustHandleValues[i])); } } |