From 46fd6b4e37f043b57a2d426a633f61ffd4c40931 Mon Sep 17 00:00:00 2001 From: Jakub Ciolek Date: Sun, 5 Jan 2025 11:31:11 +0100 Subject: [PATCH] cmd/compile: remove reduntant Zero rule These two rules produce the same output but have opposite s%16 conditions. Consolidate them into a single rule. Change-Id: I6daa0e7f7af4a4e59a3125b66b85f59e888586c5 Reviewed-on: https://go-review.googlesource.com/c/go/+/640475 LUCI-TryBot-Result: Go LUCI Reviewed-by: Keith Randall Reviewed-by: Keith Randall Reviewed-by: Cherry Mui --- src/cmd/compile/internal/ssa/_gen/AMD64.rules | 6 +---- src/cmd/compile/internal/ssa/rewriteAMD64.go | 25 ++----------------- 2 files changed, 3 insertions(+), 28 deletions(-) diff --git a/src/cmd/compile/internal/ssa/_gen/AMD64.rules b/src/cmd/compile/internal/ssa/_gen/AMD64.rules index 716f4f1c32..1a32c26ae2 100644 --- a/src/cmd/compile/internal/ssa/_gen/AMD64.rules +++ b/src/cmd/compile/internal/ssa/_gen/AMD64.rules @@ -404,11 +404,7 @@ (MOVQstoreconst [makeValAndOff(0,0)] destptr mem)) // Adjust zeros to be a multiple of 16 bytes. -(Zero [s] destptr mem) && s%16 != 0 && s > 16 && s%16 > 8 && config.useSSE => - (Zero [s-s%16] (OffPtr destptr [s%16]) - (MOVOstoreconst [makeValAndOff(0,0)] destptr mem)) - -(Zero [s] destptr mem) && s%16 != 0 && s > 16 && s%16 <= 8 && config.useSSE => +(Zero [s] destptr mem) && s%16 != 0 && s > 16 && config.useSSE => (Zero [s-s%16] (OffPtr destptr [s%16]) (MOVOstoreconst [makeValAndOff(0,0)] destptr mem)) diff --git a/src/cmd/compile/internal/ssa/rewriteAMD64.go b/src/cmd/compile/internal/ssa/rewriteAMD64.go index d62f38f0e2..7dc0a7bdc2 100644 --- a/src/cmd/compile/internal/ssa/rewriteAMD64.go +++ b/src/cmd/compile/internal/ssa/rewriteAMD64.go @@ -30270,34 +30270,13 @@ func rewriteValueAMD64_OpZero(v *Value) bool { return true } // match: (Zero [s] destptr mem) - // cond: s%16 != 0 && s > 16 && s%16 > 8 && config.useSSE + // cond: s%16 != 0 && s > 16 && config.useSSE // result: (Zero [s-s%16] (OffPtr destptr [s%16]) (MOVOstoreconst [makeValAndOff(0,0)] destptr mem)) for { s := auxIntToInt64(v.AuxInt) destptr := v_0 mem := v_1 - if !(s%16 != 0 && s > 16 && s%16 > 8 && config.useSSE) { - break - } - v.reset(OpZero) - v.AuxInt = int64ToAuxInt(s - s%16) - v0 := b.NewValue0(v.Pos, OpOffPtr, destptr.Type) - v0.AuxInt = int64ToAuxInt(s % 16) - v0.AddArg(destptr) - v1 := b.NewValue0(v.Pos, OpAMD64MOVOstoreconst, types.TypeMem) - v1.AuxInt = valAndOffToAuxInt(makeValAndOff(0, 0)) - v1.AddArg2(destptr, mem) - v.AddArg2(v0, v1) - return true - } - // match: (Zero [s] destptr mem) - // cond: s%16 != 0 && s > 16 && s%16 <= 8 && config.useSSE - // result: (Zero [s-s%16] (OffPtr destptr [s%16]) (MOVOstoreconst [makeValAndOff(0,0)] destptr mem)) - for { - s := auxIntToInt64(v.AuxInt) - destptr := v_0 - mem := v_1 - if !(s%16 != 0 && s > 16 && s%16 <= 8 && config.useSSE) { + if !(s%16 != 0 && s > 16 && config.useSSE) { break } v.reset(OpZero) -- 2.51.0