Changeset 100219 in webkit
- Timestamp:
- Nov 14, 2011, 5:04:08 PM (15 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 3 edited
-
ChangeLog (modified) (1 diff)
-
dfg/DFGByteCodeParser.cpp (modified) (2 diffs)
-
jit/JITPropertyAccess.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r100208 r100219 1 2011-11-14 Filip Pizlo <fpizlo@apple.com> 2 3 DFG put_by_id transition optimizations test the wrong structures 4 https://bugs.webkit.org/show_bug.cgi?id=72324 5 6 Reviewed by Gavin Barraclough. 7 8 * dfg/DFGByteCodeParser.cpp: 9 (JSC::DFG::ByteCodeParser::structureChainIsStillValid): 10 (JSC::DFG::ByteCodeParser::parseBlock): 11 * jit/JITPropertyAccess.cpp: 12 (JSC::JIT::privateCompilePutByIdTransition): 13 1 14 2011-11-14 Michael Saboff <msaboff@apple.com> 2 15 -
trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
r99898 r100219 683 683 684 684 return nodeIndex; 685 } 686 687 bool structureChainIsStillValid(bool direct, Structure* previousStructure, StructureChain* chain) 688 { 689 if (direct) 690 return true; 691 692 if (!previousStructure->storedPrototype().isNull() && previousStructure->storedPrototype().asCell()->structure() != chain->head()->get()) 693 return false; 694 695 for (WriteBarrier<Structure>* it = chain->head(); *it; ++it) { 696 if (!(*it)->storedPrototype().isNull() && (*it)->storedPrototype().asCell()->structure() != it[1].get()) 697 return false; 698 } 699 700 return true; 685 701 } 686 702 … … 1804 1820 size_t offset = newStructure->get(*m_globalData, identifier); 1805 1821 1806 if (offset != notFound ) {1822 if (offset != notFound && structureChainIsStillValid(direct, previousStructure, structureChain)) { 1807 1823 addToGraph(CheckStructure, OpInfo(m_graph.addStructureSet(previousStructure)), base); 1808 1824 if (!direct) { 1825 if (!previousStructure->storedPrototype().isNull()) 1826 addToGraph(CheckStructure, OpInfo(m_graph.addStructureSet(previousStructure->storedPrototype().asCell()->structure())), cellConstant(previousStructure->storedPrototype().asCell())); 1827 1809 1828 for (WriteBarrier<Structure>* it = structureChain->head(); *it; ++it) { 1810 1829 JSValue prototype = (*it)->storedPrototype(); -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp
r98912 r100219 522 522 failureCases.append(emitJumpIfNotJSCell(regT0)); 523 523 failureCases.append(branchPtr(NotEqual, Address(regT0, JSCell::structureOffset()), TrustedImmPtr(oldStructure))); 524 524 525 testPrototype(oldStructure->storedPrototype(), failureCases); 526 527 ASSERT(oldStructure->storedPrototype().isNull() || oldStructure->storedPrototype().asCell()->structure() == chain->head()->get()); 525 528 526 529 // ecx = baseObject->m_structure 527 530 if (!direct) { 528 for (WriteBarrier<Structure>* it = chain->head(); *it; ++it) 531 for (WriteBarrier<Structure>* it = chain->head(); *it; ++it) { 532 ASSERT((*it)->storedPrototype().isNull() || (*it)->storedPrototype().asCell()->structure() == it[1].get()); 529 533 testPrototype((*it)->storedPrototype(), failureCases); 534 } 530 535 } 531 536
Note:
See TracChangeset
for help on using the changeset viewer.