• Seth Brenith's avatar
    [interpreter] Include Star lookahead for more bytecodes · 0d30fac2
    Seth Brenith authored
    I made some temporary changes in BytecodeArrayWriter to log counts of
    how often each pair of bytecodes is adjacent. In data I collected on a
    Facebook page with those changes enabled, I noticed that the following
    bytecodes were commonly followed by Star, but do not appear in
    IsStarLookahead.
    
    LdaImmutableCurrentContextSlot:
      4.4% of all instructions, 66% chance to be followed by Star
    CreateClosure:
      3.9% of all instructions, 57% chance to be followed by Star
    LdaImmutableContextSlot:
      1.7% of all instructions, 95% chance to be followed by Star
    CreateObjectLiteral:
      1.4% of all instructions, 92% chance to be followed by Star
    CreateArrayLiteral:
      1.4% of all instructions, 99% chance to be followed by Star
    ThrowReferenceErrorIfHole:
      0.7% of all instructions, 100% chance to be followed by Star
    GetTemplateObject:
      0.6% of all instructions, 100% chance to be followed by Star
    CreateEmptyArrayLiteral:
      0.4% of all instructions, 87% chance to be followed by Star
    CreateEmptyObjectLiteral:
      0.2% of all instructions, 79% chance to be followed by Star
    
    I cross-referenced this list with data from google.com and youtube.com
    (the top two sites according to Alexa), and found that CreateClosure and
    CreateEmpty*Literal are not likely followed by Star on those sites.
    Without those three, I suggest that the following bytecode handlers
    would likely benefit from Star lookahead:
    
    LdaImmutableCurrentContextSlot
    LdaImmutableContextSlot
    CreateObjectLiteral
    CreateArrayLiteral
    ThrowReferenceErrorIfHole
    GetTemplateObject
    
    I also ran Octane with --noopt and got the following results.
    
    Name               Median change (95% CI)    U test result
    -----------------  ------------------------  -------------------
    Richards           +1.02% to +3.28%          improved  p=1.8e-05
    DeltaBlue          -1.47% to +0.12%          regressed p=0.05
    Crypto             -1.11% to +0.93%          inconclusive
    RayTrace           -1.10% to +0.48%          inconclusive
    EarleyBoyer        -0.25% to +1.29%          inconclusive
    RegExp             -1.46% to +0.08%          inconclusive
    Splay              -1.10% to +0.03%          inconclusive
    SplayLatency       +0.13% to +0.92%          improved  p=5.8e-05
    NavierStokes       -0.22% to +1.24%          inconclusive
    PdfJS              -0.69% to +1.04%          inconclusive
    Mandreel           -0.66% to +0.66%          inconclusive
    MandreelLatency    +0.32% to +1.77%          improved  p=0.00024
    Gameboy            -1.13% to +0.38%          inconclusive
    CodeLoad           -0.27% to +0.43%          inconclusive
    Box2D              -0.53% to +0.82%          inconclusive
    zlib               -0.19% to +0.19%          inconclusive
    Typescript         -0.23% to +0.59%          inconclusive
    Score (version 9)  -0.18% to +0.68%          inconclusive
    
    I'm somewhat puzzled by the DeltaBlue regression, since DeltaBlue
    agrees that all of the selected bytecodes are likely to precede Star,
    but overall I think this change is more benefit than harm.
    
    Change-Id: Ib9b4033f3cda273e99c9f0252d0055e203921916
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2615946Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
    Commit-Queue: Seth Brenith <seth.brenith@microsoft.com>
    Cr-Commit-Position: refs/heads/master@{#71987}
    0d30fac2
Name
Last commit
Last update
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.flake8 Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
ENG_REVIEW_OWNERS Loading commit data...
INFRA_OWNERS Loading commit data...
INTL_OWNERS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
MIPS_OWNERS Loading commit data...
OWNERS Loading commit data...
PPC_OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...