mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: use proved bounds to remove signed division fix-ups
prove is able to find 94 occurrences in std cmd where a divisor can't have the value -1. The change removes the extraneous fix-up code for these cases. Fixes #25239 Change-Id: Ic184de971f47cc57c702eb72805b8e291c14035d Reviewed-on: https://go-review.googlesource.com/c/130215 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
47cc59f31f
commit
13d5cd7847
14 changed files with 299 additions and 98 deletions
|
|
@ -66,23 +66,26 @@ var genericOps = []opData{
|
|||
{name: "Avg32u", argLength: 2, typ: "UInt32"}, // 32-bit platforms only
|
||||
{name: "Avg64u", argLength: 2, typ: "UInt64"}, // 64-bit platforms only
|
||||
|
||||
// For Div16, Div32 and Div64, AuxInt non-zero means that the divisor has been proved to be not -1
|
||||
// or that the dividend is not the most negative value.
|
||||
{name: "Div8", argLength: 2}, // arg0 / arg1, signed
|
||||
{name: "Div8u", argLength: 2}, // arg0 / arg1, unsigned
|
||||
{name: "Div16", argLength: 2},
|
||||
{name: "Div16", argLength: 2, aux: "Bool"},
|
||||
{name: "Div16u", argLength: 2},
|
||||
{name: "Div32", argLength: 2},
|
||||
{name: "Div32", argLength: 2, aux: "Bool"},
|
||||
{name: "Div32u", argLength: 2},
|
||||
{name: "Div64", argLength: 2},
|
||||
{name: "Div64", argLength: 2, aux: "Bool"},
|
||||
{name: "Div64u", argLength: 2},
|
||||
{name: "Div128u", argLength: 3}, // arg0:arg1 / arg2 (128-bit divided by 64-bit), returns (q, r)
|
||||
|
||||
// For Mod16, Mod32 and Mod64, AuxInt non-zero means that the divisor has been proved to be not -1.
|
||||
{name: "Mod8", argLength: 2}, // arg0 % arg1, signed
|
||||
{name: "Mod8u", argLength: 2}, // arg0 % arg1, unsigned
|
||||
{name: "Mod16", argLength: 2},
|
||||
{name: "Mod16", argLength: 2, aux: "Bool"},
|
||||
{name: "Mod16u", argLength: 2},
|
||||
{name: "Mod32", argLength: 2},
|
||||
{name: "Mod32", argLength: 2, aux: "Bool"},
|
||||
{name: "Mod32u", argLength: 2},
|
||||
{name: "Mod64", argLength: 2},
|
||||
{name: "Mod64", argLength: 2, aux: "Bool"},
|
||||
{name: "Mod64u", argLength: 2},
|
||||
|
||||
{name: "And8", argLength: 2, commutative: true}, // arg0 & arg1
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue