]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/ssa: optimize ANDconst rule of loong64
authorlimeidan <limeidan@loongson.cn>
Sat, 6 Jul 2024 09:19:06 +0000 (17:19 +0800)
committerabner chenc <chenguoqi@loongson.cn>
Tue, 22 Oct 2024 01:48:15 +0000 (01:48 +0000)
Change-Id: I0e88f885ff17b4932c2f448dc3c577c0329a6658
Reviewed-on: https://go-review.googlesource.com/c/go/+/620976
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: abner chenc <chenguoqi@loongson.cn>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
src/cmd/compile/internal/ssa/_gen/LOONG64.rules
src/cmd/compile/internal/ssa/rewriteLOONG64.go

index eec31f9f6cdf8cf5a0bbfb202d80cd987ce569af..64cbe76295c6918e5d7b809b24b43b9f3d5b0c80 100644 (file)
 (MOVWUreg (MOVVconst [c])) => (MOVVconst [int64(uint32(c))])
 (MOVVreg  (MOVVconst [c])) => (MOVVconst [c])
 
+(MOVBUreg (ANDconst [c] x)) => (ANDconst [c&0xff] x)
+
 // constant comparisons
 (SGTconst [c] (MOVVconst [d])) && c>d => (MOVVconst [1])
 (SGTconst [c] (MOVVconst [d])) && c<=d => (MOVVconst [0])
index 30dc407df18bbbebeee73ceeddf0a3682501eeb6..df5043b949bcf2ecdbee423c8ea7610686ed09a0 100644 (file)
@@ -1960,6 +1960,19 @@ func rewriteValueLOONG64_OpLOONG64MOVBUreg(v *Value) bool {
                v.AuxInt = int64ToAuxInt(int64(uint8(c)))
                return true
        }
+       // match: (MOVBUreg (ANDconst [c] x))
+       // result: (ANDconst [c&0xff] x)
+       for {
+               if v_0.Op != OpLOONG64ANDconst {
+                       break
+               }
+               c := auxIntToInt64(v_0.AuxInt)
+               x := v_0.Args[0]
+               v.reset(OpLOONG64ANDconst)
+               v.AuxInt = int64ToAuxInt(c & 0xff)
+               v.AddArg(x)
+               return true
+       }
        return false
 }
 func rewriteValueLOONG64_OpLOONG64MOVBload(v *Value) bool {