mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile/internal/ssa: eliminate unnecessary extension operations
Reduce the number of go toolchain instructions on loong64 as follows: file before after Δ % go 1598706 1597230 -1476 -0.0923% gofmt 325180 324736 -444 -0.1365% asm 562538 562098 -440 -0.0782% cgo 488298 487634 -664 -0.1360% compile 2504502 2503590 -912 -0.0364% cover 525976 525312 -664 -0.1262% link 714182 713226 -956 -0.1339% preprofile 241308 240988 -320 -0.1326% vet 794112 793316 -796 -0.1002% Change-Id: I048ef79518b41e83c53da1a3a6b7edaca7cb63f8 Reviewed-on: https://go-review.googlesource.com/c/go/+/693856 Reviewed-by: abner chenc <chenguoqi@loongson.cn> Reviewed-by: Carlos Amedee <carlos@golang.org> Auto-Submit: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: sophie zhao <zhaoxiaolin@loongson.cn>
This commit is contained in:
parent
9632ba8160
commit
fb8bbe46d5
2 changed files with 180 additions and 0 deletions
|
|
@ -608,6 +608,21 @@
|
||||||
(MOVWUreg x:(MOVBUload _ _)) => (MOVVreg x)
|
(MOVWUreg x:(MOVBUload _ _)) => (MOVVreg x)
|
||||||
(MOVWUreg x:(MOVHUload _ _)) => (MOVVreg x)
|
(MOVWUreg x:(MOVHUload _ _)) => (MOVVreg x)
|
||||||
(MOVWUreg x:(MOVWUload _ _)) => (MOVVreg x)
|
(MOVWUreg x:(MOVWUload _ _)) => (MOVVreg x)
|
||||||
|
(MOVBreg x:(MOVBloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVBUreg x:(MOVBUloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVHreg x:(MOVBloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVHreg x:(MOVBUloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVHreg x:(MOVHloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVHUreg x:(MOVBUloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVHUreg x:(MOVHUloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVWreg x:(MOVBloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVWreg x:(MOVBUloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVWreg x:(MOVHloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVWreg x:(MOVHUloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVWreg x:(MOVWloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVWUreg x:(MOVBUloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVWUreg x:(MOVHUloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
(MOVWUreg x:(MOVWUloadidx _ _ _)) => (MOVVreg x)
|
||||||
|
|
||||||
// fold double extensions
|
// fold double extensions
|
||||||
(MOVBreg x:(MOVBreg _)) => (MOVVreg x)
|
(MOVBreg x:(MOVBreg _)) => (MOVVreg x)
|
||||||
|
|
|
||||||
|
|
@ -2559,6 +2559,17 @@ func rewriteValueLOONG64_OpLOONG64MOVBUreg(v *Value) bool {
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
// match: (MOVBUreg x:(MOVBUloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVBUloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
// match: (MOVBUreg x:(MOVBUreg _))
|
// match: (MOVBUreg x:(MOVBUreg _))
|
||||||
// result: (MOVVreg x)
|
// result: (MOVVreg x)
|
||||||
for {
|
for {
|
||||||
|
|
@ -2750,6 +2761,17 @@ func rewriteValueLOONG64_OpLOONG64MOVBreg(v *Value) bool {
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
// match: (MOVBreg x:(MOVBloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVBloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
// match: (MOVBreg x:(MOVBreg _))
|
// match: (MOVBreg x:(MOVBreg _))
|
||||||
// result: (MOVVreg x)
|
// result: (MOVVreg x)
|
||||||
for {
|
for {
|
||||||
|
|
@ -3827,6 +3849,28 @@ func rewriteValueLOONG64_OpLOONG64MOVHUreg(v *Value) bool {
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
// match: (MOVHUreg x:(MOVBUloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVBUloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// match: (MOVHUreg x:(MOVHUloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVHUloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
// match: (MOVHUreg x:(MOVBUreg _))
|
// match: (MOVHUreg x:(MOVBUreg _))
|
||||||
// result: (MOVVreg x)
|
// result: (MOVVreg x)
|
||||||
for {
|
for {
|
||||||
|
|
@ -4038,6 +4082,39 @@ func rewriteValueLOONG64_OpLOONG64MOVHreg(v *Value) bool {
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
// match: (MOVHreg x:(MOVBloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVBloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// match: (MOVHreg x:(MOVBUloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVBUloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// match: (MOVHreg x:(MOVHloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVHloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
// match: (MOVHreg x:(MOVBreg _))
|
// match: (MOVHreg x:(MOVBreg _))
|
||||||
// result: (MOVVreg x)
|
// result: (MOVVreg x)
|
||||||
for {
|
for {
|
||||||
|
|
@ -5053,6 +5130,39 @@ func rewriteValueLOONG64_OpLOONG64MOVWUreg(v *Value) bool {
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
// match: (MOVWUreg x:(MOVBUloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVBUloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// match: (MOVWUreg x:(MOVHUloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVHUloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// match: (MOVWUreg x:(MOVWUloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVWUloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
// match: (MOVWUreg x:(MOVBUreg _))
|
// match: (MOVWUreg x:(MOVBUreg _))
|
||||||
// result: (MOVVreg x)
|
// result: (MOVVreg x)
|
||||||
for {
|
for {
|
||||||
|
|
@ -5297,6 +5407,61 @@ func rewriteValueLOONG64_OpLOONG64MOVWreg(v *Value) bool {
|
||||||
v.AddArg(x)
|
v.AddArg(x)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
// match: (MOVWreg x:(MOVBloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVBloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// match: (MOVWreg x:(MOVBUloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVBUloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// match: (MOVWreg x:(MOVHloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVHloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// match: (MOVWreg x:(MOVHUloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVHUloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// match: (MOVWreg x:(MOVWloadidx _ _ _))
|
||||||
|
// result: (MOVVreg x)
|
||||||
|
for {
|
||||||
|
x := v_0
|
||||||
|
if x.Op != OpLOONG64MOVWloadidx {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v.reset(OpLOONG64MOVVreg)
|
||||||
|
v.AddArg(x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
// match: (MOVWreg x:(MOVBreg _))
|
// match: (MOVWreg x:(MOVBreg _))
|
||||||
// result: (MOVVreg x)
|
// result: (MOVVreg x)
|
||||||
for {
|
for {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue