Changeset 172614 in webkit for trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
- Timestamp:
- Aug 14, 2014, 4:59:44 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp
r172413 r172614 138 138 if (dst == generator.ignoredResult()) 139 139 return 0; 140 return generator.moveToDestinationIfNeeded(dst, generator.thisRegister()); 140 141 RegisterID* result = generator.moveToDestinationIfNeeded(dst, generator.thisRegister()); 142 if (generator.isProfilingTypesWithHighFidelity()) { 143 generator.emitProfileTypesWithHighFidelity(generator.thisRegister(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 144 static const unsigned thisLength = 4; 145 generator.emitHighFidelityTypeProfilingExpressionInfo(position(), JSTextPosition(-1, position().offset + thisLength, -1)); 146 } 147 return result; 141 148 } 142 149 … … 154 161 return 0; 155 162 if (generator.isProfilingTypesWithHighFidelity()) { 156 generator.emitProfileTypesWithHighFidelity(local.get(), ProfileTypesBytecodeHasGlobalID );163 generator.emitProfileTypesWithHighFidelity(local.get(), ProfileTypesBytecodeHasGlobalID, nullptr); 157 164 generator.emitHighFidelityTypeProfilingExpressionInfo(m_position, JSTextPosition(-1, m_position.offset + m_ident.length(), -1)); 158 165 } … … 163 170 generator.emitExpressionInfo(divot, m_start, divot); 164 171 RefPtr<RegisterID> scope = generator.emitResolveScope(generator.tempDestination(dst), m_ident); 165 RegisterID* ret; 172 RegisterID* finalDest = generator.finalDestination(dst); 173 RegisterID* result = generator.emitGetFromScope(finalDest, scope.get(), m_ident, ThrowIfNotFound); 166 174 if (generator.isProfilingTypesWithHighFidelity()) { 167 ret = generator.emitGetFromScopeWithProfile(generator.finalDestination(dst), scope.get(), m_ident, ThrowIfNotFound);175 generator.emitProfileTypesWithHighFidelity(finalDest, ProfileTypesBytecodeGetFromScope, &m_ident); 168 176 generator.emitHighFidelityTypeProfilingExpressionInfo(m_position, JSTextPosition(-1, m_position.offset + m_ident.length(), -1)); 169 } else 170 ret = generator.emitGetFromScope(generator.finalDestination(dst), scope.get(), m_ident, ThrowIfNotFound); 171 return ret; 177 } 178 return result; 172 179 } 173 180 … … 388 395 RegisterID* ret = generator.emitGetByVal(finalDest, base.get(), property); 389 396 if (generator.isProfilingTypesWithHighFidelity()) { 390 generator.emitProfileTypesWithHighFidelity(finalDest, ProfileTypesBytecodeDoesNotHaveGlobalID );397 generator.emitProfileTypesWithHighFidelity(finalDest, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 391 398 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 392 399 } … … 414 421 RegisterID* ret = generator.emitGetById(finalDest, base, m_ident); 415 422 if (generator.isProfilingTypesWithHighFidelity()) { 416 generator.emitProfileTypesWithHighFidelity(finalDest, ProfileTypesBytecodeDoesNotHaveGlobalID );423 generator.emitProfileTypesWithHighFidelity(finalDest, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 417 424 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 418 425 } … … 498 505 RegisterID* ret = generator.emitCall(returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 499 506 if (generator.isProfilingTypesWithHighFidelity()) { 500 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID );507 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 501 508 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 502 509 } … … 519 526 RegisterID* ret = generator.emitCall(returnValue.get(), func.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 520 527 if (generator.isProfilingTypesWithHighFidelity()) { 521 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID );528 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 522 529 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 523 530 } … … 535 542 RegisterID* ret = generator.emitCall(returnValue.get(), func.get(), expectedFunction, callArguments, divot(), divotStart(), divotEnd()); 536 543 if (generator.isProfilingTypesWithHighFidelity()) { 537 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID );544 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 538 545 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 539 546 } … … 554 561 RegisterID* ret = generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 555 562 if (generator.isProfilingTypesWithHighFidelity()) { 556 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID );563 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 557 564 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 558 565 } … … 572 579 RegisterID* ret = generator.emitCall(returnValue.get(), function.get(), NoExpectedFunction, callArguments, divot(), divotStart(), divotEnd()); 573 580 if (generator.isProfilingTypesWithHighFidelity()) { 574 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID );581 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 575 582 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 576 583 } … … 646 653 } 647 654 if (generator.isProfilingTypesWithHighFidelity()) { 648 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID );655 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 649 656 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 650 657 } … … 760 767 } 761 768 if (generator.isProfilingTypesWithHighFidelity()) { 762 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID );769 generator.emitProfileTypesWithHighFidelity(returnValue.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 763 770 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 764 771 } … … 815 822 RefPtr<RegisterID> value = generator.emitGetFromScope(generator.newTemporary(), scope.get(), ident, ThrowIfNotFound); 816 823 RefPtr<RegisterID> oldValue = emitPostIncOrDec(generator, generator.finalDestination(dst), value.get(), m_operator); 824 generator.emitPutToScope(scope.get(), ident, value.get(), ThrowIfNotFound); 817 825 if (generator.isProfilingTypesWithHighFidelity()) { 818 generator.emitP utToScopeWithProfile(scope.get(), ident, value.get(), ThrowIfNotFound);826 generator.emitProfileTypesWithHighFidelity(value.get(), ProfileTypesBytecodePutToScope, &ident); 819 827 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 820 } else 821 generator.emitPutToScope(scope.get(), ident, value.get(), ThrowIfNotFound); 828 } 822 829 823 830 return oldValue.get(); … … 843 850 generator.emitPutByVal(base.get(), property.get(), value.get()); 844 851 if (generator.isProfilingTypesWithHighFidelity()) { 845 generator.emitProfileTypesWithHighFidelity(value.get(), ProfileTypesBytecodeDoesNotHaveGlobalID );852 generator.emitProfileTypesWithHighFidelity(value.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 846 853 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 847 854 } … … 867 874 generator.emitPutById(base.get(), ident, value.get()); 868 875 if (generator.isProfilingTypesWithHighFidelity()) { 869 generator.emitProfileTypesWithHighFidelity(value.get(), ProfileTypesBytecodeDoesNotHaveGlobalID );876 generator.emitProfileTypesWithHighFidelity(value.get(), ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 870 877 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 871 878 } … … 1003 1010 RefPtr<RegisterID> value = generator.emitGetFromScope(generator.newTemporary(), scope.get(), ident, ThrowIfNotFound); 1004 1011 emitIncOrDec(generator, value.get(), m_operator); 1012 generator.emitPutToScope(scope.get(), ident, value.get(), ThrowIfNotFound); 1005 1013 if (generator.isProfilingTypesWithHighFidelity()) { 1006 generator.emitP utToScopeWithProfile(scope.get(), ident, value.get(), ThrowIfNotFound);1014 generator.emitProfileTypesWithHighFidelity(value.get(), ProfileTypesBytecodePutToScope, &ident); 1007 1015 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 1008 } else 1009 generator.emitPutToScope(scope.get(), ident, value.get(), ThrowIfNotFound); 1016 } 1010 1017 return generator.moveToDestinationIfNeeded(dst, value.get()); 1011 1018 } … … 1028 1035 generator.emitPutByVal(base.get(), property.get(), value); 1029 1036 if (generator.isProfilingTypesWithHighFidelity()) { 1030 generator.emitProfileTypesWithHighFidelity(value, ProfileTypesBytecodeDoesNotHaveGlobalID );1037 generator.emitProfileTypesWithHighFidelity(value, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 1031 1038 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 1032 1039 } … … 1050 1057 generator.emitPutById(base.get(), ident, value); 1051 1058 if (generator.isProfilingTypesWithHighFidelity()) { 1052 generator.emitProfileTypesWithHighFidelity(value, ProfileTypesBytecodeDoesNotHaveGlobalID );1059 generator.emitProfileTypesWithHighFidelity(value, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 1053 1060 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 1054 1061 } … … 1521 1528 RefPtr<RegisterID> value = generator.emitGetFromScope(generator.newTemporary(), scope.get(), m_ident, ThrowIfNotFound); 1522 1529 RefPtr<RegisterID> result = emitReadModifyAssignment(generator, generator.finalDestination(dst, value.get()), value.get(), m_right, m_operator, OperandTypes(ResultType::unknownType(), m_right->resultDescriptor()), this); 1523 RegisterID* ret ;1530 RegisterID* returnResult = generator.emitPutToScope(scope.get(), m_ident, result.get(), ThrowIfNotFound); 1524 1531 if (generator.isProfilingTypesWithHighFidelity()) { 1525 ret = generator.emitPutToScopeWithProfile(scope.get(), m_ident, result.get(), ThrowIfNotFound);1532 generator.emitProfileTypesWithHighFidelity(result.get(), ProfileTypesBytecodePutToScope, &m_ident); 1526 1533 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 1527 } else 1528 ret = generator.emitPutToScope(scope.get(), m_ident, result.get(), ThrowIfNotFound); 1529 return ret; 1534 } 1535 return returnResult; 1530 1536 } 1531 1537 … … 1560 1566 RefPtr<RegisterID> result = generator.emitNode(dst, m_right); 1561 1567 generator.emitExpressionInfo(divot(), divotStart(), divotEnd()); 1562 RegisterID* ret ;1568 RegisterID* returnResult = generator.emitPutToScope(scope.get(), m_ident, result.get(), generator.isStrictMode() ? ThrowIfNotFound : DoNotThrowIfNotFound); 1563 1569 if (generator.isProfilingTypesWithHighFidelity()) { 1564 ret = generator.emitPutToScopeWithProfile(scope.get(), m_ident, result.get(), generator.isStrictMode() ? ThrowIfNotFound : DoNotThrowIfNotFound);1570 generator.emitProfileTypesWithHighFidelity(result.get(), ProfileTypesBytecodePutToScope, &m_ident); 1565 1571 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 1566 } else 1567 ret = generator.emitPutToScope(scope.get(), m_ident, result.get(), generator.isStrictMode() ? ThrowIfNotFound : DoNotThrowIfNotFound); 1568 return ret; 1572 } 1573 return returnResult; 1569 1574 } 1570 1575 … … 1580 1585 generator.emitPutById(base.get(), m_ident, forwardResult); 1581 1586 if (generator.isProfilingTypesWithHighFidelity()) { 1582 generator.emitProfileTypesWithHighFidelity(forwardResult, ProfileTypesBytecodeDoesNotHaveGlobalID );1587 generator.emitProfileTypesWithHighFidelity(forwardResult, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 1583 1588 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 1584 1589 } … … 1599 1604 RegisterID* ret = generator.emitPutById(base.get(), m_ident, updatedValue); 1600 1605 if (generator.isProfilingTypesWithHighFidelity()) { 1601 generator.emitProfileTypesWithHighFidelity(updatedValue, ProfileTypesBytecodeDoesNotHaveGlobalID );1606 generator.emitProfileTypesWithHighFidelity(updatedValue, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 1602 1607 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 1603 1608 } … … 1625 1630 generator.emitPutByVal(base.get(), property.get(), forwardResult); 1626 1631 if (generator.isProfilingTypesWithHighFidelity()) { 1627 generator.emitProfileTypesWithHighFidelity(forwardResult, ProfileTypesBytecodeDoesNotHaveGlobalID );1632 generator.emitProfileTypesWithHighFidelity(forwardResult, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 1628 1633 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 1629 1634 } … … 1645 1650 generator.emitPutByVal(base.get(), property.get(), updatedValue); 1646 1651 if (generator.isProfilingTypesWithHighFidelity()) { 1647 generator.emitProfileTypesWithHighFidelity(updatedValue, ProfileTypesBytecodeDoesNotHaveGlobalID );1652 generator.emitProfileTypesWithHighFidelity(updatedValue, ProfileTypesBytecodeDoesNotHaveGlobalID, nullptr); 1648 1653 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 1649 1654 } … … 2252 2257 RefPtr<RegisterID> returnRegister = m_value ? generator.emitNode(dst, m_value) : generator.emitLoad(dst, jsUndefined()); 2253 2258 if (generator.isProfilingTypesWithHighFidelity()) { 2254 generator.emitProfileTypesWithHighFidelity(returnRegister.get(), ProfileTypesBytecodeFunctionReturnStatement );2259 generator.emitProfileTypesWithHighFidelity(returnRegister.get(), ProfileTypesBytecodeFunctionReturnStatement, nullptr); 2255 2260 generator.emitHighFidelityTypeProfilingExpressionInfo(divotStart(), divotEnd()); 2256 2261 } … … 2583 2588 { 2584 2589 if (generator.isProfilingTypesWithHighFidelity()) { 2585 JSTextPosition start(-1, m_startStartOffset, -1); // This divot is at the open brace of the function.2586 JSTextPosition end(-1, m_startStartOffset + 1, -1);2587 generator.emitProfileTypesWithHighFidelity(generator.thisRegister(), ProfileTypesBytecodeFunctionThisObject);2588 generator.emitHighFidelityTypeProfilingExpressionInfo(start, end);2589 2590 for (size_t i = 0; i < m_parameters->size(); i++) { 2590 2591 // FIXME: Handle Destructuring assignments into arguments. … … 2593 2594 BindingNode* parameter = static_cast<BindingNode*>(m_parameters->at(i)); 2594 2595 RegisterID reg(CallFrame::argumentOffset(i)); 2595 generator.emitProfileTypesWithHighFidelity(®, ProfileTypesBytecodeFunctionArgument );2596 generator.emitProfileTypesWithHighFidelity(®, ProfileTypesBytecodeFunctionArgument, nullptr); 2596 2597 generator.emitHighFidelityTypeProfilingExpressionInfo(parameter->divotStart(), parameter->divotEnd()); 2597 2598 } … … 2615 2616 RegisterID* r0 = generator.isConstructor() ? generator.thisRegister() : generator.emitLoad(0, jsUndefined()); 2616 2617 if (generator.isProfilingTypesWithHighFidelity()) 2617 generator.emitProfileTypesWithHighFidelity(r0, ProfileTypesBytecodeFunctionReturnStatement ); // Do not emit expression info for this profile because it's not in the user's source code.2618 generator.emitProfileTypesWithHighFidelity(r0, ProfileTypesBytecodeFunctionReturnStatement, nullptr); // Do not emit expression info for this profile because it's not in the user's source code. 2618 2619 ASSERT(startOffset() >= lineStartOffset()); 2619 2620 generator.emitDebugHook(WillLeaveCallFrame, lastLine(), startOffset(), lineStartOffset());
Note:
See TracChangeset
for help on using the changeset viewer.