6 Commits

Author SHA1 Message Date
Max Kazantsev
76f6bf2a28 [NFC] Add clarification comment
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330677 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-24 02:08:05 +00:00
Max Kazantsev
7321142107 [LoopRotate] Fix incorrect SCEV invalidation in loop rotation
LoopRotate only invalidates innermost loops while the changes that it makes may
also affert any of this parents. With patch rL329047, SCEV becomes much smarter
about calculation of exit counts for outer loops, so we cannot assume that they are
not affected.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330582 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-23 12:33:31 +00:00
Jin Lin
a5747ee16d Refine the loop rotation's API
Summary:
The following changes addresses the following two issues.

1) The existing loop rotation pass contains both loop latch simplification and loop rotation. So one flag RotationOnly is added to be passed to the loop rotation pass.
2) The threshold value is initialized with MAX_UINT since the loop rotation utility should not have threshold limit.

Reviewers: dmgreen, efriedma

Reviewed By: efriedma

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@330362 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-19 20:29:43 +00:00
David Green
a9bfe02006 [LoopRotate] Rotate loops with loop exiting latches
If a loop has a loop exiting latch, it can be profitable
to rotate the loop if it leads to the simplification of
a phi node. Perform rotation in these cases even if loop
rotate itself didnt simplify the loop to get there.

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328933 91177308-0d34-0410-b5e6-96231b3b80d8
2018-04-01 12:48:24 +00:00
David Blaikie
96dbd9b711 Remove unused headers to fix layering
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328840 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-29 22:31:39 +00:00
David Green
14d04397ce [LoopRotate] Restructuring LoopRotation.cpp to create Loop Rotation Pass with Loop Rotation Utility Interface
The existing LoopRotation.cpp is implemented as one of loop passes instead of
being a utility. The user cannot easily perform the loop rotation selectively
(or on demand) under different optimization level. For example, the loop
rotation is needed as part of the logic to convert a loop into a loop with
bottom test for a transformation. If the loop rotation is simply added as a
loop pass before the transformation, the pass is skipped if it is compiled at
–O0 or if it is explicitly disabled by the user, causing the compiler to
generate incorrect code. Furthermore, as a loop pass it will rotate all loops
instead of just the relevant loops.

We provide a utility interface for the loop rotation so that the loop rotation
can be called on demand. The changeset is as follows:

- Create a new file lib/Transforms/Utils/LoopRotationUtils.cpp and move the main
  implementation of class LoopRotate into this file.
- Create a new file llvm/include/Transform/Utils/LoopRotationUtils.h with the
  interface LoopRotation(...).
- Original LoopRotation.cpp is changed to use the utility function LoopRotation
  in LoopRotationUtils.cpp. This is done in the same way community did for
  mem-to-reg implementation.

Patch by Jin Lin!

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328766 91177308-0d34-0410-b5e6-96231b3b80d8
2018-03-29 08:48:15 +00:00