mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: absorb NEGV into branch on loong64
Removes 132 instructions from the go binary on loong64. Change-Id: Ia02dc305b12f63a64f3f48d120ef852d45cc2a7b Reviewed-on: https://go-review.googlesource.com/c/go/+/695115 Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Keith Randall <khr@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Keith Randall <khr@golang.org> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
f10a82b76f
commit
9763ece873
2 changed files with 20 additions and 0 deletions
|
|
@ -951,6 +951,10 @@
|
||||||
(GEZ (MOVVconst [c]) yes no) && c >= 0 => (First yes no)
|
(GEZ (MOVVconst [c]) yes no) && c >= 0 => (First yes no)
|
||||||
(GEZ (MOVVconst [c]) yes no) && c < 0 => (First no yes)
|
(GEZ (MOVVconst [c]) yes no) && c < 0 => (First no yes)
|
||||||
|
|
||||||
|
// absorb NEGV into branches
|
||||||
|
(EQZ (NEGV x) yes no) => (EQZ x yes no)
|
||||||
|
(NEZ (NEGV x) yes no) => (NEZ x yes no)
|
||||||
|
|
||||||
// Convert branch with zero to more optimal branch zero.
|
// Convert branch with zero to more optimal branch zero.
|
||||||
(BEQ (MOVVconst [0]) cond yes no) => (EQZ cond yes no)
|
(BEQ (MOVVconst [0]) cond yes no) => (EQZ cond yes no)
|
||||||
(BEQ cond (MOVVconst [0]) yes no) => (EQZ cond yes no)
|
(BEQ cond (MOVVconst [0]) yes no) => (EQZ cond yes no)
|
||||||
|
|
|
||||||
|
|
@ -11808,6 +11808,14 @@ func rewriteBlockLOONG64(b *Block) bool {
|
||||||
b.swapSuccessors()
|
b.swapSuccessors()
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
// match: (EQZ (NEGV x) yes no)
|
||||||
|
// result: (EQZ x yes no)
|
||||||
|
for b.Controls[0].Op == OpLOONG64NEGV {
|
||||||
|
v_0 := b.Controls[0]
|
||||||
|
x := v_0.Args[0]
|
||||||
|
b.resetWithControl(BlockLOONG64EQZ, x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
case BlockLOONG64GEZ:
|
case BlockLOONG64GEZ:
|
||||||
// match: (GEZ (MOVVconst [c]) yes no)
|
// match: (GEZ (MOVVconst [c]) yes no)
|
||||||
// cond: c >= 0
|
// cond: c >= 0
|
||||||
|
|
@ -12135,6 +12143,14 @@ func rewriteBlockLOONG64(b *Block) bool {
|
||||||
b.Reset(BlockFirst)
|
b.Reset(BlockFirst)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
// match: (NEZ (NEGV x) yes no)
|
||||||
|
// result: (NEZ x yes no)
|
||||||
|
for b.Controls[0].Op == OpLOONG64NEGV {
|
||||||
|
v_0 := b.Controls[0]
|
||||||
|
x := v_0.Args[0]
|
||||||
|
b.resetWithControl(BlockLOONG64NEZ, x)
|
||||||
|
return true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue