[all-commits] [llvm/llvm-project] 7e59b2: [SCEV] Support addrec in right hand side in howMan...

vaibhav via All-commits all-commits at lists.llvm.org
Tue Jun 25 14:34:19 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 7e59b20034aa77d69e5218ff44e3cba8a500f76a
      https://github.com/llvm/llvm-project/commit/7e59b20034aa77d69e5218ff44e3cba8a500f76a
  Author: vaibhav <73255802+mrdaybird at users.noreply.github.com>
  Date:   2024-06-25 (Tue, 25 Jun 2024)

  Changed paths:
    M llvm/lib/Analysis/ScalarEvolution.cpp
    A llvm/test/Analysis/ScalarEvolution/pr92560.ll

  Log Message:
  -----------
  [SCEV] Support addrec in right hand side in howManyLessThans (#92560)

Fixes #92554 (std::reverse will auto-vectorize now)

When calculating number of times a exit condition containing a
comparison is executed, we mostly assume that RHS of comparison should
be loop invariant, but it may be another add-recurrence.

~In that case, we can try the computation with `LHS = LHS - RHS` and
`RHS = 0`.~ (It is not valid unless proven that it doesn't wrap)

**Edit:**
We can calculate back edge count for loop structure like:

```cpp
left = left_start
right = right_start
while(left < right){
  // ...do something...
  left += s1; // the stride of left is s1 (> 0)
  right -= s2; // the stride of right is -s2 (s2 > 0)
}
// left and right converge somewhere in the middle of their start values
```
We can calculate the backedge-count as ceil((End - left_start) /u (s1-
(-s2)) where, End = max(left_start, right_start).

**Alive2**: https://alive2.llvm.org/ce/z/ggxx58



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