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)<<changingBitsCount - 1)
+ fixedBits := a.umax & sharedLeadingMask
+ min := uint64(bits.OnesCount64(fixedBits))
+ return ft.unsignedMinMax(v, min, min+changingBitsCount)
+
case OpBitLen64:
a := ft.limits[v.Args[0].ID]
return ft.unsignedMinMax(v,
return z
}
+func onesCountsTight(x uint64, ensureAllBranchesCouldHappen func() bool) int {
+ const maxv = 0xff0f
+ const minv = 0xff00
+ x = max(x, minv)
+ x = min(x, maxv)
+
+ z := bits.OnesCount64(x)
+
+ if ensureAllBranchesCouldHappen() && z > 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() {
}