[all-commits] [llvm/llvm-project] 8da5aa: [mlir][SCF] Fix dynamic loop pipeline peeling for ...

SJW via All-commits all-commits at lists.llvm.org
Tue Oct 15 13:14:10 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 8da5aa16f65bc297663573bacd3030f975b9fcde
      https://github.com/llvm/llvm-project/commit/8da5aa16f65bc297663573bacd3030f975b9fcde
  Author: SJW <48454132+sjw36 at users.noreply.github.com>
  Date:   2024-10-15 (Tue, 15 Oct 2024)

  Changed paths:
    M mlir/lib/Dialect/SCF/Transforms/LoopPipelining.cpp
    M mlir/test/Dialect/SCF/loop-pipelining.mlir

  Log Message:
  -----------
  [mlir][SCF] Fix dynamic loop pipeline peeling for num_stages > total_iters (#112418)

When pipelining an `scf.for` with dynamic loop bounds, the epilogue
ramp-down must align with the prologue when num_stages >
total_iterations.

For example:
```
scf.for (0..ub) {
  load(i)
  add(i)
  store(i)
}
```
When num_stages=3 the pipeline follows:
```
load(0)  -  add(0)      -  scf.for (0..ub-2)    -  store(ub-2)
            load(1)     -                       -  add(ub-1)     -  store(ub-1)

```
The trailing `store(ub-2)`, `i=ub-2`, must align with the ramp-up for
`i=0` when `ub < num_stages-1`, so the index `i` should be `max(0,
ub-2)` and each subsequent index is an increment. The predicate must
also handle this scenario, so it becomes `predicate[0] =
total_iterations > epilogue_stage`.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list