diff options
| author | Jorropo <jorropo.pgm@gmail.com> | 2024-08-09 16:35:46 +0200 |
|---|---|---|
| committer | Keith Randall <khr@golang.org> | 2024-09-03 17:12:58 +0000 |
| commit | 57df33814afc02bda314abea28ee8a3dc997505c (patch) | |
| tree | 738255f5f8eb76ff5df24ba5f7ce2e4f95fcdc6d /src | |
| parent | 49621cc311a41b71f60f03202f3872c0633cac59 (diff) | |
| download | go-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')
| -rw-r--r-- | src/cmd/compile/internal/ssa/prove.go | 6 |
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] |
