Changeset 209146 in webkit
- Timestamp:
- Nov 30, 2016 12:30:16 PM (7 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r209129 r209146 1 2016-11-30 Commit Queue <commit-queue@webkit.org> 2 3 Unreviewed, rolling out r209112. 4 https://bugs.webkit.org/show_bug.cgi?id=165208 5 6 "It regressed Octane/Raytrace and JetStream" (Requested by 7 saamyjoon on #webkit). 8 9 Reverted changeset: 10 11 "We should support CreateThis in the FTL" 12 https://bugs.webkit.org/show_bug.cgi?id=164904 13 http://trac.webkit.org/changeset/209112 14 1 15 2016-11-30 Darin Adler <darin@apple.com> 2 16 -
trunk/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h
r209112 r209146 68 68 macro(JSFunction_scope, JSFunction::offsetOfScopeChain()) \ 69 69 macro(JSFunction_rareData, JSFunction::offsetOfRareData()) \ 70 macro(FunctionRareData_allocator, FunctionRareData::offsetOfObjectAllocationProfile() + ObjectAllocationProfile::offsetOfAllocator()) \71 macro(FunctionRareData_structure, FunctionRareData::offsetOfObjectAllocationProfile() + ObjectAllocationProfile::offsetOfStructure()) \72 70 macro(JSObject_butterfly, JSObject::butterflyOffset()) \ 73 71 macro(JSPropertyNameEnumerator_cachedInlineCapacity, JSPropertyNameEnumerator::cachedInlineCapacityOffset()) \ … … 110 108 macro(Structure_prototype, Structure::prototypeOffset()) \ 111 109 macro(Structure_structureID, Structure::structureIDOffset()) \ 112 macro(Structure_inlineCapacity, Structure::inlineCapacityOffset()) \113 macro(Structure_initializationBlob, Structure::indexingTypeIncludingHistoryOffset()) \114 110 macro(JSMap_hashMapImpl, JSMap::offsetOfHashMapImpl()) \ 115 111 macro(JSSet_hashMapImpl, JSSet::offsetOfHashMapImpl()) \ -
trunk/Source/JavaScriptCore/ftl/FTLCapabilities.cpp
r209121 r209146 282 282 case CallDOM: 283 283 case CallDOMGetter: 284 case CreateThis:285 284 // These are OK. 286 285 break; -
trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
r209121 r209146 1075 1075 compileCallDOMGetter(); 1076 1076 break; 1077 case CreateThis:1078 compileCreateThis();1079 break;1080 1077 1081 1078 case PhantomLocal: … … 4922 4919 4923 4920 LValue result = allocateCell( 4924 m_out.constIntPtr(allocator), m_out.constIntPtr(vm().stringStructure.get()), slowPath);4921 m_out.constIntPtr(allocator), vm().stringStructure.get(), slowPath); 4925 4922 4926 4923 m_out.storePtr(m_out.intPtrZero, result, m_heaps.JSString_value); … … 8618 8615 8619 8616 LValue fastObjectValue = allocateObject( 8620 m_out.constIntPtr(cellAllocator), m_out.constIntPtr(structure), fastButterflyValue, slowPath);8617 m_out.constIntPtr(cellAllocator), structure, fastButterflyValue, slowPath); 8621 8618 8622 8619 ValueFromBlock fastObject = m_out.anchor(fastObjectValue); … … 9965 9962 setJSValue(patchpoint); 9966 9963 } 9967 9968 void compileCreateThis()9969 {9970 LValue callee = lowCell(m_node->child1());9971 9972 LBasicBlock isFunctionBlock = m_out.newBlock();9973 LBasicBlock hasRareData = m_out.newBlock();9974 LBasicBlock slowPath = m_out.newBlock();9975 LBasicBlock continuation = m_out.newBlock();9976 9977 m_out.branch(isFunction(callee, provenType(m_node->child1())), usually(isFunctionBlock), rarely(slowPath));9978 9979 LBasicBlock lastNext = m_out.appendTo(isFunctionBlock, hasRareData);9980 LValue rareData = m_out.loadPtr(callee, m_heaps.JSFunction_rareData);9981 m_out.branch(m_out.isZero64(rareData), rarely(slowPath), usually(hasRareData));9982 9983 m_out.appendTo(hasRareData, slowPath);9984 LValue allocator = m_out.loadPtr(rareData, m_heaps.FunctionRareData_allocator);9985 LValue structure = m_out.loadPtr(rareData, m_heaps.FunctionRareData_structure);9986 LValue butterfly = m_out.constIntPtr(0);9987 ValueFromBlock fastResult = m_out.anchor(allocateObject(allocator, structure, butterfly, slowPath));9988 m_out.jump(continuation);9989 9990 m_out.appendTo(slowPath, continuation);9991 ValueFromBlock slowResult = m_out.anchor(vmCall(9992 Int64, m_out.operation(operationCreateThis), m_callFrame, callee, m_out.constInt32(m_node->inlineCapacity())));9993 m_out.jump(continuation);9994 9995 m_out.appendTo(continuation, lastNext);9996 LValue result = m_out.phi(Int64, fastResult, slowResult);9997 9998 mutatorFence();9999 setJSValue(result);10000 }10001 9964 10002 9965 void compareEqObjectOrOtherToObject(Edge leftChild, Edge rightChild) … … 10419 10382 return patchpoint; 10420 10383 } 10421 10422 void storeStructure(LValue object, LValue structure) 10423 { 10424 LValue id; 10425 LValue blob; 10426 if (structure->hasIntPtr()) { 10427 Structure* actualStructure = bitwise_cast<Structure*>(structure->asIntPtr()); 10428 id = m_out.constInt32(actualStructure->id()); 10429 blob = m_out.constInt32(actualStructure->objectInitializationBlob()); 10430 } else { 10431 id = m_out.load32(structure, m_heaps.Structure_structureID); 10432 blob = m_out.load32(structure, m_heaps.Structure_initializationBlob); 10433 } 10434 m_out.store32(id, object, m_heaps.JSCell_structureID); 10435 m_out.store32(blob, object, m_heaps.JSCell_usefulBytes); 10436 } 10437 10438 LValue allocateCell(LValue allocator, LValue structure, LBasicBlock slowPath) 10384 10385 void storeStructure(LValue object, Structure* structure) 10386 { 10387 m_out.store32(m_out.constInt32(structure->id()), object, m_heaps.JSCell_structureID); 10388 m_out.store32( 10389 m_out.constInt32(structure->objectInitializationBlob()), 10390 object, m_heaps.JSCell_usefulBytes); 10391 } 10392 10393 LValue allocateCell(LValue allocator, Structure* structure, LBasicBlock slowPath) 10439 10394 { 10440 10395 LValue result = allocateHeapCell(allocator, slowPath); … … 10444 10399 10445 10400 LValue allocateObject( 10446 LValue allocator, LValuestructure, LValue butterfly, LBasicBlock slowPath)10401 LValue allocator, Structure* structure, LValue butterfly, LBasicBlock slowPath) 10447 10402 { 10448 10403 LValue result = allocateCell(allocator, structure, slowPath); 10449 10404 if (useGCFences()) { 10450 LValue start = m_out.constInt32(JSFinalObject::offsetOfInlineStorage() / 8);10451 LValue end;10452 if (structure->hasIntPtr()) {10453 Structure* actualStructure = bitwise_cast<Structure*>(structure->asIntPtr());10454 end = m_out.constInt32(JSFinalObject::offsetOfInlineStorage() / 8 + actualStructure->inlineCapacity());10455 } else10456 end = m_out.add(start, m_out.load8ZeroExt32(structure, m_heaps.Structure_inlineCapacity));10457 10458 10405 splatWords( 10459 10406 result, 10460 start,10461 end,10407 m_out.constInt32(JSFinalObject::offsetOfInlineStorage() / 8), 10408 m_out.constInt32(JSFinalObject::offsetOfInlineStorage() / 8 + structure->inlineCapacity()), 10462 10409 m_out.int64Zero, 10463 10410 m_heaps.properties.atAnyNumber()); … … 10472 10419 { 10473 10420 MarkedAllocator* allocator = vm().heap.allocatorForObjectOfType<ClassType>(size); 10474 return allocateObject(m_out.constIntPtr(allocator), m_out.constIntPtr(structure), butterfly, slowPath);10421 return allocateObject(m_out.constIntPtr(allocator), structure, butterfly, slowPath); 10475 10422 } 10476 10423 … … 10536 10483 LValue allocator = allocatorForSize( 10537 10484 vm().heap.subspaceForObjectOfType<ClassType>(), size, slowPath); 10538 return allocateObject(allocator, m_out.constIntPtr(structure), butterfly, slowPath);10485 return allocateObject(allocator, structure, butterfly, slowPath); 10539 10486 } 10540 10487 … … 10545 10492 LValue allocator = allocatorForSize( 10546 10493 vm().heap.subspaceForObjectOfType<ClassType>(), size, slowPath); 10547 return allocateCell(allocator, m_out.constIntPtr(structure), slowPath);10494 return allocateCell(allocator, structure, slowPath); 10548 10495 } 10549 10496 … … 10563 10510 10564 10511 ValueFromBlock fastResult = m_out.anchor(allocateObject( 10565 m_out.constIntPtr(allocator), m_out.constIntPtr(structure), m_out.intPtrZero, slowPath));10512 m_out.constIntPtr(allocator), structure, m_out.intPtrZero, slowPath)); 10566 10513 10567 10514 m_out.jump(continuation); -
trunk/Source/JavaScriptCore/runtime/Structure.h
r209112 r209146 406 406 } 407 407 408 static ptrdiff_t inlineCapacityOffset()409 {410 return OBJECT_OFFSETOF(Structure, m_inlineCapacity);411 }412 413 408 static ptrdiff_t prototypeOffset() 414 409 {
Note: See TracChangeset
for help on using the changeset viewer.