[llvm] Add test for imperfect loop nest in LoopInterchange (PR #201507)

Ryotaro Kasuga via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 4 09:22:45 PDT 2026


================

----------------
kasuga-fj wrote:

Generally speaking, tests should be minimized as possible. For example, in this case, `target layout`, `target triple`, unused function parameters, and function attributes are at least unnecessary. Also please use more descriptive variable names. So, what I expect is something like

```llvm
; RUN: opt ...
;
; for (i = 0; i < 64; i++) {
;   for (j = 0; j < 64; j++)
;     for (r = 0; r < 64; r++)
;       A[j][r] = 0;
; 
;   for (k = 0; k < 64; k++)
;     for (l = 0; l < 64; l++)
;       B[l][k] = 0;
; }
;
define void @f(ptr noalias %A, ptr noalias %B) {
entry:
  br label %for.i.header

for.i.header:
  %i = phi i64 [ 0, %entry ], [ %i.inc, %for.i.latch ]
  br label %for.j.header

for.j.header:
  %j = phi i64 [ 0, %for.i.header ], [ %j.inc, %for.j.latch ]
  br label %for.r

for.r:
  %r = phi i64 [ 0, %for.j.header ], [ %r.inc, %for.r ]
  %ptr.A = getelementptr [64 x i8], ptr %A, %j, %r
  store i8 0, ptr %ptr.A
  %r.inc = add i64 %r, 1
  %ec.r = icmp eq i64 %r.inc, 64
  br i1 %ec.r, %for.j.latch, %for.r

for.j.latch:
  %j.inc = add i64 %j, 1
  %ec.j = icmp eq i64 %j.inc, 64
  br i1 %ec.j, label %for.k.header, %for.j.header

for.k.header:
  ...
}
```

Regarding the terms like "header" or "latch", see [LLVM Loop Terminology](https://llvm.org/docs/LoopTerminology.html).

https://github.com/llvm/llvm-project/pull/201507


More information about the llvm-commits mailing list