Fix scheduler to correctly schedule nested diamonds.
authorsigurds@chromium.org <sigurds@chromium.org>
Mon, 13 Oct 2014 13:07:49 +0000 (13:07 +0000)
committersigurds@chromium.org <sigurds@chromium.org>
Mon, 13 Oct 2014 13:07:49 +0000 (13:07 +0000)
commit0f5949d605023368820bc7cfe677e7540f72211e
tree181e380de524c26e7cec68862d3bc08873054e22
parent952690a148e35f9dd87b1478bc7b9989ad091211
Fix scheduler to correctly schedule nested diamonds.

The scheduler rewires control based on the last *control*
node that appears in the schedule of a block. This is not
sufficient to account for dependencies.

This patch adds additional dependencies to floating control
nodes. Given a floating control node A, every non-control
dependency of every node B that depends on A is introduces
as an additional dependency of A.

This allows the scheduler to correctly schedule two
diamonds A, B, if their only correct schedule is to
schedule B into the ifTrue successor in A.

TEST=cctest/test-scheduler/NestedFloatingDiamonds
R=mstarzinger@chromium.org, titzer@chromium.org

Review URL: https://codereview.chromium.org/602083003

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24561 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
src/compiler/scheduler.cc
src/compiler/scheduler.h
src/compiler/verifier.cc
test/cctest/compiler/test-scheduler.cc