aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/prove.go
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2018-04-25 13:17:17 -0700
committerJosh Bleecher Snyder <josharian@gmail.com>2018-05-01 19:38:09 +0000
commit548e1f89363fd3054a0bd8961c6c6b8b8ecbcfaf (patch)
treec87c64f93b7a80677642e4b751c0e56cd9cb7349 /src/cmd/compile/internal/ssa/prove.go
parent31cfa7f2f2ec40715376aebfdddb8183f5a260dc (diff)
downloadgo-548e1f89363fd3054a0bd8961c6c6b8b8ecbcfaf.tar.gz
go-548e1f89363fd3054a0bd8961c6c6b8b8ecbcfaf.zip
cmd/compile: recognize some OpRsh64Ux64 Values as non-negative
Proves IsSliceInBounds one additional time building std+cmd, at encoding/hex/hex.go:187:8. The code is: if numAvail := len(d.in) / 2; len(p) > numAvail { p = p[:numAvail] } Previously we were unable to prove that numAvail >= 0. Change-Id: Ie74e0aef809f9194c45e129ee3dae60bc3eae02f Reviewed-on: https://go-review.googlesource.com/109415 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Giovanni Bajo <rasky@develer.com>
Diffstat (limited to 'src/cmd/compile/internal/ssa/prove.go')
-rw-r--r--src/cmd/compile/internal/ssa/prove.go4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go
index 03f657da8a..b30dab9fe3 100644
--- a/src/cmd/compile/internal/ssa/prove.go
+++ b/src/cmd/compile/internal/ssa/prove.go
@@ -1068,6 +1068,10 @@ func isNonNegative(v *Value) bool {
OpZeroExt8to64, OpZeroExt16to64, OpZeroExt32to64:
return true
+ case OpRsh64Ux64:
+ by := v.Args[1]
+ return by.Op == OpConst64 && by.AuxInt > 0
+
case OpRsh64x64:
return isNonNegative(v.Args[0])
}