mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: clarify division bounds check optimization
The name of the function should mention division. Eliminate double negatives from the comment describing it. Change-Id: Icef1a5139b3a91b86acb930af97938f5160f7342 Reviewed-on: https://go-review.googlesource.com/c/go/+/217001 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
This commit is contained in:
parent
e932f0addc
commit
1b47fde55c
4 changed files with 9 additions and 7 deletions
|
|
@ -257,7 +257,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
|
||||||
|
|
||||||
// CPU faults upon signed overflow, which occurs when the most
|
// CPU faults upon signed overflow, which occurs when the most
|
||||||
// negative int is divided by -1. Handle divide by -1 as a special case.
|
// negative int is divided by -1. Handle divide by -1 as a special case.
|
||||||
if ssa.NeedsFixUp(v) {
|
if ssa.DivisionNeedsFixUp(v) {
|
||||||
var c *obj.Prog
|
var c *obj.Prog
|
||||||
switch v.Op {
|
switch v.Op {
|
||||||
case ssa.OpAMD64DIVQ:
|
case ssa.OpAMD64DIVQ:
|
||||||
|
|
|
||||||
|
|
@ -1243,9 +1243,11 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) {
|
||||||
divdLim, divdLimok := ft.limits[divd.ID]
|
divdLim, divdLimok := ft.limits[divd.ID]
|
||||||
if (divrLimok && (divrLim.max < -1 || divrLim.min > -1)) ||
|
if (divrLimok && (divrLim.max < -1 || divrLim.min > -1)) ||
|
||||||
(divdLimok && divdLim.min > mostNegativeDividend[v.Op]) {
|
(divdLimok && divdLim.min > mostNegativeDividend[v.Op]) {
|
||||||
v.AuxInt = 1 // see NeedsFixUp in genericOps - v.AuxInt = 0 means we have not proved
|
// See DivisionNeedsFixUp in rewrite.go.
|
||||||
// that the divisor is not -1 and the dividend is not the most negative,
|
// v.AuxInt = 1 means we have proved both that the divisor is not -1
|
||||||
// so we need to add fix-up code.
|
// and that the dividend is not the most negative integer,
|
||||||
|
// so we do not need to add fix-up code.
|
||||||
|
v.AuxInt = 1
|
||||||
if b.Func.pass.debug > 0 {
|
if b.Func.pass.debug > 0 {
|
||||||
b.Func.Warnl(v.Pos, "Proved %v does not need fix-up", v.Op)
|
b.Func.Warnl(v.Pos, "Proved %v does not need fix-up", v.Op)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -480,8 +480,8 @@ func extend32Fto64F(f float32) float64 {
|
||||||
return math.Float64frombits(r)
|
return math.Float64frombits(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NeedsFixUp reports whether the division needs fix-up code.
|
// DivisionNeedsFixUp reports whether the division needs fix-up code.
|
||||||
func NeedsFixUp(v *Value) bool {
|
func DivisionNeedsFixUp(v *Value) bool {
|
||||||
return v.AuxInt == 0
|
return v.AuxInt == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -199,7 +199,7 @@ func ssaGenValue(s *gc.SSAGenState, v *ssa.Value) {
|
||||||
if v.Op == ssa.Op386DIVL || v.Op == ssa.Op386DIVW ||
|
if v.Op == ssa.Op386DIVL || v.Op == ssa.Op386DIVW ||
|
||||||
v.Op == ssa.Op386MODL || v.Op == ssa.Op386MODW {
|
v.Op == ssa.Op386MODL || v.Op == ssa.Op386MODW {
|
||||||
|
|
||||||
if ssa.NeedsFixUp(v) {
|
if ssa.DivisionNeedsFixUp(v) {
|
||||||
var c *obj.Prog
|
var c *obj.Prog
|
||||||
switch v.Op {
|
switch v.Op {
|
||||||
case ssa.Op386DIVL, ssa.Op386MODL:
|
case ssa.Op386DIVL, ssa.Op386MODL:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue