Changeset 132554 in webkit
- Timestamp:
- Oct 25, 2012 6:57:07 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r132553 r132554 1 2012-10-25 Filip Pizlo <fpizlo@apple.com> 2 3 DFG Arrayify elimination should replace it with GetButterfly rather than Phantom 4 https://bugs.webkit.org/show_bug.cgi?id=100441 5 6 Reviewed by Oliver Hunt and Gavin Barraclough. 7 8 * fast/js/dfg-arrayify-elimination-expected.txt: Added. 9 * fast/js/dfg-arrayify-elimination.html: Added. 10 * fast/js/jsc-test-list: 11 * fast/js/script-tests/dfg-arrayify-elimination.js: Added. 12 (foo): 13 1 14 2012-10-25 Keishi Hattori <keishi@webkit.org> 2 15 -
trunk/LayoutTests/fast/js/jsc-test-list
r132546 r132554 80 80 fast/js/dfg-arguments-out-of-bounds 81 81 fast/js/dfg-arguments-unexpected-escape 82 fast/js/dfg-arrayify-elimination 82 83 fast/js/dfg-arrayify-when-late-prevent-extensions 83 84 fast/js/dfg-arrayify-when-prevent-extensions -
trunk/Source/JavaScriptCore/ChangeLog
r132546 r132554 1 2012-10-25 Filip Pizlo <fpizlo@apple.com> 2 3 DFG Arrayify elimination should replace it with GetButterfly rather than Phantom 4 https://bugs.webkit.org/show_bug.cgi?id=100441 5 6 Reviewed by Oliver Hunt and Gavin Barraclough. 7 8 Made array profiler's to-string helper behave correctly. 9 10 Made Arrayify elimination do the right thing (convert to GetButterfly). 11 12 Made CFA's interference analysis track clobbered array modes correctly, mostly by 13 simplifying the machinery. 14 15 * bytecode/ArrayProfile.cpp: 16 (JSC::arrayModesToString): 17 * dfg/DFGAbstractState.cpp: 18 (JSC::DFG::AbstractState::execute): 19 * dfg/DFGAbstractValue.h: 20 (JSC::DFG::AbstractValue::clobberArrayModes): 21 (AbstractValue): 22 * dfg/DFGConstantFoldingPhase.cpp: 23 (JSC::DFG::ConstantFoldingPhase::foldConstants): 24 1 25 2012-10-25 Filip Pizlo <fpizlo@apple.com> 2 26 -
trunk/Source/JavaScriptCore/bytecode/ArrayProfile.cpp
r131982 r132554 39 39 return "TOP"; 40 40 41 bool isNonArray = !!(arrayModes & NonArray);42 bool isNonArrayWithContiguous = !!(arrayModes & NonArrayWithContiguous);43 bool isNonArrayWithArrayStorage = !!(arrayModes & NonArrayWithArrayStorage);44 bool isNonArrayWithSlowPutArrayStorage = !!(arrayModes & NonArrayWithSlowPutArrayStorage);45 bool isArray = !!(arrayModes & ArrayClass);46 bool isArrayWithContiguous = !!(arrayModes & ArrayWithContiguous);47 bool isArrayWithArrayStorage = !!(arrayModes & ArrayWithArrayStorage);48 bool isArrayWithSlowPutArrayStorage = !!(arrayModes & ArrayWithSlowPutArrayStorage);41 bool isNonArray = !!(arrayModes & asArrayModes(NonArray)); 42 bool isNonArrayWithContiguous = !!(arrayModes & asArrayModes(NonArrayWithContiguous)); 43 bool isNonArrayWithArrayStorage = !!(arrayModes & asArrayModes(NonArrayWithArrayStorage)); 44 bool isNonArrayWithSlowPutArrayStorage = !!(arrayModes & asArrayModes(NonArrayWithSlowPutArrayStorage)); 45 bool isArray = !!(arrayModes & asArrayModes(ArrayClass)); 46 bool isArrayWithContiguous = !!(arrayModes & asArrayModes(ArrayWithContiguous)); 47 bool isArrayWithArrayStorage = !!(arrayModes & asArrayModes(ArrayWithArrayStorage)); 48 bool isArrayWithSlowPutArrayStorage = !!(arrayModes & asArrayModes(ArrayWithSlowPutArrayStorage)); 49 49 50 50 static char result[256]; -
trunk/Source/JavaScriptCore/dfg/DFGAbstractState.cpp
r132162 r132554 1422 1422 } 1423 1423 forNode(node.child1()).filterArrayModes(arrayModesFor(node.arrayMode())); 1424 m_haveStructures = true; 1424 1425 break; 1425 1426 } … … 1439 1440 clobberStructures(indexInBlock); 1440 1441 forNode(node.child1()).filterArrayModes(arrayModesFor(node.arrayMode())); 1442 m_haveStructures = true; 1441 1443 break; 1442 1444 default: -
trunk/Source/JavaScriptCore/dfg/DFGAbstractValue.h
r131982 r132554 459 459 void clobberArrayModes() 460 460 { 461 if (m_arrayModes == ALL_ARRAY_MODES) 462 return; 463 464 if (LIKELY(m_arrayModes & asArrayModes(NonArray))) 465 m_arrayModes = ALL_ARRAY_MODES; 466 else 467 clobberArrayModesSlow(); 468 } 469 470 void clobberArrayModesSlow() 471 { 472 if (m_arrayModes & asArrayModes(ArrayClass)) 473 m_arrayModes = ALL_ARRAY_MODES; 474 else if (m_arrayModes & asArrayModes(NonArrayWithContiguous)) 475 m_arrayModes |= asArrayModes(NonArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage); 476 else if (m_arrayModes & asArrayModes(ArrayWithContiguous)) 477 m_arrayModes |= asArrayModes(ArrayWithArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage); 478 else if (m_arrayModes & asArrayModes(NonArrayWithArrayStorage)) 479 m_arrayModes |= asArrayModes(NonArrayWithSlowPutArrayStorage); 480 else if (m_arrayModes & asArrayModes(ArrayWithArrayStorage)) 481 m_arrayModes |= asArrayModes(ArrayWithArrayStorage); 482 } 483 461 // FIXME: We could make this try to predict the set of array modes that this object 462 // could have in the future. For now, just do the simple thing. 463 m_arrayModes = ALL_ARRAY_MODES; 464 } 465 484 466 void setFuturePossibleStructure(Structure* structure) 485 467 { -
trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp
r131982 r132554 103 103 } 104 104 105 case CheckArray: 106 case Arrayify: { 105 case CheckArray: { 107 106 if (!modeAlreadyChecked(m_state.forNode(node.child1()), node.arrayMode())) 108 107 break; … … 113 112 } 114 113 114 case Arrayify: { 115 if (!modeAlreadyChecked(m_state.forNode(node.child1()), node.arrayMode())) 116 break; 117 ASSERT(node.refCount() >= 1); 118 node.setOpAndDefaultFlags(GetButterfly); 119 m_graph.deref(nodeIndex); 120 eliminated = true; 121 break; 122 } 123 115 124 default: 116 125 break;
Note: See TracChangeset
for help on using the changeset viewer.