mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.ssa] cmd/compile/internal/ssa/gen: add more simplifications rules
This is a follow up on https://go-review.googlesource.com/#/c/12420/ with some rules moved to AMD64 closer to the existing rules. Change-Id: Id346bb0fc4459b3c49b826a59cc74308a590310e Reviewed-on: https://go-review.googlesource.com/12906 Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
93c354b6cc
commit
9b25da732b
6 changed files with 846 additions and 3 deletions
|
|
@ -102,6 +102,82 @@ func rewriteValuegeneric(v *Value, config *Config) bool {
|
|||
goto end68cc91679848c7c30bd8b0a8ed533843
|
||||
end68cc91679848c7c30bd8b0a8ed533843:
|
||||
;
|
||||
case OpEq16:
|
||||
// match: (Eq16 x x)
|
||||
// cond:
|
||||
// result: (ConstBool {true})
|
||||
{
|
||||
x := v.Args[0]
|
||||
if v.Args[1] != x {
|
||||
goto enda503589f9b617e708a5ad3ddb047809f
|
||||
}
|
||||
v.Op = OpConstBool
|
||||
v.AuxInt = 0
|
||||
v.Aux = nil
|
||||
v.resetArgs()
|
||||
v.Aux = true
|
||||
return true
|
||||
}
|
||||
goto enda503589f9b617e708a5ad3ddb047809f
|
||||
enda503589f9b617e708a5ad3ddb047809f:
|
||||
;
|
||||
case OpEq32:
|
||||
// match: (Eq32 x x)
|
||||
// cond:
|
||||
// result: (ConstBool {true})
|
||||
{
|
||||
x := v.Args[0]
|
||||
if v.Args[1] != x {
|
||||
goto endc94ae3b97d0090257b02152e437b3e17
|
||||
}
|
||||
v.Op = OpConstBool
|
||||
v.AuxInt = 0
|
||||
v.Aux = nil
|
||||
v.resetArgs()
|
||||
v.Aux = true
|
||||
return true
|
||||
}
|
||||
goto endc94ae3b97d0090257b02152e437b3e17
|
||||
endc94ae3b97d0090257b02152e437b3e17:
|
||||
;
|
||||
case OpEq64:
|
||||
// match: (Eq64 x x)
|
||||
// cond:
|
||||
// result: (ConstBool {true})
|
||||
{
|
||||
x := v.Args[0]
|
||||
if v.Args[1] != x {
|
||||
goto end4d21cead60174989467a9c8202dbb91d
|
||||
}
|
||||
v.Op = OpConstBool
|
||||
v.AuxInt = 0
|
||||
v.Aux = nil
|
||||
v.resetArgs()
|
||||
v.Aux = true
|
||||
return true
|
||||
}
|
||||
goto end4d21cead60174989467a9c8202dbb91d
|
||||
end4d21cead60174989467a9c8202dbb91d:
|
||||
;
|
||||
case OpEq8:
|
||||
// match: (Eq8 x x)
|
||||
// cond:
|
||||
// result: (ConstBool {true})
|
||||
{
|
||||
x := v.Args[0]
|
||||
if v.Args[1] != x {
|
||||
goto end73dce8bba164e4f4a1dd701bf8cfb362
|
||||
}
|
||||
v.Op = OpConstBool
|
||||
v.AuxInt = 0
|
||||
v.Aux = nil
|
||||
v.resetArgs()
|
||||
v.Aux = true
|
||||
return true
|
||||
}
|
||||
goto end73dce8bba164e4f4a1dd701bf8cfb362
|
||||
end73dce8bba164e4f4a1dd701bf8cfb362:
|
||||
;
|
||||
case OpEqFat:
|
||||
// match: (EqFat x y)
|
||||
// cond: x.Op == OpConstNil && y.Op != OpConstNil
|
||||
|
|
@ -256,6 +332,82 @@ func rewriteValuegeneric(v *Value, config *Config) bool {
|
|||
goto end808c190f346658bb1ad032bf37a1059f
|
||||
end808c190f346658bb1ad032bf37a1059f:
|
||||
;
|
||||
case OpNeq16:
|
||||
// match: (Neq16 x x)
|
||||
// cond:
|
||||
// result: (ConstBool {false})
|
||||
{
|
||||
x := v.Args[0]
|
||||
if v.Args[1] != x {
|
||||
goto end192755dd3c2be992e9d3deb53794a8d2
|
||||
}
|
||||
v.Op = OpConstBool
|
||||
v.AuxInt = 0
|
||||
v.Aux = nil
|
||||
v.resetArgs()
|
||||
v.Aux = false
|
||||
return true
|
||||
}
|
||||
goto end192755dd3c2be992e9d3deb53794a8d2
|
||||
end192755dd3c2be992e9d3deb53794a8d2:
|
||||
;
|
||||
case OpNeq32:
|
||||
// match: (Neq32 x x)
|
||||
// cond:
|
||||
// result: (ConstBool {false})
|
||||
{
|
||||
x := v.Args[0]
|
||||
if v.Args[1] != x {
|
||||
goto endeb23619fc85950a8df7b31126252c4dd
|
||||
}
|
||||
v.Op = OpConstBool
|
||||
v.AuxInt = 0
|
||||
v.Aux = nil
|
||||
v.resetArgs()
|
||||
v.Aux = false
|
||||
return true
|
||||
}
|
||||
goto endeb23619fc85950a8df7b31126252c4dd
|
||||
endeb23619fc85950a8df7b31126252c4dd:
|
||||
;
|
||||
case OpNeq64:
|
||||
// match: (Neq64 x x)
|
||||
// cond:
|
||||
// result: (ConstBool {false})
|
||||
{
|
||||
x := v.Args[0]
|
||||
if v.Args[1] != x {
|
||||
goto endfc6eea780fb4056afb9e4287076da60c
|
||||
}
|
||||
v.Op = OpConstBool
|
||||
v.AuxInt = 0
|
||||
v.Aux = nil
|
||||
v.resetArgs()
|
||||
v.Aux = false
|
||||
return true
|
||||
}
|
||||
goto endfc6eea780fb4056afb9e4287076da60c
|
||||
endfc6eea780fb4056afb9e4287076da60c:
|
||||
;
|
||||
case OpNeq8:
|
||||
// match: (Neq8 x x)
|
||||
// cond:
|
||||
// result: (ConstBool {false})
|
||||
{
|
||||
x := v.Args[0]
|
||||
if v.Args[1] != x {
|
||||
goto endcccf700d93c6d57765b80f92f7b3fa81
|
||||
}
|
||||
v.Op = OpConstBool
|
||||
v.AuxInt = 0
|
||||
v.Aux = nil
|
||||
v.resetArgs()
|
||||
v.Aux = false
|
||||
return true
|
||||
}
|
||||
goto endcccf700d93c6d57765b80f92f7b3fa81
|
||||
endcccf700d93c6d57765b80f92f7b3fa81:
|
||||
;
|
||||
case OpNeqFat:
|
||||
// match: (NeqFat x y)
|
||||
// cond: x.Op == OpConstNil && y.Op != OpConstNil
|
||||
|
|
@ -422,7 +574,7 @@ func rewriteValuegeneric(v *Value, config *Config) bool {
|
|||
t := v.Args[1].Type
|
||||
src := v.Args[1].Args[0]
|
||||
mem := v.Args[1].Args[1]
|
||||
if v.Args[2] != v.Args[1].Args[1] {
|
||||
if v.Args[2] != mem {
|
||||
goto end324ffb6d2771808da4267f62c854e9c8
|
||||
}
|
||||
if !(t.Size() > 8) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue