HomePhabricator

Rework loop predication pass

Description

Rework loop predication pass

We've found a serious issue with the current implementation of loop predication.
The current implementation relies on SCEV and this turned out to be problematic.
To fix the problem we had to rework the pass substantially. We have had the
reworked implementation in our downstream tree for a while. This is the initial
patch of the series of changes to upstream the new implementation.

For now the transformation is limited to the following case:

  • The loop has a single latch with either ult or slt icmp condition.
  • The step of the IV used in the latch condition is 1.
  • The IV of the latch condition is the same as the post increment IV of the guard condition.
  • The guard condition is ult.

See the review or the LoopPredication.cpp header for the details about the
problem and the new implementation.

Reviewed By: sanjoy, mkazantsev

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

Details

Committed
apilipenkoSep 22 2017, 6:13 AM
Reviewer
sanjoy
Differential Revision
D37569: Rework loop predication pass
Parents
rL313980: Remove the default clause from a fully-covering switch
Branches
Unknown
Tags
Unknown