[PATCH] D101722: [SCEV] Don't require ControlsExit for gt/lt NoWrap
Nikita Popov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 9 10:11:35 PDT 2021
nikic added a comment.
In D101722#2806912 <https://reviews.llvm.org/D101722#2806912>, @efriedma wrote:
> If I'm understanding correctly, the issue you're describing is that if %len is ULONG_MAX in the following loop, on trunk LLVM, the backedge-taken count comes out to zero.
Yes, exactly.
> This is because of the math in ScalarEvolution::computeBECount: we try to compute `ceil(a/b)` by converting it to `floor((a + b - 1) / b)`, which doesn't work. There are different ways we could address this. For example, we could change around the computation: we can compute `ceil(a/b)` by instead expanding it to `floor(a/b) + umin(a % b, 1)`.
Right. However, I'd expect alternative encodings to be a pessimization in practice. We only really get in this situation if `a` is non-constant, so this won't be folding away.
> I guess in the meantime, we should add the missing loopHasNoAbnormalExits() check.
Yeah, we should.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D101722/new/
https://reviews.llvm.org/D101722
More information about the llvm-commits
mailing list