• Jakob Gruber's avatar
    [regexp] Restructure fast path check logic · c6b1ef0e
    Jakob Gruber authored
    Prior to this CL, the regexp fast path check is stricter than it
    needs to be. For example, adding any arbitrary property on the regexp
    prototype would move the execution of all regexp builtins in the same
    context onto the slow path. This actually happens in the real world:
    popular web frameworks commonly monkey-patch builtin prototypes to add
    functionality.
    
    The intent of this CL is to widen the fast path for regexp builtins s.t.
    modifications of the prototype that do not conflict with our
    requirements stay on the fast path.
    
    This is done by extending the current fast path check with an
    additional step. If checking the prototype map identity or
    relevant prototype property constness fails, we now compare the actual
    value of all relevant properties against the expected value. If these
    match, the prototype can be considered fast.
    
    The new step as described in the previous paragraph is part of the
    permissive fast path check (BranchIfFastRegExp_Permissive). The strict
    variant (BranchIfFastRegExp_Strict) is also still required by a few
    spots. We should refactor these to also allow the permissive check in
    follow-up work.
    
    Bug: v8:5577,chromium:977382
    Change-Id: I69b2244e68ccfbd00edf17fc326aa4b5f5d089fa
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1706056
    Commit-Queue: Jakob Gruber <jgruber@chromium.org>
    Reviewed-by: 's avatarClemens Hammacher <clemensh@chromium.org>
    Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
    Reviewed-by: 's avatarPeter Marshall <petermarshall@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#62948}
    c6b1ef0e
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...