Ignore:
Timestamp:
Dec 20, 2011, 6:29:15 PM (13 years ago)
Author:
[email protected]
Message:

Value Profiles for arguments should be more easily accessible to the interpreter
https://bugs.webkit.org/show_bug.cgi?id=74984
<rdar://problem/10611364>

Reviewed by Gavin Barraclough.

  • bytecode/CodeBlock.cpp:

(JSC::CodeBlock::stronglyVisitStrongReferences):
(JSC::CodeBlock::shouldOptimizeNow):
(JSC::CodeBlock::dumpValueProfiles):

  • bytecode/CodeBlock.h:

(JSC::CodeBlock::setArgumentValueProfileSize):
(JSC::CodeBlock::numberOfArgumentValueProfiles):
(JSC::CodeBlock::valueProfileForArgument):
(JSC::CodeBlock::addValueProfile):
(JSC::CodeBlock::valueProfile):
(JSC::CodeBlock::valueProfileForBytecodeOffset):
(JSC::CodeBlock::totalNumberOfValueProfiles):
(JSC::CodeBlock::getFromAllValueProfiles):

  • bytecode/ValueProfile.h:

(JSC::ValueProfile::ValueProfile):

  • jit/JIT.cpp:

(JSC::JIT::privateCompile):

  • jit/JIT.h:
  • jit/JITInlineMethods.h:

(JSC::JIT::emitValueProfilingSite):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/bytecode/CodeBlock.h

    r103294 r103384  
    658658       
    659659#if ENABLE(VALUE_PROFILER)
     660        void setArgumentValueProfileSize(unsigned size)
     661        {
     662            m_argumentValueProfiles.resize(size);
     663        }
     664        unsigned numberOfArgumentValueProfiles()
     665        {
     666            return m_argumentValueProfiles.size();
     667        }
     668        ValueProfile* valueProfileForArgument(unsigned argumentIndex)
     669        {
     670            ValueProfile* result = &m_argumentValueProfiles[argumentIndex];
     671            ASSERT(result->m_bytecodeOffset == -1);
     672            return result;
     673        }
     674       
    660675        ValueProfile* addValueProfile(int bytecodeOffset)
    661676        {
     677            ASSERT(bytecodeOffset != -1);
    662678            m_valueProfiles.append(ValueProfile(bytecodeOffset));
    663679            return &m_valueProfiles.last();
    664680        }
    665681        unsigned numberOfValueProfiles() { return m_valueProfiles.size(); }
    666         ValueProfile* valueProfile(int index) { return &m_valueProfiles[index]; }
     682        ValueProfile* valueProfile(int index)
     683        {
     684            ValueProfile* result = &m_valueProfiles[index];
     685            ASSERT(result->m_bytecodeOffset != -1);
     686            return result;
     687        }
    667688        ValueProfile* valueProfileForBytecodeOffset(int bytecodeOffset)
    668689        {
    669             return WTF::genericBinarySearch<ValueProfile, int, getValueProfileBytecodeOffset>(m_valueProfiles, m_valueProfiles.size(), bytecodeOffset);
    670         }
    671         ValueProfile* valueProfileForArgument(int argument)
    672         {
    673             size_t index = argument;
    674             if (index >= m_valueProfiles.size())
    675                 return 0;
    676             ValueProfile* result = valueProfile(index);
    677             if (result->m_bytecodeOffset != -1)
    678                 return 0;
     690            ValueProfile* result = WTF::genericBinarySearch<ValueProfile, int, getValueProfileBytecodeOffset>(m_valueProfiles, m_valueProfiles.size(), bytecodeOffset);
     691            ASSERT(result->m_bytecodeOffset != -1);
    679692            return result;
     693        }
     694       
     695        unsigned totalNumberOfValueProfiles()
     696        {
     697            return numberOfArgumentValueProfiles() + numberOfValueProfiles();
     698        }
     699        ValueProfile* getFromAllValueProfiles(unsigned index)
     700        {
     701            if (index < numberOfArgumentValueProfiles())
     702                return valueProfileForArgument(index);
     703            return valueProfile(index - numberOfArgumentValueProfiles());
    680704        }
    681705       
     
    12521276#endif
    12531277#if ENABLE(VALUE_PROFILER)
     1278        Vector<ValueProfile> m_argumentValueProfiles;
    12541279        SegmentedVector<ValueProfile, 8> m_valueProfiles;
    12551280        SegmentedVector<RareCaseProfile, 8> m_rareCaseProfiles;
Note: See TracChangeset for help on using the changeset viewer.