HomePhabricator

[LoopUnroll] Implement profile-based loop peeling

Description

[LoopUnroll] Implement profile-based loop peeling

This implements PGO-driven loop peeling.

The basic idea is that when the average dynamic trip-count of a loop is known,
based on PGO, to be low, we can expect a performance win by peeling off the
first several iterations of that loop.
Unlike unrolling based on a known trip count, or a trip count multiple, this
doesn't save us the conditional check and branch on each iteration. However,
it does allow us to simplify the straight-line code we get (constant-folding,
etc.). This is important given that we know that we will usually only hit this
code, and not the actual loop.

This is currently disabled by default.

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

Details

Committed
mkuperNov 30 2016, 1:13 PM
Differential Revision
D25963: [LoopUnroll] Implement profile-based loop peeling
Parents
rL288273: [InstCombine] allow more narrowing transforms for logic ops
Branches
Unknown
Tags
Unknown