mirror of
https://github.com/golang/go
synced 2024-11-17 00:24:48 -07:00
cmd/compile: simplify OpSlicemask optimization
The previous CL introduced isConstDelta. Use it to simplify the OpSlicemask optimization in the prove pass. This passes toolstash -cmp. Change-Id: If2aa762db4cdc0cd1c581a536340530a9831081b Reviewed-on: https://go-review.googlesource.com/87481 Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
6436270dad
commit
da022da900
@ -748,19 +748,8 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) {
|
||||
if v.Op != OpSlicemask {
|
||||
continue
|
||||
}
|
||||
add := v.Args[0]
|
||||
if add.Op != OpAdd64 && add.Op != OpAdd32 {
|
||||
continue
|
||||
}
|
||||
// Note that the arg of slicemask was originally a sub, but
|
||||
// was rewritten to an add by generic.rules (if the thing
|
||||
// being subtracted was a constant).
|
||||
x := add.Args[0]
|
||||
y := add.Args[1]
|
||||
if x.Op == OpConst64 || x.Op == OpConst32 {
|
||||
x, y = y, x
|
||||
}
|
||||
if y.Op != OpConst64 && y.Op != OpConst32 {
|
||||
x, delta := isConstDelta(v.Args[0])
|
||||
if x == nil {
|
||||
continue
|
||||
}
|
||||
// slicemask(x + y)
|
||||
@ -769,7 +758,7 @@ func simplifyBlock(sdom SparseTree, ft *factsTable, b *Block) {
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
if lim.umin > uint64(-y.AuxInt) {
|
||||
if lim.umin > uint64(-delta) {
|
||||
if v.Args[0].Op == OpAdd64 {
|
||||
v.reset(OpConst64)
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user