Commit e61db311 authored by Alexandru Moșoi's avatar Alexandru Moșoi Committed by Alexandru Moșoi

cmd/compile: simplify SliceCap when it equals SliceLen

Shows up occassionally, especially after p = p[:8:len(p)]

Updates #14905

Change-Id: Iab35ef2eac57817e6a10c6aaeeb84709e8021641
Reviewed-on: https://go-review.googlesource.com/21025
Run-TryBot: Alexandru Moșoi <alexandru@mosoi.ro>
Reviewed-by: default avatarKeith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 23a756d8
......@@ -596,6 +596,7 @@
(SlicePtr (SliceMake (SlicePtr x) _ _)) -> (SlicePtr x)
(SliceLen (SliceMake _ (SliceLen x) _)) -> (SliceLen x)
(SliceCap (SliceMake _ _ (SliceCap x))) -> (SliceCap x)
(SliceCap (SliceMake _ _ (SliceLen x))) -> (SliceLen x)
(ConstSlice) && config.PtrSize == 4 ->
(SliceMake
......
......@@ -2727,13 +2727,15 @@ func rewriteValuegeneric_OpIsInBounds(v *Value, config *Config) bool {
// cond: (1 << 8) <= int32(c)
// result: (ConstBool [1])
for {
if v.Args[0].Op != OpZeroExt8to32 {
v_0 := v.Args[0]
if v_0.Op != OpZeroExt8to32 {
break
}
if v.Args[1].Op != OpConst32 {
v_1 := v.Args[1]
if v_1.Op != OpConst32 {
break
}
c := v.Args[1].AuxInt
c := v_1.AuxInt
if !((1 << 8) <= int32(c)) {
break
}
......@@ -2745,13 +2747,15 @@ func rewriteValuegeneric_OpIsInBounds(v *Value, config *Config) bool {
// cond: (1 << 8) <= c
// result: (ConstBool [1])
for {
if v.Args[0].Op != OpZeroExt8to64 {
v_0 := v.Args[0]
if v_0.Op != OpZeroExt8to64 {
break
}
if v.Args[1].Op != OpConst64 {
v_1 := v.Args[1]
if v_1.Op != OpConst64 {
break
}
c := v.Args[1].AuxInt
c := v_1.AuxInt
if !((1 << 8) <= c) {
break
}
......@@ -2763,13 +2767,15 @@ func rewriteValuegeneric_OpIsInBounds(v *Value, config *Config) bool {
// cond: (1 << 16) <= int32(c)
// result: (ConstBool [1])
for {
if v.Args[0].Op != OpZeroExt16to32 {
v_0 := v.Args[0]
if v_0.Op != OpZeroExt16to32 {
break
}
if v.Args[1].Op != OpConst32 {
v_1 := v.Args[1]
if v_1.Op != OpConst32 {
break
}
c := v.Args[1].AuxInt
c := v_1.AuxInt
if !((1 << 16) <= int32(c)) {
break
}
......@@ -2781,13 +2787,15 @@ func rewriteValuegeneric_OpIsInBounds(v *Value, config *Config) bool {
// cond: (1 << 16) <= c
// result: (ConstBool [1])
for {
if v.Args[0].Op != OpZeroExt16to64 {
v_0 := v.Args[0]
if v_0.Op != OpZeroExt16to64 {
break
}
if v.Args[1].Op != OpConst64 {
v_1 := v.Args[1]
if v_1.Op != OpConst64 {
break
}
c := v.Args[1].AuxInt
c := v_1.AuxInt
if !((1 << 16) <= c) {
break
}
......@@ -7705,6 +7713,23 @@ func rewriteValuegeneric_OpSliceCap(v *Value, config *Config) bool {
v.AddArg(x)
return true
}
// match: (SliceCap (SliceMake _ _ (SliceLen x)))
// cond:
// result: (SliceLen x)
for {
v_0 := v.Args[0]
if v_0.Op != OpSliceMake {
break
}
v_0_2 := v_0.Args[2]
if v_0_2.Op != OpSliceLen {
break
}
x := v_0_2.Args[0]
v.reset(OpSliceLen)
v.AddArg(x)
return true
}
return false
}
func rewriteValuegeneric_OpSliceLen(v *Value, config *Config) bool {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment