• Nico Hartmann's avatar
    Reland "[turbofan] Improve equality on NumberOrOddball" · 120d4333
    Nico Hartmann authored
    This is a reland of 6204768b
    
    The original issue exposed the problem that NumberEqual performs
    implicit conversion of oddballs to numbers, which is incorrect for
    abstract equality comparison (i.e. 0 == null must not be true).
    
    This reland fixes this by applying the following steps:
    * Introduced a new kNumberOrBoolean value for CompareOperationFeedback,
      CompareOperationHint, TypeCheckKind and CheckedTaggedInputMode.
    * In CodeStubAssembler::Equal: Further distinguish between boolean and
      non-boolean oddballs and set feedback accoringly.
    * In JSTypedLowering: Construct [Speculative]NumberEqual operator with
      CompareOperationHint::kNumberOrBoolean, when this feedback is present.
      JSOperatorBuilder and operator cache are extended accordingly.
    * In SimplifiedLowering: Propagate a UseInfo with new
      TypeCheckKind::kNumberOrBoolean.
    * This leads to the generation of CheckedTaggedToFloat64 in
      RepresentationChanger with new CheckedTaggedInputMode::kNumberOrBoolean.
    * In EffectControlLinearizer: Handle this new mode. Accept and convert
      number and boolean and deopt for rest.
    
    Original change's description:
    > [turbofan] Improve equality on NumberOrOddball
    >
    > This CL cleans up CompareOperationFeedback by replacing it with a
    > composable set of flags. The interpreter is changed to collect
    > more specific feedback for abstract equality, especially if oddballs
    > are involved.
    >
    > TurboFan is changed to construct SpeculativeNumberEqual operator
    > instead of the generic JSEqual in many more cases. This change has
    > shown a local speedup of a factor of 3-10, because the specific
    > operator is way faster than calling into the generic builtin, but
    > it also enables additional optimizations, further improving
    > runtime performance.
    >
    > Bug: v8:5660
    > Change-Id: I856752caa707e9a4f742c6e7a9c75552fb431d28
    > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2162854
    > Reviewed-by: Mythri Alle <mythria@chromium.org>
    > Reviewed-by: Georg Neis <neis@chromium.org>
    > Commit-Queue: Nico Hartmann <nicohartmann@chromium.org>
    > Cr-Commit-Position: refs/heads/master@{#67645}
    
    TBR: tebbi@chromium.org
    Bug: v8:5660
    Change-Id: I12e733149a1d2773cafb781a1d4b10aa1eb242a7
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2193713
    Commit-Queue: Georg Neis <neis@chromium.org>
    Reviewed-by: 's avatarMythri Alle <mythria@chromium.org>
    Reviewed-by: 's avatarGeorg Neis <neis@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#68037}
    120d4333
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...
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...
LICENSE.valgrind 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...