Improved phi reachability computation a bit.

The use-def relation between phis is mainly "forwards" (i.e. from phis with
smaller IDs to ones with larger IDs), so the fixed point computation terminates
faster when iterate through the phis in a "backwards" manner. This is quite
visible in complex Mandreel-generated code, where a few hundred phis with
non-trivial use-def chains are generated.
Review URL: http://codereview.chromium.org/7848012

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9185 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
svenpanne@chromium.org 2011-09-08 07:40:11 +00:00
parent 6bcf162853
commit ffb70bc843

View File

@ -1675,7 +1675,9 @@ void HInferRepresentation::Analyze() {
bool change = true; bool change = true;
while (change) { while (change) {
change = false; change = false;
for (int i = 0; i < phi_count; ++i) { // We normally have far more "forward edges" than "backward edges",
// so we terminate faster when we walk backwards.
for (int i = phi_count - 1; i >= 0; --i) {
HPhi* phi = phi_list->at(i); HPhi* phi = phi_list->at(i);
for (HUseIterator it(phi->uses()); !it.Done(); it.Advance()) { for (HUseIterator it(phi->uses()); !it.Done(); it.Advance()) {
HValue* use = it.value(); HValue* use = it.value();