[SimpleLoopBoundSplit] Split Bound of Loop which has conditional branch with IV
authorJingu Kang <jingu.kang@arm.com>
Thu, 6 May 2021 14:53:00 +0000 (15:53 +0100)
committerJingu Kang <jingu.kang@arm.com>
Mon, 7 Jun 2021 09:55:25 +0000 (10:55 +0100)
commita2a0ac42abcb57bd982a94534c219ac983572ac3
tree9aa6eae1faf76601519981a5905415dccb6b8c8e
parentb31f41e78b2722785f3df1da0d77dfcd68125d15
[SimpleLoopBoundSplit] Split Bound of Loop which has conditional branch with IV

This pass transforms loops that contain a conditional branch with induction
variable. For example, it transforms left code to right code:

                             newbound = min(n, c)
 while (iv < n) {            while(iv < newbound) {
   A                           A
   if (iv < c)                 B
     B                         C
   C                         }
 }                           if (iv != n) {
                               while (iv < n) {
                                 A
                                 C
                               }
                             }

Differential Revision: https://reviews.llvm.org/D102234
llvm/include/llvm/Transforms/Scalar/LoopBoundSplit.h [new file with mode: 0644]
llvm/lib/Passes/PassBuilder.cpp
llvm/lib/Passes/PassRegistry.def
llvm/lib/Transforms/Scalar/CMakeLists.txt
llvm/lib/Transforms/Scalar/LoopBoundSplit.cpp [new file with mode: 0644]
llvm/test/Transforms/LoopBoundSplit/loop-bound-split.ll [new file with mode: 0644]
llvm/utils/gn/secondary/llvm/lib/Transforms/Scalar/BUILD.gn