Title: [87359] trunk/Source/_javascript_Core

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (87358 => 87359)


--- trunk/Source/_javascript_Core/ChangeLog	2011-05-26 05:19:25 UTC (rev 87358)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-05-26 05:32:18 UTC (rev 87359)
@@ -9,6 +9,66 @@
 
         Reviewed by Sam Weinig.
 
+        Bug 61503 - Move population of CodeBlock::m_structureStubInfos into JIT
+
+        This data structure, used at runtime by the JIT, is currently unnecessarily populated
+        with default entries during byte compilation.
+
+        Aside from meaning that there is JIT specific code in the bytecompiler, this also ties
+        us to one entry per corresponding bytecode op, which may be undesirable. Instead,
+        populate this array from the JIT.
+
+        The type StructureStubInfo has two unused states, one for gets & one for puts. Unify
+        these, so that the class can have a default constructor (and to simply switch statements
+        in code walking over the table).
+
+        This change has ramification for the DFG JIT, in that the DFG JIT used this datastructure
+        to check for functions containing property access. Instead do so in the DFGByteCodeParser.
+
+        * bytecode/CodeBlock.cpp:
+        (JSC::printStructureStubInfo):
+        * bytecode/CodeBlock.h:
+        (JSC::CodeBlock::setNumberOfStructureStubInfos):
+        (JSC::CodeBlock::numberOfStructureStubInfos):
+        * bytecode/StructureStubInfo.cpp:
+        (JSC::StructureStubInfo::deref):
+        (JSC::StructureStubInfo::visitAggregate):
+        * bytecode/StructureStubInfo.h:
+        (JSC::StructureStubInfo::StructureStubInfo):
+        * bytecompiler/BytecodeGenerator.cpp:
+        (JSC::BytecodeGenerator::emitGetById):
+        (JSC::BytecodeGenerator::emitPutById):
+        (JSC::BytecodeGenerator::emitDirectPutById):
+        * dfg/DFGByteCodeParser.cpp:
+        (JSC::DFG::ByteCodeParser::parseBlock):
+        * jit/JIT.cpp:
+        (JSC::JIT::JIT):
+        (JSC::JIT::privateCompileMainPass):
+        (JSC::JIT::privateCompileSlowCases):
+        (JSC::JIT::privateCompile):
+        * jit/JIT.h:
+        * jit/JITPropertyAccess.cpp:
+        (JSC::JIT::emit_op_get_by_id):
+        (JSC::JIT::emit_op_put_by_id):
+        (JSC::JIT::emit_op_method_check):
+        (JSC::JIT::compileGetByIdHotPath):
+        (JSC::JIT::compileGetByIdSlowCase):
+        (JSC::JIT::emitSlow_op_put_by_id):
+        * jit/JITPropertyAccess32_64.cpp:
+        (JSC::JIT::emit_op_get_by_id):
+        (JSC::JIT::emitSlow_op_get_by_id):
+        (JSC::JIT::emit_op_put_by_id):
+        (JSC::JIT::emitSlow_op_put_by_id):
+        (JSC::JIT::emit_op_method_check):
+        (JSC::JIT::compileGetByIdHotPath):
+        (JSC::JIT::compileGetByIdSlowCase):
+        * runtime/Executable.cpp:
+        (JSC::tryDFGCompile):
+
+2011-05-25  Gavin Barraclough  <[email protected]>
+
+        Reviewed by Sam Weinig.
+
         Bug 61501 - Unify AbstractMacroAssembler::differenceBetween methods.
 
         * assembler/AbstractMacroAssembler.h:

Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp (87358 => 87359)


--- trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp	2011-05-26 05:19:25 UTC (rev 87358)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp	2011-05-26 05:32:18 UTC (rev 87359)
@@ -252,12 +252,9 @@
     case access_put_by_id_replace:
         printf("  [%4d] %s: %s\n", instructionOffset, "put_by_id_replace", pointerToSourceString(stubInfo.u.putByIdReplace.baseObjectStructure).utf8().data());
         return;
-    case access_get_by_id:
-        printf("  [%4d] %s\n", instructionOffset, "get_by_id");
+    case access_unset:
+        printf("  [%4d] %s\n", instructionOffset, "unset");
         return;
