]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: absorb NEGV into branch on loong64
authorXiaolin Zhao <zhaoxiaolin@loongson.cn>
Tue, 12 Aug 2025 11:23:46 +0000 (19:23 +0800)
committerGopher Robot <gobot@golang.org>
Wed, 13 Aug 2025 14:20:08 +0000 (07:20 -0700)
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>
src/cmd/compile/internal/ssa/_gen/LOONG64.rules
src/cmd/compile/internal/ssa/rewriteLOONG64.go

index 4c195076288b33298068508cafad58f397c2a0cd..efeeca652c81c79ee9ad87034b8ca44164176415 100644 (file)
 (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)
index 3065e2c315b50b1f432626b8a6197e5f98b4810c..6f29588f9a51a30209e73cb77e5ccfbd0615d0c2 100644 (file)
@@ -11808,6 +11808,14 @@ func rewriteBlockLOONG64(b *Block) bool {
                        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
@@ -12135,6 +12143,14 @@ func rewriteBlockLOONG64(b *Block) bool {
                        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
 }