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.cpp

    r102917 r103384  
    18361836
    18371837#if ENABLE(VALUE_PROFILER)
     1838    for (unsigned profileIndex = 0; profileIndex < numberOfArgumentValueProfiles(); ++profileIndex)
     1839        valueProfileForArgument(profileIndex)->computeUpdatedPrediction();
    18381840    for (unsigned profileIndex = 0; profileIndex < numberOfValueProfiles(); ++profileIndex)
    18391841        valueProfile(profileIndex)->computeUpdatedPrediction();
     
    22072209        return true;
    22082210   
    2209     unsigned numberOfNonArgumentValueProfiles = 0;
    22102211    unsigned numberOfLiveNonArgumentValueProfiles = 0;
    22112212    unsigned numberOfSamplesInProfiles = 0; // If this divided by ValueProfile::numberOfBuckets equals numberOfValueProfiles() then value profiles are full.
    2212     for (unsigned i = 0; i < numberOfValueProfiles(); ++i) {
    2213         ValueProfile* profile = valueProfile(i);
     2213    for (unsigned i = 0; i < totalNumberOfValueProfiles(); ++i) {
     2214        ValueProfile* profile = getFromAllValueProfiles(i);
    22142215        unsigned numSamples = profile->totalNumberOfSamples();
    22152216        if (numSamples > ValueProfile::numberOfBuckets)
     
    22202221            continue;
    22212222        }
    2222         numberOfNonArgumentValueProfiles++;
    22232223        if (profile->numberOfSamples() || profile->m_prediction != PredictNone)
    22242224            numberOfLiveNonArgumentValueProfiles++;
     
    22272227
    22282228#if ENABLE(JIT_VERBOSE_OSR)
    2229     printf("Profile hotness: %lf, %lf\n", (double)numberOfLiveNonArgumentValueProfiles / numberOfNonArgumentValueProfiles, (double)numberOfSamplesInProfiles / ValueProfile::numberOfBuckets / numberOfValueProfiles());
    2230 #endif
    2231 
    2232     if ((!numberOfNonArgumentValueProfiles || (double)numberOfLiveNonArgumentValueProfiles / numberOfNonArgumentValueProfiles >= Options::desiredProfileLivenessRate)
    2233         && (!numberOfValueProfiles() || (double)numberOfSamplesInProfiles / ValueProfile::numberOfBuckets / numberOfValueProfiles() >= Options::desiredProfileFullnessRate)
     2229    printf("Profile hotness: %lf, %lf\n", (double)numberOfLiveNonArgumentValueProfiles / numberOfValueProfiles(), (double)numberOfSamplesInProfiles / ValueProfile::numberOfBuckets / numberOfValueProfiles());
     2230#endif
     2231
     2232    if ((!numberOfValueProfiles() || (double)numberOfLiveNonArgumentValueProfiles / numberOfValueProfiles() >= Options::desiredProfileLivenessRate)
     2233        && (!totalNumberOfValueProfiles() || (double)numberOfSamplesInProfiles / ValueProfile::numberOfBuckets / totalNumberOfValueProfiles() >= Options::desiredProfileFullnessRate)
    22342234        && static_cast<unsigned>(m_optimizationDelayCounter) + 1 >= Options::minimumOptimizationDelay)
    22352235        return true;
     
    22682268{
    22692269    fprintf(stderr, "ValueProfile for %p:\n", this);
    2270     for (unsigned i = 0; i < numberOfValueProfiles(); ++i) {
    2271         ValueProfile* profile = valueProfile(i);
     2270    for (unsigned i = 0; i < totalNumberOfValueProfiles(); ++i) {
     2271        ValueProfile* profile = getFromAllValueProfiles(i);
    22722272        if (profile->m_bytecodeOffset < 0) {
    22732273            ASSERT(profile->m_bytecodeOffset == -1);
Note: See TracChangeset for help on using the changeset viewer.