-    case access_put_by_id:
-        printf("  [%4d] %s\n", instructionOffset, "put_by_id");
-        return;
     case access_get_by_id_generic:
         printf("  [%4d] %s\n", instructionOffset, "op_get_by_id_generic");
         return;

Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.h (87358 => 87359)


--- trunk/Source/_javascript_Core/bytecode/CodeBlock.h	2011-05-26 05:19:25 UTC (rev 87358)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.h	2011-05-26 05:32:18 UTC (rev 87359)
@@ -353,12 +353,8 @@
         bool hasGlobalResolveInstructionAtBytecodeOffset(unsigned bytecodeOffset);
 #endif
 #if ENABLE(JIT)
+        void setNumberOfStructureStubInfos(size_t size) { m_structureStubInfos.grow(size); }
         size_t numberOfStructureStubInfos() const { return m_structureStubInfos.size(); }
-        void addStructureStubInfo(const StructureStubInfo& stubInfo)
-        {
-            if (m_globalData->canUseJIT())
-                m_structureStubInfos.append(stubInfo);
-        }
         StructureStubInfo& structureStubInfo(int index) { return m_structureStubInfos[index]; }
 
         void addGlobalResolveInfo(unsigned globalResolveInstruction)

Modified: trunk/Source/_javascript_Core/bytecode/StructureStubInfo.cpp (87358 => 87359)


--- trunk/Source/_javascript_Core/bytecode/StructureStubInfo.cpp	2011-05-26 05:19:25 UTC (rev 87358)
+++ trunk/Source/_javascript_Core/bytecode/StructureStubInfo.cpp	2011-05-26 05:32:18 UTC (rev 87359)
@@ -50,8 +50,7 @@
     case access_get_by_id_chain:
     case access_put_by_id_transition:
     case access_put_by_id_replace:
-    case access_get_by_id:
-    case access_put_by_id:
+    case access_unset:
     case access_get_by_id_generic:
     case access_put_by_id_generic:
     case access_get_array_length:
@@ -95,8 +94,7 @@
     case access_put_by_id_replace:
         visitor.append(&u.putByIdReplace.baseObjectStructure);
         return;
-    case access_get_by_id:
-    case access_put_by_id:
+    case access_unset:
     case access_get_by_id_generic:
     case access_put_by_id_generic:
     case access_get_array_length:

Modified: trunk/Source/_javascript_Core/bytecode/StructureStubInfo.h (87358 => 87359)


--- trunk/Source/_javascript_Core/bytecode/StructureStubInfo.h	2011-05-26 05:19:25 UTC (rev 87358)
+++ trunk/Source/_javascript_Core/bytecode/StructureStubInfo.h	2011-05-26 05:32:18 UTC (rev 87359)
@@ -43,8 +43,7 @@
         access_get_by_id_proto_list,
         access_put_by_id_transition,
         access_put_by_id_replace,
-        access_get_by_id,
-        access_put_by_id,
+        access_unset,
         access_get_by_id_generic,
         access_put_by_id_generic,
         access_get_array_length,
