[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