[LoopPredication] Add profitability check based on BPI
authorAnna Thomas <anna@azul.com>
Thu, 22 Mar 2018 16:03:59 +0000 (16:03 +0000)
committerAnna Thomas <anna@azul.com>
Thu, 22 Mar 2018 16:03:59 +0000 (16:03 +0000)
commit9b1176b0efd996b95481cd77443e26ab76903139
tree76b362e2cd0ee0cc9cd7cb83b9b70104abdedff6
parent0368417595fad53d95e25c4d6de4e5e4cd726fbf
[LoopPredication] Add profitability check based on BPI

Summary:
LoopPredication is not profitable when the loop is known to always exit
through some block other than the latch block.
A coarse grained latch check can cause loop predication to predicate the
loop, and unconditionally deoptimize.

However, without predicating the loop, the guard may never fail within the
loop during the dynamic execution because the non-latch loop termination
condition exits the loop before the latch condition causes the loop to
exit.
We teach LP about this using BranchProfileInfo pass.

Reviewers: apilipenko, skatkov, mkazantsev, reames

Reviewed by: skatkov

Subscribers: llvm-commits

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

llvm-svn: 328210
llvm/lib/Transforms/Scalar/LoopPredication.cpp
llvm/test/Transforms/LoopPredication/profitability.ll [new file with mode: 0644]