All ICs store their state either in type feedback vector or in ExtraICState field of the code object. So there's no need to encode InlineCacheState in code flags.
The following revision refers to this bug: https://chromium.googlesource.com/v8/v8.git/+/9dc62d2721bb35178d60d10c52d4f84daff03c78 commit 9dc62d2721bb35178d60d10c52d4f84daff03c78 Author: ishell <ishell@chromium.org> Date: Thu Jun 09 16:46:12 2016 [ic] [stubs] Remove InlineCacheState field from the code flags. There are no ICs left that store their state in this field: vector based ICs use feedback vector and the rest three (BinaryOpIC, CompareIC and ToBooleanIC) reconstruct their state from the ExtraICState field. This CL also removes unused InlineCacheState::DEBUG_STUB which was used mostly in Code::is_debug_stub(). The latter now checks if the code is one of the debug builtins instead. BUG= chromium:618701 LOG=Y Review-Url: https://codereview.chromium.org/2052763003 Cr-Commit-Position: refs/heads/master@{#36871} [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/builtins.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/builtins.h [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/code-stubs.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/code-stubs.h [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/debug/arm/debug-arm.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/debug/arm64/debug-arm64.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/debug/ia32/debug-ia32.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/debug/mips/debug-mips.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/debug/mips64/debug-mips64.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/debug/ppc/debug-ppc.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/debug/s390/debug-s390.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/debug/x64/debug-x64.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/debug/x87/debug-x87.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/disassembler.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/external-reference-table.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/globals.h [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/ic/ic.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/ic/ic.h [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/ic/stub-cache.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/objects-inl.h [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/objects.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/src/objects.h [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/test/cctest/heap/test-heap.cc [modify] https://crrev.com/9dc62d2721bb35178d60d10c52d4f84daff03c78/test/cctest/test-code-cache.cc
The following revision refers to this bug: https://chromium.googlesource.com/v8/v8.git/+/b449dc0b6fc33e92563f1a31cd523f02aa31baae commit b449dc0b6fc33e92563f1a31cd523f02aa31baae Author: ishell <ishell@chromium.org> Date: Wed Jul 13 10:24:55 2016 [ic] Split megamorphic stub cache in two caches (for loads and for stores). After this CL we can avoid using Code::flags in hash computations for megamorphic stub caches and therefore the unused ICState field can be finally removed from flags. BUG= chromium:618701 Review-Url: https://codereview.chromium.org/2123983004 Cr-Commit-Position: refs/heads/master@{#37708} [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/arm/code-stubs-arm.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/arm64/code-stubs-arm64.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/code-stub-assembler.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/code-stub-assembler.h [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/external-reference-table.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/heap/mark-compact.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ia32/code-stubs-ia32.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/arm/ic-arm.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/arm/stub-cache-arm.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/arm64/ic-arm64.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/arm64/stub-cache-arm64.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/ia32/ic-ia32.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/ia32/stub-cache-ia32.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/ic.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/ic.h [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/mips/ic-mips.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/mips/stub-cache-mips.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/mips64/ic-mips64.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/mips64/stub-cache-mips64.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/ppc/ic-ppc.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/ppc/stub-cache-ppc.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/s390/ic-s390.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/s390/stub-cache-s390.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/stub-cache.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/stub-cache.h [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/x64/ic-x64.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/x64/stub-cache-x64.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/x87/ic-x87.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ic/x87/stub-cache-x87.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/isolate.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/isolate.h [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/mips/code-stubs-mips.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/mips64/code-stubs-mips64.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/ppc/code-stubs-ppc.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/s390/code-stubs-s390.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/type-info.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/type-info.h [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/x64/code-stubs-x64.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/src/x87/code-stubs-x87.cc [modify] https://crrev.com/b449dc0b6fc33e92563f1a31cd523f02aa31baae/test/cctest/test-code-stub-assembler.cc
The following revision refers to this bug: https://chromium.googlesource.com/v8/v8.git/+/aa4140b1ccc114b82700471513c715f68b7c5dac commit aa4140b1ccc114b82700471513c715f68b7c5dac Author: ishell <ishell@chromium.org> Date: Thu Jul 14 10:31:57 2016 [ic] [stubs] Don't use Code::flags in megamorphic stub cache hash computations. This should avoid weird performance issues when changing layout of Code::flags field. BUG= chromium:618701 Review-Url: https://codereview.chromium.org/2147433002 Cr-Commit-Position: refs/heads/master@{#37755} [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/code-stub-assembler.cc [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/code-stub-assembler.h [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/code-stubs.h [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/ic/arm/stub-cache-arm.cc [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/ic/arm64/stub-cache-arm64.cc [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/ic/ia32/stub-cache-ia32.cc [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/ic/ic.cc [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/ic/mips/stub-cache-mips.cc [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/ic/mips64/stub-cache-mips64.cc [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/ic/ppc/stub-cache-ppc.cc [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/ic/s390/stub-cache-s390.cc [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/ic/stub-cache.cc [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/ic/stub-cache.h [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/ic/x64/stub-cache-x64.cc [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/ic/x87/stub-cache-x87.cc [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/type-info.cc [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/src/type-info.h [modify] https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac/test/cctest/test-code-stub-assembler.cc
The following revision refers to this bug: https://chromium.googlesource.com/v8/v8.git/+/e6b3002a613da0aa63d039e9629a3688825d22d3 commit e6b3002a613da0aa63d039e9629a3688825d22d3 Author: ishell <ishell@chromium.org> Date: Fri Jul 15 17:19:32 2016 Revert of [ic] [stubs] Don't use Code::flags in megamorphic stub cache hash computations. (patchset #2 id:20001 of https://codereview.chromium.org/2147433002/ ) Reason for revert: Unfortunately, the performance issues are still there on Android. Original issue's description: > [ic] [stubs] Don't use Code::flags in megamorphic stub cache hash computations. > > This should avoid weird performance issues when changing layout of Code::flags field. > > BUG= chromium:618701 > > Committed: https://crrev.com/aa4140b1ccc114b82700471513c715f68b7c5dac > Cr-Commit-Position: refs/heads/master@{#37755} TBR=jkummerow@chromium.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG= chromium:618701 Review-Url: https://codereview.chromium.org/2147213004 Cr-Commit-Position: refs/heads/master@{#37801} [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/code-stub-assembler.cc [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/code-stub-assembler.h [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/code-stubs.h [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/ic/arm/stub-cache-arm.cc [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/ic/arm64/stub-cache-arm64.cc [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/ic/ia32/stub-cache-ia32.cc [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/ic/ic.cc [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/ic/mips/stub-cache-mips.cc [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/ic/mips64/stub-cache-mips64.cc [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/ic/ppc/stub-cache-ppc.cc [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/ic/s390/stub-cache-s390.cc [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/ic/stub-cache.cc [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/ic/stub-cache.h [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/ic/x64/stub-cache-x64.cc [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/ic/x87/stub-cache-x87.cc [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/type-info.cc [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/src/type-info.h [modify] https://crrev.com/e6b3002a613da0aa63d039e9629a3688825d22d3/test/cctest/test-code-stub-assembler.cc
The following revision refers to this bug: https://chromium.googlesource.com/v8/v8.git/+/7da34f8acb99bc513f366aaa8be23742eb30807b commit 7da34f8acb99bc513f366aaa8be23742eb30807b Author: ishell <ishell@chromium.org> Date: Wed Jul 20 14:18:48 2016 [ic] Fix megamorphic stub cache probing on some platforms. This CL fixes weird performance implications when changing layout of Code::flags field: it happened that the unused ICStateField with MONOMORPHIC value in the handlers' flags was accidentally offsetting the underflow bug in stub cache probing code on arm, arm64, mips and mips64. Stub cache tests now work even when snapshot is enabled. Drive-by-change: Fixed counters manipulation on arm64 and mips64. BUG= chromium:618701 Review-Url: https://codereview.chromium.org/2161153002 Cr-Commit-Position: refs/heads/master@{#37910} [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/src/arm64/macro-assembler-arm64.cc [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/src/ic/arm/stub-cache-arm.cc [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/src/ic/arm64/stub-cache-arm64.cc [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/src/ic/ia32/stub-cache-ia32.cc [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/src/ic/mips/stub-cache-mips.cc [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/src/ic/mips64/stub-cache-mips64.cc [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/src/ic/ppc/stub-cache-ppc.cc [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/src/ic/s390/stub-cache-s390.cc [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/src/ic/x87/stub-cache-x87.cc [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/src/mips64/macro-assembler-mips64.cc [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/src/objects-inl.h [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/src/objects.cc [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/src/objects.h [modify] https://crrev.com/7da34f8acb99bc513f366aaa8be23742eb30807b/test/cctest/test-api.cc
The following revision refers to this bug: https://chromium.googlesource.com/v8/v8.git/+/8aeb7439c91eb769f752ce87f6fc286c30761580 commit 8aeb7439c91eb769f752ce87f6fc286c30761580 Author: ishell <ishell@chromium.org> Date: Thu Jul 21 12:57:26 2016 [ic] [stubs] Don't use Code::flags in megamorphic stub cache hash computations. BUG= chromium:618701 Review-Url: https://codereview.chromium.org/2167493003 Cr-Commit-Position: refs/heads/master@{#37946} [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/code-stub-assembler.cc [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/code-stub-assembler.h [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/code-stubs.h [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/ic/arm/stub-cache-arm.cc [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/ic/arm64/stub-cache-arm64.cc [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/ic/ia32/stub-cache-ia32.cc [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/ic/ic.cc [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/ic/mips/stub-cache-mips.cc [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/ic/mips64/stub-cache-mips64.cc [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/ic/ppc/stub-cache-ppc.cc [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/ic/s390/stub-cache-s390.cc [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/ic/stub-cache.cc [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/ic/stub-cache.h [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/ic/x64/stub-cache-x64.cc [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/ic/x87/stub-cache-x87.cc [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/type-info.cc [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/src/type-info.h [modify] https://crrev.com/8aeb7439c91eb769f752ce87f6fc286c30761580/test/cctest/test-code-stub-assembler.cc
This final CL removes the ICStateField from Code::flags: https://codereview.chromium.org/2139373002.
Comment 1 by bugdroid1@chromium.org
, Jun 9 2016