• Benedikt Meurer's avatar
    [turbofan] Collect and consume (ReceiverOr)Oddball feedback for StrictEqual. · 8f00d61d
    Benedikt Meurer authored
    This CL introduces proper Oddball and ReceiverOrOddball states for the
    CompareOperationFeedback, and updates the StrictEqual IC to collect this
    feedback as well. Previously it would not collect Oddball feedback, not
    even in the sense of NumberOrOddball, since that's not usable for the
    SpeculativeNumberEqual.
    
    The new feedback is handled via newly introduced CheckReceiverOrOddball
    and CheckOddball operators in TurboFan, introduced by JSTypedLowering.
    Just like with the Receiver feedback, it's enough to check one side and
    do a ReferenceEqual afterwards, since strict equal can only yield true
    if both sides refer to the same instance.
    
    This improves the benchmark mentioned in http://crbug.com/v8/8356 from
    
      naive: 2950 ms.
      tenary: 2456 ms.
    
    to around
    
      naive: 2996 ms.
      tenary: 2192 ms.
    
    which corresponds to a roughly 10% improvement in the case for the
    tenary pattern, which is currently used by dart2js. In real world
    scenarios this will probably help even more, since TurboFan is able
    to optimize across the strict equality, i.e. there's no longer a stub
    call forcibly spilling all registers that are live across the call.
    
    This new feedback will be used as a basis for the JSEqual support for
    ReceiverOrOddball, which will allow dart2js switching to the shorter
    a==b form, at the same peak performance.
    
    Bug: v8:8356
    Change-Id: Iafbf5d64fcc9312f9e575b54c32c631ce9b572b2
    Reviewed-on: https://chromium-review.googlesource.com/c/1297309Reviewed-by: 's avatarJaroslav Sevcik <jarin@chromium.org>
    Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#56925}
    8f00d61d
js-operator.cc 56.4 KB