[runtimeunroll] Support multiple exits to latch exit w/prolog loop
authorPhilip Reames <listmail@philipreames.com>
Thu, 19 Aug 2021 18:41:09 +0000 (11:41 -0700)
committerPhilip Reames <listmail@philipreames.com>
Thu, 19 Aug 2021 18:43:52 +0000 (11:43 -0700)
commit17b9cb181775e47fb986dae45e2e2a38b84e33cf
tree3596d53a6bbd485d862875ad683f15792f2e335d
parent8d7d89b0811da55c9f4bf21682b563b0ce521f97
[runtimeunroll] Support multiple exits to latch exit w/prolog loop

This patch extends the runtime unrolling infrastructure to support unrolling a loop with multiple exiting blocks branching to the same exit block used by the latch. It intentionally does not include a cost model change to enable this functionality unless appropriate force flags are used.

This is the prolog companion to D107381. Since this was LGTMed, a problem with DT updating was reported against that patch.  I roled in the analogous fix here as it seemed obvious, and not worth re-review.

As an aside, our prolog form leaves a lot of potential value on the floor when there is an invariant load or invariant condition in the loop being runtime unrolled. We should probably consider a "required prolog" heuristic.  (Alternatively, maybe we should be peeling these cases more aggressively?)

Differential Revision: https://reviews.llvm.org/D108262
llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp
llvm/test/Transforms/LoopUnroll/runtime-loop-multiple-exits.ll