[turbofan] Do not use the generic graph algorithm for widening in the typer.
authorjarin@chromium.org <jarin@chromium.org>
Mon, 3 Nov 2014 06:09:51 +0000 (06:09 +0000)
committerjarin@chromium.org <jarin@chromium.org>
Mon, 3 Nov 2014 06:10:18 +0000 (06:10 +0000)
commit2d07d762448c4a051186719e20c09cd89c034cde
treeaa2cfb12b95cba9c9a272a48de64781f44e38ad8
parent8c5fdd0575079324a9a2a5a905075db23cc6177b
[turbofan] Do not use the generic graph algorithm for widening in the typer.

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
src/compiler/typer.cc