@@ -52,8 +51,8 @@
     };
 
     struct StructureStubInfo {
-        StructureStubInfo(AccessType accessType)
-            : accessType(accessType)
+        StructureStubInfo()
+            : accessType(access_unset)
             , seen(false)
         {
         }

Modified: trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.cpp (87358 => 87359)


--- trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.cpp	2011-05-26 05:19:25 UTC (rev 87358)
+++ trunk/Source/_javascript_Core/bytecompiler/BytecodeGenerator.cpp	2011-05-26 05:32:18 UTC (rev 87359)
@@ -1387,10 +1387,6 @@
 
 RegisterID* BytecodeGenerator::emitGetById(RegisterID* dst, RegisterID* base, const Identifier& property)
 {
-#if ENABLE(JIT)
-    m_codeBlock->addStructureStubInfo(StructureStubInfo(access_get_by_id));
-#endif
-    
 #if ENABLE(INTERPRETER)
     m_codeBlock->addPropertyAccessInstruction(instructions().size());
 #endif
@@ -1418,9 +1414,6 @@
 
 RegisterID* BytecodeGenerator::emitPutById(RegisterID* base, const Identifier& property, RegisterID* value)
 {
-#if ENABLE(JIT)
-    m_codeBlock->addStructureStubInfo(StructureStubInfo(access_put_by_id));
-#endif
 #if ENABLE(INTERPRETER)
     m_codeBlock->addPropertyAccessInstruction(instructions().size());
 #endif
@@ -1439,9 +1432,6 @@
 
 RegisterID* BytecodeGenerator::emitDirectPutById(RegisterID* base, const Identifier& property, RegisterID* value)
 {
-#if ENABLE(JIT)
-    m_codeBlock->addStructureStubInfo(StructureStubInfo(access_put_by_id));
-#endif
 #if ENABLE(INTERPRETER)
     m_codeBlock->addPropertyAccessInstruction(instructions().size());
 #endif

Modified: trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp (87358 => 87359)


--- trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp	2011-05-26 05:19:25 UTC (rev 87358)
+++ trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp	2011-05-26 05:32:18 UTC (rev 87359)
@@ -36,9 +36,12 @@
 
 #if ENABLE(DFG_JIT_RESTRICTIONS)
 // FIXME: Temporarily disable arithmetic, until we fix associated performance regressions.
+// FIXME: temporarily disable property accesses until we fix regressions.
 #define ARITHMETIC_OP() m_parseFailed = true
+#define PROPERTY_ACCESS_OP() m_parseFailed = true
 #else
 #define ARITHMETIC_OP() ((void)0)
+#define PROPERTY_ACCESS_OP() ((void)0)
 #endif
 
 // === ByteCodeParser ===
@@ -862,6 +865,7 @@
         }
 
         case op_get_by_id: {
+            PROPERTY_ACCESS_OP();
             NodeIndex base = get(currentInstruction[2].u.operand);
             unsigned identifier = currentInstruction[3].u.operand;
 
@@ -873,6 +877,7 @@
         }
 
         case op_put_by_id: {
+            PROPERTY_ACCESS_OP();
             NodeIndex value = get(currentInstruction[3].u.operand);
             NodeIndex base = get(currentInstruction[1].u.operand);
             unsigned identifier = currentInstruction[2].u.operand;

Modified: trunk/Source/_javascript_Core/jit/JIT.cpp (87358 => 87359)


--- trunk/Source/_javascript_Core/jit/JIT.cpp	2011-05-26 05:19:25 UTC (rev 87358)
+++ trunk/Source/_javascript_Core/jit/JIT.cpp	2011-05-26 05:32:18 UTC (rev 87359)
@@ -74,7 +74,6 @@
     , m_globalData(globalData)
     , m_codeBlock(codeBlock)
     , m_labels(codeBlock ? codeBlock->instructions().size() : 0)
-    , m_propertyAccessCompilationInfo(codeBlock ? codeBlock->numberOfStructureStubInfos() : 0)
     , m_callStructureStubCompilationInfo(codeBlock ? codeBlock->numberOfCallLinkInfos() : 0)
     , m_bytecodeOffset((unsigned)-1)
 #if USE(JSVALUE32_64)
@@ -175,7 +174,6 @@
     Instruction* instructionsBegin = m_codeBlock->instructions().begin();
     unsigned instructionCount = m_codeBlock->instructions().size();
 
-    m_propertyAccessInstructionIndex = 0;
     m_globalResolveInfoIndex = 0;
     m_callLinkInfoIndex = 0;
 
@@ -348,7 +346,6 @@
         }
     }
 
-    ASSERT(m_propertyAccessInstructionIndex == m_codeBlock->numberOfStructureStubInfos());
     ASSERT(m_callLinkInfoIndex == m_codeBlock->numberOfCallLinkInfos());
 
 #ifndef NDEBUG
@@ -452,7 +449,7 @@
     }
 
 #if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
-    ASSERT(m_propertyAccessInstructionIndex == m_codeBlock->numberOfStructureStubInfos());
+    ASSERT(m_propertyAccessInstructionIndex == m_propertyAccessCompilationInfo.size());
 #endif
     ASSERT(m_callLinkInfoIndex == m_codeBlock->numberOfCallLinkInfos());
 
@@ -573,7 +570,8 @@
         patchBuffer.patch(iter->storeLocation, patchBuffer.locationOf(iter->target).executableAddress());
 
 #if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
-    for (unsigned i = 0; i < m_codeBlock->numberOfStructureStubInfos(); ++i) {
+    m_codeBlock->setNumberOfStructureStubInfos(m_propertyAccessCompilationInfo.size());
+    for (unsigned i = 0; i < m_propertyAccessCompilationInfo.size(); ++i) {
         StructureStubInfo& info = m_codeBlock->structureStubInfo(i);
         info.callReturnLocation = patchBuffer.locationOf(m_propertyAccessCompilationInfo[i].callReturnLocation);
         info.hotPathBegin = patchBuffer.locationOf(m_propertyAccessCompilationInfo[i].hotPathBegin);

Modified: trunk/Source/_javascript_Core/jit/JIT.h (87358 => 87359)


--- trunk/Source/_javascript_Core/jit/JIT.h	2011-05-26 05:19:25 UTC (rev 87358)
+++ trunk/Source/_javascript_Core/jit/JIT.h	2011-05-26 05:32:18 UTC (rev 87359)
@@ -570,7 +570,7 @@
 #endif
 
 #if ENABLE(JIT_OPTIMIZE_PROPERTY_ACCESS)
-        void compileGetByIdHotPath(int resultVReg, int baseVReg, Identifier* ident, unsigned propertyAccessInstructionIndex);
+        void compileGetByIdHotPath(int baseVReg, Identifier*);
         void compileGetByIdSlowCase(int resultVReg, int baseVReg, Identifier* ident, Vector<SlowCaseEntry>::iterator& iter, bool isMethodCheck = false);
 #endif
         void compileGetDirectOffset(RegisterID base, RegisterID result, Structure* structure, size_t cachedOffset);

Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp (87358 => 87359)


--- trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp	2011-05-26 05:19:25 UTC (rev 87358)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess.cpp	2011-05-26 05:32:18 UTC (rev 87359)
@@ -278,8 +278,6 @@
     stubCall.addArgument(regT0);
     stubCall.addArgument(TrustedImmPtr(ident));
     stubCall.call(resultVReg);
-
-    m_propertyAccessInstructionIndex++;
 }
 
 void JIT::emitSlow_op_get_by_id(Instruction*, Vector<SlowCaseEntry>::iterator&)
@@ -301,8 +299,6 @@
     stubCall.addArgument(TrustedImmPtr(ident));
     stubCall.addArgument(regT1);
     stubCall.call();
-
-    m_propertyAccessInstructionIndex++;
 }
 
 void JIT::emitSlow_op_put_by_id(Instruction*, Vector<SlowCaseEntry>::iterator&)
@@ -329,7 +325,7 @@
     emitGetVirtualRegister(baseVReg, regT0);
 
     // Do the method check - check the object & its prototype's structure inline (this is the common case).
-    m_methodCallCompilationInfo.append(MethodCallCompilationInfo(m_propertyAccessInstructionIndex));
+    m_methodCallCompilationInfo.append(MethodCallCompilationInfo(m_propertyAccessCompilationInfo.size()));
     MethodCallCompilationInfo& info = m_methodCallCompilationInfo.last();
 
     Jump notCell = emitJumpIfNotJSCell(regT0);
@@ -358,7 +354,7 @@
 
     // Do a regular(ish) get_by_id (the slow case will be link to
     // cti_op_get_by_id_method_check instead of cti_op_get_by_id.
-    compileGetByIdHotPath(resultVReg, baseVReg, ident, m_propertyAccessInstructionIndex++);
+    compileGetByIdHotPath(baseVReg, ident);
 
     match.link(this);
     emitPutVirtualRegister(resultVReg);
@@ -395,11 +391,11 @@
     Identifier* ident = &(m_codeBlock->identifier(currentInstruction[3].u.operand));
 
     emitGetVirtualRegister(baseVReg, regT0);
-    compileGetByIdHotPath(resultVReg, baseVReg, ident, m_propertyAccessInstructionIndex++);
+    compileGetByIdHotPath(baseVReg, ident);
     emitPutVirtualRegister(resultVReg);
 }
 
