[PATCH] D76132: [LoopUnrollAndJam] Changed safety checks to consider more than 2-levels loop nest.

Michael Kruse via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sat Mar 28 07:00:13 PDT 2020


Meinersbur added a comment.

In D76132#1947821 <https://reviews.llvm.org/D76132#1947821>, @Whitney wrote:

> I am still confused. Your version only allow GT (by checking == GT). My version only allow GT, LT, NE (by checking ! &EQ). So both versions requires us to check further with GE.
>  I was trying to use
>
>   for i
>     for j        <= unroll loop
>       for k
>          S1: A[i][j][k]
>          S2: A[i-1][j+1][k-1]
>
>
> as an example, where your version would consider as unsafe and my version would consider as safe.
>  Am I correct to think loop-j is safe to unroll and jam?


Yes

> If yes, do you have an example where LT or NE for loop-i should be considered as unsafe for unroll and jam loop-j?

My justification, as laid out in the comments, is that a GT dependency ensures that the dependency vector is lexicographic positive. An LT or NE dependency does not do that. I would need to see an argument -- not an example -- why LT or NE provide safety. Also consider that DependencyInfo can overapproximate direction bits, so there may not be an example with exactly these direction vectors.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D76132/new/

https://reviews.llvm.org/D76132





More information about the llvm-commits mailing list