• jarin@chromium.org's avatar
    [turbofan] Do not use the generic graph algorithm for widening in the typer. · 2d07d762
    jarin@chromium.org authored
    This change uses an explicit queue for type-widening instead of the
    generic algorithm. The trouble with the generic algorithm was that it
    called the visitor on the same phi many times in a row (and thus caused
    unnecessary retyping). I also think that the queue-based fixpoint is
    more readable.
    
    The CL cuts running time of the nbody-java benchmark from ~19s to ~15s,
    the time spent in the typer goes from 4.5s to 1s. This is still a lot
    - the root cause appears to be slow handling of union subtyping
    (m*n for unions of sizes m and n). I see a re-typing of a
    single phi node taking > 100ms. I will work on a fix with Andreas,
    hopefully we can come up with some canonical representation
    of unions at least for the common cases (union of Smi constants).
    
    I have also changed the initial typer run to always compute a type, even
    if we already had a type for the node. This fixes one assert failure
    where context specialization updates a node without updating the type,
    which confuses the typer when widening (as some types suddenly narrow).
    
    BUG=
    R=bmeurer@chromium.org
    
    Review URL: https://codereview.chromium.org/689403002
    
    Cr-Commit-Position: refs/heads/master@{#25053}
    git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@25053 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
    2d07d762
typer.cc 55.1 KB