-void JIT::compileGetByIdHotPath(int, int baseVReg, Identifier*, unsigned propertyAccessInstructionIndex)
+void JIT::compileGetByIdHotPath(int baseVReg, Identifier*)
 {
     // As for put_by_id, get_by_id requires the offset of the Structure and the offset of the access to be patched.
     // Additionally, for get_by_id we need patch the offset of the branch to the slow case (we patch this to jump
@@ -411,7 +407,8 @@
     BEGIN_UNINTERRUPTED_SEQUENCE(sequenceGetByIdHotPath);
 
     Label hotPathBegin(this);
-    m_propertyAccessCompilationInfo[propertyAccessInstructionIndex].hotPathBegin = hotPathBegin;
+    m_propertyAccessCompilationInfo.append(PropertyStubCompilationInfo());
+    m_propertyAccessCompilationInfo.last().hotPathBegin = hotPathBegin;
 
     DataLabelPtr structureToCompare;
     Jump structureCheck = branchPtrWithPatch(NotEqual, Address(regT0, JSCell::structureOffset()), structureToCompare, TrustedImmPtr(reinterpret_cast<void*>(patchGetByIdDefaultStructure)));
@@ -465,8 +462,7 @@
     ASSERT_JIT_OFFSET(differenceBetween(coldPathBegin, call), patchOffsetGetByIdSlowCaseCall);
 
     // Track the location of the call; this will be used to recover patch information.
-    m_propertyAccessCompilationInfo[m_propertyAccessInstructionIndex].callReturnLocation = call;
-    m_propertyAccessInstructionIndex++;
+    m_propertyAccessCompilationInfo[m_propertyAccessInstructionIndex++].callReturnLocation = call;
 }
 
 void JIT::emit_op_put_by_id(Instruction* currentInstruction)
