1
0
mirror of https://github.com/golang/go synced 2024-11-11 23:40:22 -07:00

cmd/compile: don't simplify nilchecks in loops

khr: Lifting the nil check out of the loop altogether is an admirable
goal, and this rewrite is one step on the way. But without lifting it
out of the loop, the rewrite is just hurting us.

Fixes #14917

Change-Id: Idb917f37d89f50f8e046d5ebd7c092b1e0eb0633
Reviewed-on: https://go-review.googlesource.com/21040
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Alexandru Moșoi <alexandru@mosoi.ro>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Alexandru Moșoi 2016-03-23 11:11:34 +01:00 committed by Alexandru Moșoi
parent baec148767
commit c1892b9c4b
2 changed files with 0 additions and 42 deletions

View File

@ -19,10 +19,6 @@
// succ* fields must be variables
// For now, the generated successors must be a permutation of the matched successors.
// Simplify nil checks.
// These are inserted by for _, e := range a {}
(NilCheck z:(Phi x (Add64 (Const64 [c]) y)) mem) && c > 0 && z == y -> (NilCheck x mem)
// constant folding
(Trunc16to8 (Const16 [c])) -> (Const8 [int64(int8(c))])
(Trunc32to8 (Const32 [c])) -> (Const8 [int64(int8(c))])

View File

@ -220,8 +220,6 @@ func rewriteValuegeneric(v *Value, config *Config) bool {
return rewriteValuegeneric_OpNeqPtr(v, config)
case OpNeqSlice:
return rewriteValuegeneric_OpNeqSlice(v, config)
case OpNilCheck:
return rewriteValuegeneric_OpNilCheck(v, config)
case OpOffPtr:
return rewriteValuegeneric_OpOffPtr(v, config)
case OpOr16:
@ -5604,42 +5602,6 @@ func rewriteValuegeneric_OpNeqSlice(v *Value, config *Config) bool {
}
return false
}
func rewriteValuegeneric_OpNilCheck(v *Value, config *Config) bool {
b := v.Block
_ = b
// match: (NilCheck z:(Phi x (Add64 (Const64 [c]) y)) mem)
// cond: c > 0 && z == y
// result: (NilCheck x mem)
for {
z := v.Args[0]
if z.Op != OpPhi {
break
}
x := z.Args[0]
z_1 := z.Args[1]
if z_1.Op != OpAdd64 {
break
}
z_1_0 := z_1.Args[0]
if z_1_0.Op != OpConst64 {
break
}
c := z_1_0.AuxInt
y := z_1.Args[1]
if len(z.Args) != 2 {
break
}
mem := v.Args[1]
if !(c > 0 && z == y) {
break
}
v.reset(OpNilCheck)
v.AddArg(x)
v.AddArg(mem)
return true
}
return false
}
func rewriteValuegeneric_OpOffPtr(v *Value, config *Config) bool {
b := v.Block
_ = b