Begin chipping away at one of the biggest quadratic-ish behaviors in
authorChandler Carruth <chandlerc@gmail.com>
Mon, 14 Nov 2011 09:46:33 +0000 (09:46 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Mon, 14 Nov 2011 09:46:33 +0000 (09:46 +0000)
commitfa97658b1c71f747cfe0f3e1f1bcbd86d7fa9f75
tree8dfe0487ad66c83db82e27c5e8b38e9323e83ccb
parent340d596509129de8c3fa9dbe4184a2b148b78757
Begin chipping away at one of the biggest quadratic-ish behaviors in
this pass. We're leaving already merged blocks on the worklist, and
scanning them again and again only to determine each time through that
indeed they aren't viable. We can instead remove them once we're going
to have to scan the worklist. This is the easy way to implement removing
them. If this remains on the profile (as I somewhat suspect it will), we
can get a lot more clever here, as the worklist's order is essentially
irrelevant. We can use swapping and fold the two loops to reduce
overhead even when there are many blocks on the worklist but only a few
of them are removed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144531 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/MachineBlockPlacement.cpp