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>
(GEZ (MOVVconst [c]) yes no) && c >= 0 => (First yes no)
(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.
(BEQ (MOVVconst [0]) cond yes no) => (EQZ cond yes no)
(BEQ cond (MOVVconst [0]) yes no) => (EQZ cond yes no)
b.swapSuccessors()
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:
// match: (GEZ (MOVVconst [c]) yes no)
// cond: c >= 0
b.Reset(BlockFirst)
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
}