[llvm] [Passes] Move LoopInterchange into optimization pipeline (PR #145503)
Ryotaro Kasuga via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 27 07:16:33 PDT 2025
================
@@ -1547,6 +1544,10 @@ PassBuilder::buildModuleOptimizationPipeline(OptimizationLevel Level,
// this may need to be revisited once we run GVN before loop deletion
// in the simplification pipeline.
LPM.addPass(LoopDeletionPass());
+
+ if (PTO.LoopInterchange)
+ LPM.addPass(LoopInterchangePass());
----------------
kasuga-fj wrote:
Yes, collecting diverse data would be ideal, but since the current LoopInterchange is rarely triggered in practice, I haven’t been able to gather enough data to have a meaningful discussion about the optimal placement...
[TSVC s235](https://github.com/llvm/llvm-test-suite/blob/b9f9a11a1441741a3bc6e7221854418f26e9f465/MultiSource/Benchmarks/TSVC/tsc.inc#L2218-L2244) might be an interesting example. If LoopDistribute were extended to support non-innermost loops and it ran before LoopInterchange, the following could become possible:
Original:
```c
for (int nl = 0; nl < 200*(ntimes/LEN2); nl++)
for (int i = 0; i < LEN2; i++) {
a[i] += b[i] * c[i];
for (int j = 1; j < LEN2; j++) {
aa[j][i] = aa[j-1][i] + bb[j][i] * a[i];
}
}
```
Distributed:
```c
for (int nl = 0; nl < 200*(ntimes/LEN2); nl++)
for (int i = 0; i < LEN2; i++)
a[i] += b[i] * c[i];
for (int nl = 0; nl < 200*(ntimes/LEN2); nl++)
for (int i = 0; i < LEN2; i++)
for (int j = 1; j < LEN2; j++)
aa[j][i] = aa[j-1][i] + bb[j][i] * a[i];
```
Interchanged:
```c
for (int nl = 0; nl < 200*(ntimes/LEN2); nl++)
for (int i = 0; i < LEN2; i++)
a[i] += b[i] * c[i];
// The i-loop and j-loop are interchanged.
for (int nl = 0; nl < 200*(ntimes/LEN2); nl++)
for (int j = 1; j < LEN2; j++)
for (int i = 0; i < LEN2; i++)
aa[j][i] = aa[j-1][i] + bb[j][i] * a[i];
```
IIRC, when I ran the last code in the past, it was about 8x faster than the original. But achieving this would require a lot of work on LoopDistribute...
https://github.com/llvm/llvm-project/pull/145503
More information about the llvm-commits
mailing list