@@ -474,8 +470,6 @@
     unsigned baseVReg = currentInstruction[1].u.operand;
     unsigned valueVReg = currentInstruction[3].u.operand;
 
-    unsigned propertyAccessInstructionIndex = m_propertyAccessInstructionIndex++;
-
     // In order to be able to patch both the Structure, and the object offset, we store one pointer,
     // to just after the arguments have been loaded into registers 'hotPathBegin', and we generate code
     // such that the Structure & offset are always at the same distance from this.
@@ -488,7 +482,8 @@
     BEGIN_UNINTERRUPTED_SEQUENCE(sequencePutById);
 
     Label hotPathBegin(this);
-    m_propertyAccessCompilationInfo[propertyAccessInstructionIndex].hotPathBegin = hotPathBegin;
+    m_propertyAccessCompilationInfo.append(PropertyStubCompilationInfo());
+    m_propertyAccessCompilationInfo.last().hotPathBegin = hotPathBegin;
 
     // It is important that the following instruction plants a 32bit immediate, in order that it can be patched over.
     DataLabelPtr structureToCompare;
@@ -509,8 +504,6 @@
     Identifier* ident = &(m_codeBlock->identifier(currentInstruction[2].u.operand));
     unsigned direct = currentInstruction[8].u.operand;
 
-    unsigned propertyAccessInstructionIndex = m_propertyAccessInstructionIndex++;
-
     linkSlowCaseIfNotJSCell(iter, baseVReg);
     linkSlowCase(iter);
 
@@ -521,7 +514,7 @@
     Call call = stubCall.call();
 
     // Track the location of the call; this will be used to recover patch information.
-    m_propertyAccessCompilationInfo[propertyAccessInstructionIndex].callReturnLocation = call;
+    m_propertyAccessCompilationInfo[m_propertyAccessInstructionIndex++].callReturnLocation = call;
 }
 
 // Compile a store into an object's property storage.  May overwrite the

Modified: trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp (87358 => 87359)


--- trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp	2011-05-26 05:19:25 UTC (rev 87358)
+++ trunk/Source/_javascript_Core/jit/JITPropertyAccess32_64.cpp	2011-05-26 05:32:18 UTC (rev 87359)
@@ -157,13 +157,10 @@
     stubCall.addArgument(base);
     stubCall.addArgument(TrustedImmPtr(&(m_codeBlock->identifier(ident))));
     stubCall.call(dst);
-    
-    m_propertyAccessInstructionIndex++;
 }
 
 void JIT::emitSlow_op_get_by_id(Instruction*, Vector<SlowCaseEntry>::iterator&)
 {
-    m_propertyAccessInstructionIndex++;
     ASSERT_NOT_REACHED();
 }
 
@@ -178,13 +175,10 @@
     stubCall.addArgument(TrustedImmPtr(&(m_codeBlock->identifier(ident))));
     stubCall.addArgument(value);
     stubCall.call();
