Changeset 231316 in webkit
- Timestamp:
- May 3, 2018 11:18:34 AM (6 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 2 deleted
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/CMakeLists.txt
r231301 r231316 449 449 bytecode/JumpTable.h 450 450 bytecode/LLIntCallLinkInfo.h 451 bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h452 451 bytecode/LazyOperandValueProfile.h 453 452 bytecode/ObjectAllocationProfile.h -
trunk/Source/JavaScriptCore/ChangeLog
r231310 r231316 1 2018-05-03 Keith Miller <keith_miller@apple.com> 2 3 Remove the prototype caching for get_by_id in the LLInt 4 https://bugs.webkit.org/show_bug.cgi?id=185226 5 6 Reviewed by Michael Saboff. 7 8 There is no evidence that this is actually a speedup and we keep 9 getting bugs with it. At this point it seems like we should just 10 remove this code. 11 12 * CMakeLists.txt: 13 * JavaScriptCore.xcodeproj/project.pbxproj: 14 * Sources.txt: 15 * bytecode/BytecodeDumper.cpp: 16 (JSC::BytecodeDumper<Block>::printGetByIdOp): 17 (JSC::BytecodeDumper<Block>::printGetByIdCacheStatus): 18 (JSC::BytecodeDumper<Block>::dumpBytecode): 19 * bytecode/BytecodeList.json: 20 * bytecode/BytecodeUseDef.h: 21 (JSC::computeUsesForBytecodeOffset): 22 (JSC::computeDefsForBytecodeOffset): 23 * bytecode/CodeBlock.cpp: 24 (JSC::CodeBlock::finalizeLLIntInlineCaches): 25 * bytecode/CodeBlock.h: 26 (JSC::CodeBlock::llintGetByIdWatchpointMap): Deleted. 27 * bytecode/GetByIdStatus.cpp: 28 (JSC::GetByIdStatus::computeFromLLInt): 29 * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp: Removed. 30 * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h: Removed. 31 * bytecompiler/BytecodeGenerator.cpp: 32 (JSC::BytecodeGenerator::emitGetById): 33 * dfg/DFGByteCodeParser.cpp: 34 (JSC::DFG::ByteCodeParser::parseBlock): 35 * dfg/DFGCapabilities.cpp: 36 (JSC::DFG::capabilityLevel): 37 * jit/JIT.cpp: 38 (JSC::JIT::privateCompileMainPass): 39 (JSC::JIT::privateCompileSlowCases): 40 * llint/LLIntSlowPaths.cpp: 41 (JSC::LLInt::LLINT_SLOW_PATH_DECL): 42 (JSC::LLInt::setupGetByIdPrototypeCache): Deleted. 43 * llint/LowLevelInterpreter32_64.asm: 44 * llint/LowLevelInterpreter64.asm: 45 * runtime/Options.h: 46 1 47 2018-05-03 Ryan Haddad <ryanhaddad@apple.com> 2 48 -
trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r231194 r231316 1036 1036 53F6BF6D1C3F060A00F41E5D /* InternalFunctionAllocationProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 53F6BF6C1C3F060A00F41E5D /* InternalFunctionAllocationProfile.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1037 1037 53F8D2001E8387D400D21116 /* WasmBBQPlanInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 53F8D1FF1E8387D400D21116 /* WasmBBQPlanInlines.h */; }; 1038 53FA2AE11CF37F3F0022711D /* LLIntPrototypeLoadAdaptiveStructureWatchpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 53FA2AE01CF37F3F0022711D /* LLIntPrototypeLoadAdaptiveStructureWatchpoint.h */; settings = {ATTRIBUTES = (Private, ); }; };1039 1038 53FD04D41D7AB291003287D3 /* WasmCallingConvention.h in Headers */ = {isa = PBXBuildFile; fileRef = 53FD04D21D7AB187003287D3 /* WasmCallingConvention.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1040 1039 53FF7F991DBFCD9000A26CCC /* WasmValidate.h in Headers */ = {isa = PBXBuildFile; fileRef = 53FF7F981DBFCD9000A26CCC /* WasmValidate.h */; }; … … 3459 3458 53F6BF6C1C3F060A00F41E5D /* InternalFunctionAllocationProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InternalFunctionAllocationProfile.h; sourceTree = "<group>"; }; 3460 3459 53F8D1FF1E8387D400D21116 /* WasmBBQPlanInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WasmBBQPlanInlines.h; sourceTree = "<group>"; }; 3461 53FA2AE01CF37F3F0022711D /* LLIntPrototypeLoadAdaptiveStructureWatchpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LLIntPrototypeLoadAdaptiveStructureWatchpoint.h; sourceTree = "<group>"; };3462 53FA2AE21CF380390022711D /* LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp; sourceTree = "<group>"; };3463 3460 53FD04D11D7AB187003287D3 /* WasmCallingConvention.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WasmCallingConvention.cpp; sourceTree = "<group>"; }; 3464 3461 53FD04D21D7AB187003287D3 /* WasmCallingConvention.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WasmCallingConvention.h; sourceTree = "<group>"; }; … … 6671 6668 FE2B0B681FD0D2970075DA5F /* JSCPoison.cpp */, 6672 6669 FE2B0B701FD8C4630075DA5F /* JSCPoison.h */, 6670 FE7497E5209001B00003565B /* JSCPtrTag.h */, 6673 6671 72AAF7CB1D0D318B005E60BE /* JSCustomGetterSetterFunction.cpp */, 6674 6672 72AAF7CC1D0D318B005E60BE /* JSCustomGetterSetterFunction.h */, … … 6756 6754 862553CE16136AA5009F17D0 /* JSProxy.cpp */, 6757 6755 862553CF16136AA5009F17D0 /* JSProxy.h */, 6758 FE7497E5209001B00003565B /* JSCPtrTag.h */,6759 6756 534638721E70D01500F12AC1 /* JSRunLoopTimer.cpp */, 6760 6757 534638701E70CF3D00F12AC1 /* JSRunLoopTimer.h */, … … 7635 7632 0FB5467614F59AD1002C2989 /* LazyOperandValueProfile.h */, 7636 7633 0F0FC45814BD15F100B81154 /* LLIntCallLinkInfo.h */, 7637 53FA2AE21CF380390022711D /* LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp */,7638 53FA2AE01CF37F3F0022711D /* LLIntPrototypeLoadAdaptiveStructureWatchpoint.h */,7639 7634 0FB5467C14F5CFD3002C2989 /* MethodOfGettingAValueProfile.cpp */, 7640 7635 0FB5467A14F5C7D4002C2989 /* MethodOfGettingAValueProfile.h */, … … 9001 8996 148CD1D8108CF902008163C6 /* JSContextRefPrivate.h in Headers */, 9002 8997 FE2B0B731FD9EF700075DA5F /* JSCPoison.h in Headers */, 8998 FE7497E6209001B10003565B /* JSCPtrTag.h in Headers */, 9003 8999 A72028B81797601E0098028C /* JSCTestRunnerUtils.h in Headers */, 9004 9000 72AAF7CE1D0D31B3005E60BE /* JSCustomGetterSetterFunction.h in Headers */, … … 9076 9072 7C184E1F17BEE22E007CB63A /* JSPromisePrototype.h in Headers */, 9077 9073 996B731F1BDA08EF00331B84 /* JSPromisePrototype.lut.h in Headers */, 9078 FE7497E6209001B10003565B /* JSCPtrTag.h in Headers */,9079 9074 2A05ABD61961DF2400341750 /* JSPropertyNameEnumerator.h in Headers */, 9080 9075 862553D216136E1A009F17D0 /* JSProxy.h in Headers */, … … 9165 9160 FED287B215EC9A5700DA8161 /* LLIntOpcode.h in Headers */, 9166 9161 79CFC6F01C33B10000C768EA /* LLIntPCRanges.h in Headers */, 9167 53FA2AE11CF37F3F0022711D /* LLIntPrototypeLoadAdaptiveStructureWatchpoint.h in Headers */,9168 9162 0F4680A514BA7F8D00BFE272 /* LLIntSlowPaths.h in Headers */, 9169 9163 0F0B839D14BCF46600885B4F /* LLIntThunks.h in Headers */, -
trunk/Source/JavaScriptCore/Sources.txt
r231047 r231316 226 226 bytecode/IntrinsicGetterAccessCase.cpp 227 227 bytecode/JumpTable.cpp 228 bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp229 228 bytecode/LazyOperandValueProfile.cpp 230 229 bytecode/MethodOfGettingAValueProfile.cpp -
trunk/Source/JavaScriptCore/bytecode/BytecodeDumper.cpp
r230376 r231316 378 378 op = "get_by_id"; 379 379 break; 380 case op_get_by_id_proto_load:381 op = "get_by_id_proto_load";382 break;383 case op_get_by_id_unset:384 op = "get_by_id_unset";385 break;386 380 case op_get_array_length: 387 381 op = "array_length"; … … 398 392 printLocationAndOp(out, location, it, op); 399 393 out.printf("%s, %s, %s", registerName(r0).data(), registerName(r1).data(), idName(id0, identifier(id0)).data()); 400 it += 4; // Increment up to the value profiler.394 it += 3; // Increment up to the value profiler. 401 395 } 402 396 … … 443 437 dumpStructure(out, "struct", structure, ident); 444 438 out.printf(")"); 445 if (Interpreter::getOpcodeID(instruction[0]) == op_get_by_id_proto_load)446 out.printf(" proto(%p)", getPointer(instruction[6]));447 439 } 448 440 … … 1039 1031 } 1040 1032 case op_get_by_id: 1041 case op_get_by_id_proto_load:1042 case op_get_by_id_unset:1043 1033 case op_get_array_length: { 1044 1034 printGetByIdOp(out, location, it); -
trunk/Source/JavaScriptCore/bytecode/BytecodeList.json
r230376 r231316 82 82 { "name" : "op_is_cell_with_type", "length" : 4 }, 83 83 { "name" : "op_in", "length" : 5 }, 84 { "name" : "op_get_array_length", "length" : 9 }, 85 { "name" : "op_get_by_id", "length" : 9 }, 86 { "name" : "op_get_by_id_proto_load", "length" : 9 }, 87 { "name" : "op_get_by_id_unset", "length" : 9 }, 84 { "name" : "op_get_array_length", "length" : 8 }, 85 { "name" : "op_get_by_id", "length" : 8 }, 88 86 { "name" : "op_get_by_id_with_this", "length" : 6 }, 89 87 { "name" : "op_get_by_val_with_this", "length" : 6 }, -
trunk/Source/JavaScriptCore/bytecode/BytecodeUseDef.h
r230376 r231316 183 183 case op_try_get_by_id: 184 184 case op_get_by_id: 185 case op_get_by_id_proto_load:186 case op_get_by_id_unset:187 185 case op_get_by_id_direct: 188 186 case op_get_array_length: … … 435 433 case op_try_get_by_id: 436 434 case op_get_by_id: 437 case op_get_by_id_proto_load:438 case op_get_by_id_unset:439 435 case op_get_by_id_direct: 440 436 case op_get_by_id_with_this: -
trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp
r230748 r231316 66 66 #include "LLIntData.h" 67 67 #include "LLIntEntrypoint.h" 68 #include "LLIntPrototypeLoadAdaptiveStructureWatchpoint.h"69 68 #include "LowLevelInterpreter.h" 70 69 #include "ModuleProgramCodeBlock.h" … … 1244 1243 Instruction* curInstruction = &instructions()[propertyAccessInstructions[i]]; 1245 1244 switch (Interpreter::getOpcodeID(curInstruction[0])) { 1246 case op_get_by_id: 1247 case op_get_by_id_proto_load: 1248 case op_get_by_id_unset: { 1245 case op_get_by_id: { 1249 1246 StructureID oldStructureID = curInstruction[4].u.structureID; 1250 1247 if (!oldStructureID || Heap::isMarked(vm.heap.structureIDTable().get(oldStructureID))) … … 1339 1336 } 1340 1337 } 1341 1342 // We can't just remove all the sets when we clear the caches since we might have created a watchpoint set1343 // then cleared the cache without GCing in between.1344 m_llintGetByIdWatchpointMap.removeIf([](const StructureWatchpointMap::KeyValuePairType& pair) -> bool {1345 return !Heap::isMarked(pair.key);1346 });1347 1338 1348 1339 for (unsigned i = 0; i < m_llintCallLinkInfos.size(); ++i) { -
trunk/Source/JavaScriptCore/bytecode/CodeBlock.h
r230550 r231316 55 55 #include "JumpTable.h" 56 56 #include "LLIntCallLinkInfo.h" 57 #include "LLIntPrototypeLoadAdaptiveStructureWatchpoint.h"58 57 #include "LazyOperandValueProfile.h" 59 58 #include "ModuleProgramExecutable.h" … … 628 627 } 629 628 630 typedef HashMap<Structure*, Bag<LLIntPrototypeLoadAdaptiveStructureWatchpoint>> StructureWatchpointMap;631 StructureWatchpointMap& llintGetByIdWatchpointMap() { return m_llintGetByIdWatchpointMap; }632 633 629 // Functions for controlling when tiered compilation kicks in. This 634 630 // controls both when the optimizing compiler is invoked and when OSR … … 975 971 RefCountedArray<LLIntCallLinkInfo> m_llintCallLinkInfos; 976 972 SentinelLinkedList<LLIntCallLinkInfo, BasicRawSentinelNode<LLIntCallLinkInfo>> m_incomingLLIntCalls; 977 StructureWatchpointMap m_llintGetByIdWatchpointMap;978 973 PoisonedRefPtr<CodeBlockPoison, JITCode> m_jitCode; 979 974 #if ENABLE(JIT) -
trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp
r230748 r231316 105 105 106 106 case op_get_array_length: 107 case op_try_get_by_id: 108 case op_get_by_id_proto_load: 109 case op_get_by_id_unset: { 110 // FIXME: We should not just bail if we see a try_get_by_id or a get_by_id_proto_load. 111 // https://bugs.webkit.org/show_bug.cgi?id=158039 107 case op_try_get_by_id: { 112 108 return GetByIdStatus(NoInformation, false); 113 109 } -
trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
r230376 r231316 2704 2704 instructions().append(0); 2705 2705 instructions().append(0); 2706 instructions().append(Options::prototypeHitCountForLLIntCaching());2707 2706 instructions().append(profile); 2708 2707 return dst; -
trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
r231224 r231316 5139 5139 case op_try_get_by_id: 5140 5140 case op_get_by_id: 5141 case op_get_by_id_proto_load:5142 case op_get_by_id_unset:5143 5141 case op_get_array_length: { 5144 5142 SpeculatedType prediction = getPrediction(); -
trunk/Source/JavaScriptCore/dfg/DFGCapabilities.cpp
r230376 r231316 165 165 case op_try_get_by_id: 166 166 case op_get_by_id: 167 case op_get_by_id_proto_load:168 case op_get_by_id_unset:169 167 case op_get_by_id_with_this: 170 168 case op_get_by_id_direct: -
trunk/Source/JavaScriptCore/jit/JIT.cpp
r231175 r231316 331 331 DEFINE_OP(op_try_get_by_id) 332 332 case op_get_array_length: 333 case op_get_by_id_proto_load:334 case op_get_by_id_unset:335 333 DEFINE_OP(op_get_by_id) 336 334 DEFINE_OP(op_get_by_id_with_this) … … 510 508 DEFINE_SLOWCASE_OP(op_try_get_by_id) 511 509 case op_get_array_length: 512 case op_get_by_id_proto_load:513 case op_get_by_id_unset:514 510 DEFINE_SLOWCASE_OP(op_get_by_id) 515 511 DEFINE_SLOWCASE_OP(op_get_by_id_with_this) -
trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
r230865 r231316 642 642 } 643 643 644 645 static void setupGetByIdPrototypeCache(ExecState* exec, VM& vm, Instruction* pc, JSCell* baseCell, PropertySlot& slot, const Identifier& ident)646 {647 CodeBlock* codeBlock = exec->codeBlock();648 Structure* structure = baseCell->structure();649 650 if (structure->typeInfo().prohibitsPropertyCaching())651 return;652 653 if (structure->needImpurePropertyWatchpoint())654 return;655 656 if (structure->isDictionary()) {657 if (structure->hasBeenFlattenedBefore())658 return;659 structure->flattenDictionaryStructure(vm, jsCast<JSObject*>(baseCell));660 }661 662 ObjectPropertyConditionSet conditions;663 if (slot.isUnset())664 conditions = generateConditionsForPropertyMiss(vm, codeBlock, exec, structure, ident.impl());665 else666 conditions = generateConditionsForPrototypePropertyHit(vm, codeBlock, exec, structure, slot.slotBase(), ident.impl());667 668 if (!conditions.isValid())669 return;670 671 PropertyOffset offset = invalidOffset;672 CodeBlock::StructureWatchpointMap& watchpointMap = codeBlock->llintGetByIdWatchpointMap();673 auto result = watchpointMap.add(structure, Bag<LLIntPrototypeLoadAdaptiveStructureWatchpoint>());674 for (ObjectPropertyCondition condition : conditions) {675 if (!condition.isWatchable())676 return;677 if (condition.condition().kind() == PropertyCondition::Presence)678 offset = condition.condition().offset();679 result.iterator->value.add(condition, pc)->install();680 }681 ASSERT((offset == invalidOffset) == slot.isUnset());682 683 ConcurrentJSLocker locker(codeBlock->m_lock);684 685 if (slot.isUnset()) {686 pc[0].u.opcode = LLInt::getOpcode(op_get_by_id_unset);687 pc[4].u.structureID = structure->id();688 return;689 }690 ASSERT(slot.isValue());691 692 pc[0].u.opcode = LLInt::getOpcode(op_get_by_id_proto_load);693 pc[4].u.structureID = structure->id();694 pc[5].u.operand = offset;695 // We know that this pointer will remain valid because it will be cleared by either a watchpoint fire or696 // during GC when we clear the LLInt caches.697 pc[6].u.pointer = slot.slotBase();698 }699 700 701 644 LLINT_SLOW_PATH_DECL(slow_path_get_by_id) 702 645 { … … 719 662 if (oldStructureID) { 720 663 auto opcode = Interpreter::getOpcodeID(pc[0]); 721 if (opcode == op_get_by_id 722 || opcode == op_get_by_id_unset 723 || opcode == op_get_by_id_proto_load) { 664 if (opcode == op_get_by_id) { 724 665 Structure* a = vm.heap.structureIDTable().get(oldStructureID); 725 666 Structure* b = baseValue.asCell()->structure(vm); … … 740 681 pc[4].u.pointer = nullptr; // old structure 741 682 pc[5].u.pointer = nullptr; // offset 742 743 // Prevent the prototype cache from ever happening.744 pc[7].u.operand = 0;745 683 746 684 if (structure->propertyAccessesAreCacheable() … … 753 691 pc[5].u.operand = slot.cachedOffset(); 754 692 } 755 } else if (UNLIKELY(pc[7].u.operand && (slot.isValue() || slot.isUnset()))) {756 ASSERT(slot.slotBase() != baseValue);757 758 if (!(--pc[7].u.operand))759 setupGetByIdPrototypeCache(exec, vm, pc, baseCell, slot, ident);760 693 } 761 694 } else if (!LLINT_ALWAYS_ACCESS_SLOW … … 766 699 arrayProfile->observeStructure(baseValue.asCell()->structure()); 767 700 pc[4].u.arrayProfile = arrayProfile; 768 769 // Prevent the prototype cache from ever happening.770 pc[7].u.operand = 0;771 701 } 772 702 -
trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm
r230748 r231316 1427 1427 callSlowPath(_llint_slow_path_get_by_id) 1428 1428 dispatch(constexpr op_get_by_id_length) 1429 1430 1431 _llint_op_get_by_id_proto_load:1432 traceExecution()1433 loadi 8[PC], t01434 loadi 16[PC], t11435 loadConstantOrVariablePayload(t0, CellTag, t3, .opGetByIdProtoSlow)1436 loadi 20[PC], t21437 bineq JSCell::m_structureID[t3], t1, .opGetByIdProtoSlow1438 loadpFromInstruction(6, t3)1439 loadPropertyAtVariableOffset(t2, t3, t0, t1)1440 loadi 4[PC], t21441 storei t0, TagOffset[cfr, t2, 8]1442 storei t1, PayloadOffset[cfr, t2, 8]1443 valueProfile(t0, t1, 32, t2)1444 dispatch(constexpr op_get_by_id_proto_load_length)1445 1446 .opGetByIdProtoSlow:1447 callSlowPath(_llint_slow_path_get_by_id)1448 dispatch(constexpr op_get_by_id_proto_load_length)1449 1450 1451 _llint_op_get_by_id_unset:1452 traceExecution()1453 loadi 8[PC], t01454 loadi 16[PC], t11455 loadConstantOrVariablePayload(t0, CellTag, t3, .opGetByIdUnsetSlow)1456 bineq JSCell::m_structureID[t3], t1, .opGetByIdUnsetSlow1457 loadi 4[PC], t21458 storei UndefinedTag, TagOffset[cfr, t2, 8]1459 storei 0, PayloadOffset[cfr, t2, 8]1460 valueProfile(UndefinedTag, 0, 32, t2)1461 dispatch(constexpr op_get_by_id_unset_length)1462 1463 .opGetByIdUnsetSlow:1464 callSlowPath(_llint_slow_path_get_by_id)1465 dispatch(constexpr op_get_by_id_unset_length)1466 1429 1467 1430 -
trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm
r230748 r231316 1343 1343 loadPropertyAtVariableOffset(t1, t3, t0) 1344 1344 storeq t0, [cfr, t2, 8] 1345 valueProfile(t0, 8, t1)1345 valueProfile(t0, constexpr (op_get_by_id_length - 1), t1) 1346 1346 dispatch(constexpr op_get_by_id_length) 1347 1347 … … 1349 1349 callSlowPath(_llint_slow_path_get_by_id) 1350 1350 dispatch(constexpr op_get_by_id_length) 1351 1352 1353 _llint_op_get_by_id_proto_load:1354 traceExecution()1355 loadisFromInstruction(2, t0)1356 loadConstantOrVariableCell(t0, t3, .opGetByIdProtoSlow)1357 loadi JSCell::m_structureID[t3], t11358 loadisFromInstruction(4, t2)1359 bineq t2, t1, .opGetByIdProtoSlow1360 loadisFromInstruction(5, t1)1361 loadpFromInstruction(6, t3)1362 loadisFromInstruction(1, t2)1363 loadPropertyAtVariableOffset(t1, t3, t0)1364 storeq t0, [cfr, t2, 8]1365 valueProfile(t0, 8, t1)1366 dispatch(constexpr op_get_by_id_proto_load_length)1367 1368 .opGetByIdProtoSlow:1369 callSlowPath(_llint_slow_path_get_by_id)1370 dispatch(constexpr op_get_by_id_proto_load_length)1371 1372 1373 _llint_op_get_by_id_unset:1374 traceExecution()1375 loadisFromInstruction(2, t0)1376 loadConstantOrVariableCell(t0, t3, .opGetByIdUnsetSlow)1377 loadi JSCell::m_structureID[t3], t11378 loadisFromInstruction(4, t2)1379 bineq t2, t1, .opGetByIdUnsetSlow1380 loadisFromInstruction(1, t2)1381 storeq ValueUndefined, [cfr, t2, 8]1382 valueProfile(ValueUndefined, 8, t1)1383 dispatch(constexpr op_get_by_id_unset_length)1384 1385 .opGetByIdUnsetSlow:1386 callSlowPath(_llint_slow_path_get_by_id)1387 dispatch(constexpr op_get_by_id_unset_length)1388 1351 1389 1352 … … 1402 1365 bilt t0, 0, .opGetArrayLengthSlow 1403 1366 orq tagTypeNumber, t0 1404 valueProfile(t0, 8, t2)1367 valueProfile(t0, constexpr (op_get_array_length_length - 1), t2) 1405 1368 storeq t0, [cfr, t1, 8] 1406 1369 dispatch(constexpr op_get_array_length_length) -
trunk/Source/JavaScriptCore/runtime/Options.h
r231194 r231316 459 459 v(bool, useICStats, false, Normal, nullptr) \ 460 460 \ 461 v(unsigned, prototypeHitCountForLLIntCaching, 2, Normal, "Number of prototype property hits before caching a prototype in the LLInt. A count of 0 means never cache.") \462 \463 461 v(bool, dumpCompiledRegExpPatterns, false, Normal, nullptr) \ 464 462 \
Note: See TracChangeset
for help on using the changeset viewer.