diff --git a/src/cmd/compile/internal/ssa/prove.go b/src/cmd/compile/internal/ssa/prove.go index 9fedbdbbc9..1b5989e6e5 100644 --- a/src/cmd/compile/internal/ssa/prove.go +++ b/src/cmd/compile/internal/ssa/prove.go @@ -1732,6 +1732,14 @@ func (ft *factsTable) flowLimit(v *Value) bool { return ft.unsignedMax(v, uint64(bits.Len8(uint8(a.umax))-1)) } + case OpPopCount64, OpPopCount32, OpPopCount16, OpPopCount8: + a := ft.limits[v.Args[0].ID] + changingBitsCount := uint64(bits.Len64(a.umax ^ a.umin)) + sharedLeadingMask := ^(uint64(1)< bits.OnesCount64(maxv) { // ERROR "Disproved Less64$" + return 42 + } + if ensureAllBranchesCouldHappen() && z <= bits.OnesCount64(maxv) { // ERROR "Proved Leq64$" + return 4242 + } + if ensureAllBranchesCouldHappen() && z < bits.OnesCount64(minv) { // ERROR "Disproved Less64$" + return 424242 + } + if ensureAllBranchesCouldHappen() && z >= bits.OnesCount64(minv) { // ERROR "Proved Leq64$" + return 42424242 + } + return z +} + func main() { }