MacroFusion: Fix macro fusion with ExitSU failing in top-down scheduling
authorMatthias Braun <matze@braunis.de>
Thu, 26 Jul 2018 17:43:56 +0000 (17:43 +0000)
committerMatthias Braun <matze@braunis.de>
Thu, 26 Jul 2018 17:43:56 +0000 (17:43 +0000)
commit09810c9269dce1745f81601d364b9aeea286c200
tree97d67ae73591e436c5209cbd139eaa6890724f12
parent1eee1b771f43761e39c1e3bc9e0c31b078290240
MacroFusion: Fix macro fusion with ExitSU failing in top-down scheduling

When fusing instructions A and B, we must add all predecessors of B as
predecessors of A to avoid instructions getting scheduling in between.

There is a special case involving ExitSU: Every other node must be
scheduled before it by design and we don't need to make this explicit in
the graph, however when fusing with a different node we need to schedule
every othere node before the fused node too and we need to make this
explicit now: This patch adds a dependency from the fused node to all
roots in the graph.

Differential Revision: https://reviews.llvm.org/D49830

llvm-svn: 338046
llvm/lib/CodeGen/MacroFusion.cpp
llvm/test/CodeGen/AArch64/macro-fusion-last.mir [new file with mode: 0644]