HomePhabricator

[LOOPINFO] Extend Loop object to add utilities to get the loop bounds, step…

Description

[LOOPINFO] Extend Loop object to add utilities to get the loop bounds, step, induction variable, and guard branch.

Summary:
This PR extends the loop object with more utilities to get loop bounds, step, induction variable, and guard branch. There already exists passes which try to obtain the loop induction variable in their own pass, e.g. loop interchange. It would be useful to have a common area to get these information. Moreover, loop fusion (https://reviews.llvm.org/D55851) is planning to use getGuard() to extend the kind of loops it is able to fuse, e.g. rotated loop with non-constant upper bound, which would have a loop guard.

  /// Example:
  /// for (int i = lb; i < ub; i+=step)
  ///   <loop body>
  /// --- pseudo LLVMIR ---
  /// beforeloop:
  ///   guardcmp = (lb < ub)
  ///   if (guardcmp) goto preheader; else goto afterloop
  /// preheader:
  /// loop:
  ///   i1 = phi[{lb, preheader}, {i2, latch}]
  ///   <loop body>
  ///   i2 = i1 + step
  /// latch:
  ///   cmp = (i2 < ub)
  ///   if (cmp) goto loop
  /// exit:
  /// afterloop:
  ///
  /// getBounds
  ///   getInitialIVValue      --> lb
  ///   getStepInst            --> i2 = i1 + step
  ///   getStepValue           --> step
  ///   getFinalIVValue        --> ub
  ///   getCanonicalPredicate  --> '<'
  ///   getDirection           --> Increasing
  /// getGuard             --> if (guardcmp) goto loop; else goto afterloop
  /// getInductionVariable          --> i1
  /// getAuxiliaryInductionVariable --> {i1}
  /// isCanonical                   --> false

Committed on behalf of @Whitney (Whitney Tsang).

Reviewers: kbarton, hfinkel, dmgreen, Meinersbur, jdoerfert, syzaara, fhahn

Reviewed By: kbarton

Subscribers: tvvikram, bmahjour, etiotto, fhahn, jsji, hiraditya, llvm-commits

Tags: #llvm

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

Details

Committed
kbartonMay 23 2019, 10:56 AM
Parents
rL361516: [WebAssembly] Add multivalue and tail-call target features
Branches
Unknown
Tags
Unknown