• Georg Neis's avatar
    Reland "[ic] EmitElementStore: don't miss when hitting new space limit." · a50bc8ac
    Georg Neis authored
    This is a reland of af677f29, fixing
    an issue with negative indices.
    
    Original change's description:
    > [ic] EmitElementStore: don't miss when hitting new space limit.
    >
    > CSA::EmitElementStore used to bail out (IC miss) via
    > CSA::CheckForCapacityGrow when the capacity hits the new space
    > limit, causing the store IC to go megamorphic in my example (see
    > referenced bug). With this CL, we do what TF'ed code does already:
    > call into Runtime::kGrowArrayElements (in this situation), thus
    > staying monomorphic.
    >
    > Here's a contrived test case:
    >
    > ////////////////////////
    > let x = [];
    >
    > function bar() {
    >   for (let i = 0; i < 50000; ++i) x[i] = i;
    > }
    >
    > function foo() {
    >   for (let i = x.length; i < 100e6; ++i) x[i] = i;
    > }
    >
    > bar();
    > foo();
    > ////////////////////////
    >
    > This took about 4s on my machine, now it takes 3s.
    >
    > Bug: v8:7447
    > Change-Id: I7f268fc55835f363d250613ce0357444a663051c
    > Reviewed-on: https://chromium-review.googlesource.com/918723
    > Commit-Queue: Georg Neis <neis@chromium.org>
    > Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
    > Cr-Commit-Position: refs/heads/master@{#51297}
    
    Bug: v8:7447, chromium:812451
    Change-Id: I345b5e5b2437c4f50e42bbd87947630f24cd95eb
    Reviewed-on: https://chromium-review.googlesource.com/921201
    Commit-Queue: Georg Neis <neis@chromium.org>
    Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#51311}
    a50bc8ac
regress-812451.js 280 Bytes