• 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
..
arm Loading commit data...
arm64 Loading commit data...
ia32 Loading commit data...
mips Loading commit data...
mips64 Loading commit data...
ppc Loading commit data...
s390 Loading commit data...
x64 Loading commit data...
DEPS Loading commit data...
OWNERS Loading commit data...
assembler-arch.h Loading commit data...
assembler-inl.h Loading commit data...
assembler.cc Loading commit data...
assembler.h Loading commit data...
bailout-reason.cc Loading commit data...
bailout-reason.h Loading commit data...
callable.h Loading commit data...
code-comments.cc Loading commit data...
code-comments.h Loading commit data...
code-desc.cc Loading commit data...
code-desc.h Loading commit data...
code-factory.cc Loading commit data...
code-factory.h Loading commit data...
code-reference.cc Loading commit data...
code-reference.h Loading commit data...
code-stub-assembler.cc Loading commit data...
code-stub-assembler.h Loading commit data...
compilation-cache.cc Loading commit data...
compilation-cache.h Loading commit data...
compiler.cc Loading commit data...
compiler.h Loading commit data...
constant-pool.cc Loading commit data...
constant-pool.h Loading commit data...
constants-arch.h Loading commit data...
cpu-features.h Loading commit data...
external-reference-encoder.cc Loading commit data...
external-reference-encoder.h Loading commit data...
external-reference-table.cc Loading commit data...
external-reference-table.h Loading commit data...
external-reference.cc Loading commit data...
external-reference.h Loading commit data...
flush-instruction-cache.cc Loading commit data...
flush-instruction-cache.h Loading commit data...
handler-table.cc Loading commit data...
handler-table.h Loading commit data...
interface-descriptors.cc Loading commit data...
interface-descriptors.h Loading commit data...
label.h Loading commit data...
machine-type.cc Loading commit data...
machine-type.h Loading commit data...
macro-assembler-inl.h Loading commit data...
macro-assembler.h Loading commit data...
optimized-compilation-info.cc Loading commit data...
optimized-compilation-info.h Loading commit data...
pending-optimization-table.cc Loading commit data...
pending-optimization-table.h Loading commit data...
register-arch.h Loading commit data...
register-configuration.cc Loading commit data...
register-configuration.h Loading commit data...
register.cc Loading commit data...
register.h Loading commit data...
reglist.h Loading commit data...
reloc-info.cc Loading commit data...
reloc-info.h Loading commit data...
safepoint-table.cc Loading commit data...
safepoint-table.h Loading commit data...
signature.h Loading commit data...
source-position-table.cc Loading commit data...
source-position-table.h Loading commit data...
source-position.cc Loading commit data...
source-position.h Loading commit data...
string-constants.cc Loading commit data...
string-constants.h Loading commit data...
tick-counter.cc Loading commit data...
tick-counter.h Loading commit data...
tnode.cc Loading commit data...
tnode.h Loading commit data...
turbo-assembler.cc Loading commit data...
turbo-assembler.h Loading commit data...
unoptimized-compilation-info.cc Loading commit data...
unoptimized-compilation-info.h Loading commit data...