-    
-    m_propertyAccessInstructionIndex++;
 }
 
 void JIT::emitSlow_op_put_by_id(Instruction*, Vector<SlowCaseEntry>::iterator&)
 {
-    m_propertyAccessInstructionIndex++;
     ASSERT_NOT_REACHED();
 }
 
@@ -202,7 +196,7 @@
     currentInstruction += OPCODE_LENGTH(op_method_check);
     
     // Do the method check - check the object & its prototype's structure inline (this is the common case).
-    m_methodCallCompilationInfo.append(MethodCallCompilationInfo(m_propertyAccessInstructionIndex));
+    m_methodCallCompilationInfo.append(MethodCallCompilationInfo(m_propertyAccessCompilationInfo.size()));
     MethodCallCompilationInfo& info = m_methodCallCompilationInfo.last();
     
     int dst = currentInstruction[1].u.operand;
@@ -425,8 +419,8 @@
     BEGIN_UNINTERRUPTED_SEQUENCE(sequenceGetByIdHotPath);
     
     Label hotPathBegin(this);
-    m_propertyAccessCompilationInfo[m_propertyAccessInstructionIndex].hotPathBegin = hotPathBegin;
-    m_propertyAccessInstructionIndex++;
+    m_propertyAccessCompilationInfo.append(PropertyStubCompilationInfo());
+    m_propertyAccessCompilationInfo.last().hotPathBegin = hotPathBegin;
     
     DataLabelPtr structureToCompare;
     Jump structureCheck = branchPtrWithPatch(NotEqual, Address(regT0, JSCell::structureOffset()), structureToCompare, TrustedImmPtr(reinterpret_cast<void*>(patchGetByIdDefaultStructure)));
@@ -480,8 +474,7 @@
     ASSERT_JIT_OFFSET(differenceBetween(coldPathBegin, call), patchOffsetGetByIdSlowCaseCall);
     
     // Track the location of the call; this will be used to recover patch information.
-    m_propertyAccessCompilationInfo[m_propertyAccessInstructionIndex].callReturnLocation = call;
-    m_propertyAccessInstructionIndex++;
+    m_propertyAccessCompilationInfo[m_propertyAccessInstructionIndex++].callReturnLocation = call;
 }
 
 void JIT::emit_op_put_by_id(Instruction* currentInstruction)
@@ -500,8 +493,8 @@
     BEGIN_UNINTERRUPTED_SEQUENCE(sequencePutById);
     
     Label hotPathBegin(this);
-    m_propertyAccessCompilationInfo[m_propertyAccessInstructionIndex].hotPathBegin = hotPathBegin;
-    m_propertyAccessInstructionIndex++;
+    m_propertyAccessCompilationInfo.append(PropertyStubCompilationInfo());
+    m_propertyAccessCompilationInfo.last().hotPathBegin = hotPathBegin;
     
     // It is important that the following instruction plants a 32bit immediate, in order that it can be patched over.
     DataLabelPtr structureToCompare;
@@ -534,8 +527,7 @@
     Call call = stubCall.call();
     
     // Track the location of the call; this will be used to recover patch information.
-    m_propertyAccessCompilationInfo[m_propertyAccessInstructionIndex].callReturnLocation = call;
-    m_propertyAccessInstructionIndex++;
+    m_propertyAccessCompilationInfo[m_propertyAccessInstructionIndex++].callReturnLocation = call;
 }
 
 // Compile a store into an object's property storage.  May overwrite base.

Modified: trunk/Source/_javascript_Core/runtime/Executable.cpp (87358 => 87359)


--- trunk/Source/_javascript_Core/runtime/Executable.cpp	2011-05-26 05:19:25 UTC (rev 87358)
+++ trunk/Source/_javascript_Core/runtime/Executable.cpp	2011-05-26 05:32:18 UTC (rev 87359)
@@ -232,8 +232,7 @@
 #if ENABLE(DFG_JIT)
 #if ENABLE(DFG_JIT_RESTRICTIONS)
     // FIXME: No flow control yet supported, don't bother scanning the bytecode if there are any jump targets.
-    // FIXME: temporarily disable property accesses until we fix regressions.
-    if (codeBlock->numberOfJumpTargets() || codeBlock->numberOfStructureStubInfos())
+    if (codeBlock->numberOfJumpTargets())
         return false;
 #endif
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to