diff options
author | Giovanni Bajo <rasky@develer.com> | 2018-04-03 18:59:44 +0200 |
---|---|---|
committer | Giovanni Bajo <rasky@develer.com> | 2018-04-29 09:37:15 +0000 |
commit | 29162ec9a7d4ee08a558729236cd9bf50febee09 (patch) | |
tree | 26ef561247d173afbea94ab1e15801ad6d531c70 /src/cmd/compile/internal/ssa/prove.go | |
parent | 5c40210987844c7a64eb0bfcb781ed865d9c4b7f (diff) | |
download | go-29162ec9a7d4ee08a558729236cd9bf50febee09.tar.gz go-29162ec9a7d4ee08a558729236cd9bf50febee09.zip |
cmd/compile: in prove, infer unsigned relations while branching
When a branch is followed, we apply the relation as described
in the domain relation table. In case the relation is in the
positive domain, we can also infer an unsigned relation if,
by that point, we know that both operands are non-negative.
Fixes #20393
Change-Id: Ieaf0c81558b36d96616abae3eb834c788dd278d5
Reviewed-on: https://go-review.googlesource.com/100278
Run-TryBot: Giovanni Bajo <rasky@develer.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Giovanni Bajo <rasky@develer.com>
Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src/cmd/compile/internal/ssa/prove.go')
-rw-r--r-- | src/cmd/compile/internal/ssa/prove.go | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index a11b46566d..371009a57d 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -704,6 +704,9 @@ func addBranchRestrictions(ft *factsTable, b *Block, br branch) { // When we branched from parent we learned a new set of // restrictions. Update the factsTable accordingly. d := tr.d + if d == signed && ft.isNonNegative(c.Args[0]) && ft.isNonNegative(c.Args[1]) { + d |= unsigned + } switch br { case negative: switch b.Control.Op { // Special cases |