• 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
..
api Loading commit data...
asmjs Loading commit data...
ast Loading commit data...
base Loading commit data...
builtins Loading commit data...
codegen Loading commit data...
common Loading commit data...
compiler Loading commit data...
compiler-dispatcher Loading commit data...
d8 Loading commit data...
date Loading commit data...
debug Loading commit data...
deoptimizer Loading commit data...
diagnostics Loading commit data...
execution Loading commit data...
extensions Loading commit data...
flags Loading commit data...
handles Loading commit data...
heap Loading commit data...
ic Loading commit data...
init Loading commit data...
inspector Loading commit data...
interpreter Loading commit data...
json Loading commit data...
libplatform Loading commit data...
libsampler Loading commit data...
logging Loading commit data...
numbers Loading commit data...
objects Loading commit data...
parsing Loading commit data...
profiler Loading commit data...
protobuf Loading commit data...
regexp Loading commit data...
roots Loading commit data...
runtime Loading commit data...
sanitizer Loading commit data...
snapshot Loading commit data...
strings Loading commit data...
tasks Loading commit data...
third_party Loading commit data...
torque Loading commit data...
tracing Loading commit data...
trap-handler Loading commit data...
utils Loading commit data...
wasm Loading commit data...
zone Loading commit data...
DEPS Loading commit data...
OWNERS Loading commit data...