From ffb70bc8439325b541536355ddfd4991adda2ed9 Mon Sep 17 00:00:00 2001 From: "svenpanne@chromium.org" Date: Thu, 8 Sep 2011 07:40:11 +0000 Subject: [PATCH] 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 --- src/hydrogen.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hydrogen.cc b/src/hydrogen.cc index 01046bf9bf..237352cd1e 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -1675,7 +1675,9 @@ void HInferRepresentation::Analyze() { bool change = true; while (change) { 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); for (HUseIterator it(phi->uses()); !it.Done(); it.Advance()) { HValue* use = it.value();