-
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