[llvm] [SCEV] Strip incorrect code in proving RHS > Start in howManyLT (PR #222878)

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Sat Sep 12 12:34:51 PDT 2026


https://github.com/fhahn commented:

It would probably be good to have test coverage for the code path, I think something like the below should do

```
; opt -passes='print<scalar-evolution>' 
define i32 @guarded_nested_loop(i32 %start, i32 %rhs, i32 %end) {
entry:
  br label %outer

outer:
  %o = phi i32 [ %start, %entry ], [ %o.next, %outer.latch ]
  %before = sub i32 %o, 1
  %guard = icmp ugt i32 %rhs, %before
  br i1 %guard, label %inner, label %outer.latch

inner:
  %iv = phi i32 [ %o, %outer ], [ %next, %inner ]
  %next = add nuw i32 %iv, 2
  %cmp = icmp ult i32 %iv, %rhs
  br i1 %cmp, label %inner, label %outer.latch

outer.latch:
  %result = phi i32 [ %o, %outer ], [ %iv, %inner ]
  %o.next = add i32 %o, 1
  %continue = icmp ne i32 %o.next, %end
  br i1 %continue, label %outer, label %exit

exit:
  ret i32 %result
}
```

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


More information about the llvm-commits mailing list