aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorJorropo <jorropo.pgm@gmail.com>2024-08-09 16:35:46 +0200
committerKeith Randall <khr@golang.org>2024-09-03 17:12:58 +0000
commit57df33814afc02bda314abea28ee8a3dc997505c (patch)
tree738255f5f8eb76ff5df24ba5f7ce2e4f95fcdc6d /src/cmd
parent49621cc311a41b71f60f03202f3872c0633cac59 (diff)
downloadgo-57df33814afc02bda314abea28ee8a3dc997505c.tar.xz
cmd/compile: compute OR's maximum limits from argument's limits
Change-Id: I6902c405cab7bd573f6a721a6ca7c783713ea39a Reviewed-on: https://go-review.googlesource.com/c/go/+/604456 Reviewed-by: Keith Randall <khr@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: David Chase <drchase@google.com> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/compile/internal/ssa/prove.go6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go
index 5195a48608..807f198787 100644
--- a/src/cmd/compile/internal/ssa/prove.go
+++ b/src/cmd/compile/internal/ssa/prove.go
@@ -1698,10 +1698,12 @@ func (ft *factsTable) flowLimit(v *Value) bool {
b := ft.limits[v.Args[1].ID]
return ft.unsignedMax(v, minU(a.umax, b.umax))
case OpOr64, OpOr32, OpOr16, OpOr8:
- // OR can only make the value bigger.
+ // OR can only make the value bigger and can't flip bits proved to be zero in both inputs.
a := ft.limits[v.Args[0].ID]
b := ft.limits[v.Args[1].ID]
- return ft.unsignedMin(v, maxU(a.umin, b.umin))
+ return ft.unsignedMinMax(v,
+ maxU(a.umin, b.umin),
+ 1<<bits.Len64(a.umax|b.umax)-1)
case OpXor64, OpXor32, OpXor16, OpXor8:
// XOR can't flip bits that are proved to be zero in both inputs.
a := ft.limits[v.Args[0].ID]