Changeset 95786 in webkit
- Timestamp:
- Sep 22, 2011 11:59:38 PM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r95779 r95786 1 2011-09-22 Filip Pizlo <fpizlo@apple.com> 2 3 GetScopedVar should have value profiling 4 https://bugs.webkit.org/show_bug.cgi?id=68676 5 6 Reviewed by Oliver Hunt. 7 8 Added GetScopedVar value profiling and predictin propagation. 9 Added GetScopeChain to CSE. 10 11 * dfg/DFGByteCodeParser.cpp: 12 (JSC::DFG::ByteCodeParser::parseBlock): 13 * dfg/DFGGraph.h: 14 (JSC::DFG::Graph::predict): 15 * dfg/DFGNode.h: 16 (JSC::DFG::Node::hasPrediction): 17 * dfg/DFGPropagator.cpp: 18 (JSC::DFG::Propagator::propagateNodePredictions): 19 (JSC::DFG::Propagator::getScopeChainLoadElimination): 20 (JSC::DFG::Propagator::performNodeCSE): 21 * jit/JITPropertyAccess.cpp: 22 (JSC::JIT::emit_op_get_scoped_var): 23 1 24 2011-09-22 Filip Pizlo <fpizlo@apple.com> 2 25 -
trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
r95758 r95786 1120 1120 int depth = currentInstruction[3].u.operand; 1121 1121 NodeIndex getScopeChain = addToGraph(GetScopeChain, OpInfo(depth)); 1122 NodeIndex getScopedVar = addToGraph(GetScopedVar, OpInfo(slot), getScopeChain);1122 NodeIndex getScopedVar = addToGraph(GetScopedVar, OpInfo(slot), OpInfo(PredictNone), getScopeChain); 1123 1123 set(dst, getScopedVar); 1124 stronglyPredict(getScopedVar); 1124 1125 NEXT_OPCODE(op_get_scoped_var); 1125 1126 } -
trunk/Source/JavaScriptCore/dfg/DFGGraph.h
r95666 r95786 197 197 case Construct: 198 198 case GetByOffset: 199 case GetScopedVar: 199 200 return node.predict(prediction, source); 200 201 default: -
trunk/Source/JavaScriptCore/dfg/DFGNode.h
r95758 r95786 625 625 case Construct: 626 626 case GetByOffset: 627 case GetScopedVar: 627 628 return true; 628 629 default: -
trunk/Source/JavaScriptCore/dfg/DFGPropagator.cpp
r95758 r95786 472 472 changed |= node.predict(m_uses[m_compileIndex] & ~PredictionTagMask, StrongPrediction); 473 473 if (isStrongPrediction(node.getPrediction())) 474 changed |= setPrediction(node.getPrediction());474 changed |= mergePrediction(node.getPrediction()); 475 475 break; 476 476 } … … 490 490 changed |= node.predict(m_uses[m_compileIndex] & ~PredictionTagMask, StrongPrediction); 491 491 if (isStrongPrediction(node.getPrediction())) 492 changed |= setPrediction(node.getPrediction());492 changed |= mergePrediction(node.getPrediction()); 493 493 break; 494 494 } … … 505 505 changed |= node.predict(m_uses[m_compileIndex] & ~PredictionTagMask, StrongPrediction); 506 506 if (isStrongPrediction(node.getPrediction())) 507 changed |= setPrediction(node.getPrediction());507 changed |= mergePrediction(node.getPrediction()); 508 508 break; 509 509 } … … 528 528 } 529 529 530 case GetScopedVar: { 531 changed |= node.predict(m_uses[m_compileIndex] & ~PredictionTagMask, StrongPrediction); 532 PredictedType prediction = node.getPrediction(); 533 if (isStrongPrediction(prediction)) 534 changed |= mergePrediction(prediction); 535 break; 536 } 537 538 case GetScopeChain: { 539 changed |= setPrediction(makePrediction(PredictCellOther, StrongPrediction)); 540 break; 541 } 542 530 543 case PutByVal: 531 544 case PutByValAlias: … … 536 549 } 537 550 538 case GetScopeChain:539 551 case GetCallee: { 540 552 changed |= setPrediction(makePrediction(PredictObjectOther, StrongPrediction)); … … 588 600 case ResolveBase: 589 601 case ResolveBaseStrictPut: 590 case GetScopedVar:591 602 break; 592 603 … … 977 988 } 978 989 990 NodeIndex getScopeChainLoadElimination(unsigned depth) 991 { 992 NodeIndex start = startIndexForChildren(); 993 for (NodeIndex index = endIndexForPureCSE(); index-- > start;) { 994 Node& node = m_graph[index]; 995 if (node.op == GetScopeChain 996 && node.scopeChainDepth() == depth) 997 return index; 998 } 999 return NoNode; 1000 } 1001 979 1002 void performSubstitution(NodeIndex& child) 980 1003 { … … 1068 1091 break; 1069 1092 1093 case GetScopeChain: 1094 setReplacement(getScopeChainLoadElimination(node.scopeChainDepth())); 1095 break; 1096 1070 1097 // Handle nodes that are conditionally pure: these are pure, and can 1071 1098 // be CSE'd, so long as the prediction is the one we want. -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp
r95447 r95786 966 966 loadPtr(Address(regT0, JSVariableObject::offsetOfRegisters()), regT0); 967 967 loadPtr(Address(regT0, currentInstruction[2].u.operand * sizeof(Register)), regT0); 968 emitValueProfilingSite(FirstProfilingSite); 968 969 emitPutVirtualRegister(currentInstruction[1].u.operand); 969 970 }
Note: See TracChangeset
for help on using the changeset viewer.