llvm-project/llvm/test/Transforms/LoopFusion
Whitney Tsang e44f4a8a54 [LoopFusion] Move instructions from FC1.GuardBlock to FC0.GuardBlock and
from FC0.ExitBlock to FC1.ExitBlock when proven safe.

Summary:
Currently LoopFusion give up when the second loop nest guard
block or the first loop nest exit block is not empty. For example:

if (0 < N) {
  for (int i = 0; i < N; ++i) {}
  x+=1;
}
y+=1;
if (0 < N) {
  for (int i = 0; i < N; ++i) {}
}
The above example should be safe to fuse.
This PR moves instructions in FC1 guard block (e.g. y+=1;) to
FC0 guard block, or instructions in FC0 exit block (e.g. x+=1;) to
FC1 exit block, which then LoopFusion is able to fuse them.
Reviewer: kbarton, jdoerfert, Meinersbur, dmgreen, fhahn, hfinkel,
bmahjour, etiotto
Reviewed By: jdoerfert
Subscribers: hiraditya, llvm-commits
Tag: LLVM
Differential Revision: https://reviews.llvm.org/D73641
2020-01-30 18:02:22 +00:00
..
cannot_fuse.ll [LoopFusion] Restrict loop fusion to rotated loops. 2019-12-16 15:17:29 -05:00
diagnostics_analysis.ll
diagnostics_missed.ll [LoopFusion] Move instructions from FC1.GuardBlock to FC0.GuardBlock and 2020-01-30 18:02:22 +00:00
four_loops.ll [LoopFusion] Move instructions from FC0.Latch to FC1.Latch. 2019-12-17 22:10:23 +00:00
guarded.ll [LoopFusion] Move instructions from FC1.GuardBlock to FC0.GuardBlock and 2020-01-30 18:02:22 +00:00
inner_loops.ll
loop_nest.ll [LoopFusion] Move instructions from FC0.Latch to FC1.Latch. 2019-12-17 22:10:23 +00:00
simple.ll [LoopFusion] Move instructions from FC1.Preheader to FC0.Preheader when 2020-01-29 15:06:11 +00:00