Use DomTree in MachineSink to sink over diamonds.
authorPatrik Hagglund <patrik.h.hagglund@ericsson.com>
Thu, 4 Dec 2014 10:36:42 +0000 (10:36 +0000)
committerPatrik Hagglund <patrik.h.hagglund@ericsson.com>
Thu, 4 Dec 2014 10:36:42 +0000 (10:36 +0000)
commitd06de4b954ca5aa25070a25e471dffc6e03051e8
tree6d58d0faa45bf922ede87a8f4fe8938475c5776f
parentbe24ab367b0a9ccaa6c1e8653524ff81320deb33
Use DomTree in MachineSink to sink over diamonds.

According to a previous FIXME comment we now not only look at MBB
successors, but also handle code sinking past them:

  x = computation
  if () {} else {}
  use x

The instruction could be sunk over the whole diamond for the
if/then/else (or loop, etc), allowing it to be sunk into other blocks
after that.

Modified test added in r204522, due to one spill less present.

Minor fixes in comments.

Patch provided by Jonas Paulsson. Reviewed by Hal Finkel.

llvm-svn: 223350
llvm/lib/CodeGen/MachineSink.cpp
llvm/test/CodeGen/X86/ragreedy-hoist-spill.ll