]> Cypherpunks.ru repositories - gostls13.git/commit
cmd/compile: enhance induction variable detection for unrolled loops
authorDavid Chase <drchase@google.com>
Wed, 19 Sep 2018 20:20:35 +0000 (16:20 -0400)
committerDavid Chase <drchase@google.com>
Fri, 29 Mar 2019 20:08:07 +0000 (20:08 +0000)
commitd8f60eea64a568b272222960eb253bfc08cfbac2
tree16396234c088c6890d367662a48900ec6d5d79bd
parentc90f6dd4966087d85e1dcafc02b64ecb0c7f4e7e
cmd/compile: enhance induction variable detection for unrolled loops

Would suggest extending capabilities (32-bit, unsigned, etc)
in separate CLs because prove bugs are so mystifying.

This implements the suggestion in this comment
https://go-review.googlesource.com/c/go/+/104041/10/src/cmd/compile/internal/ssa/loopbce.go#164
for inferring properly bounded iteration for loops of the form

for i := K0; i < KNN-(K-1); i += K
for i := K0; i <= KNN-K;    i += K

Where KNN is "known non negative" (i.e., len or cap) and K
is also not negative.  Because i <= KNN-K, i+K <= KNN and
no overflow occurs.

Also handles decreasing case (K1 > 0)
for i := KNN; i >= K0; i -= K1
which works when MININT+K1 < K0
(i.e. MININT < K0-K1, no overflow)

Signed only, also only 64 bit for now.

Change-Id: I5da6015aba2f781ec76c4ad59c9c48d952325fdc
Reviewed-on: https://go-review.googlesource.com/c/go/+/136375
Run-TryBot: David Chase <drchase@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alexandru Moșoi <alexandru@mosoi.ro>
src/cmd/compile/internal/ssa/loopbce.go
test/prove.go