aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/rewritePPC64latelower.go
diff options
context:
space:
mode:
authorJayanth Krishnamurthy jayanth.krishnamurthy@ibm.com <jayanth.krishnamurthy@ibm.com>2025-09-15 17:33:42 -0500
committerArchana Ravindar <aravinda@redhat.com>2026-04-06 01:13:27 -0700
commitd74de3ce79d4ab3495650bfcc4682cab09514b89 (patch)
tree46f97583b1b6c0664b7335807cf202b7a4128a2f /src/cmd/compile/internal/ssa/rewritePPC64latelower.go
parent081aa64e610b175e295159c2117f25ecf49953ed (diff)
downloadgo-d74de3ce79d4ab3495650bfcc4682cab09514b89.tar.xz
cmd/compile: improve uint8/uint16 logical immediates on PPC64
Logical ops on uint8/uint16 (AND/OR/XOR) with constants sometimes materialized the mask via MOVD (often as a negative immediate), even when the value fit in the UI-immediate range. This prevented the backend from selecting andi. / ori / xori forms. This CL makes: UI-immediate truncation is performed only at the use-site of logical-immediate ops, and only when the constant does not fit in the 8- or 16-bit unsigned domain (m != uint8(m) / m != uint16(m)). This avoids negative-mask materialization and enables correct emission of UI-form logical instructions. Arithmetic SI-immediate instructions (addi, subfic, etc.) and other use-patterns are unchanged. Codegen tests are added to ensure the expected andi./ori/xori patterns appear and that MOVD is not emitted for valid 8/16-bit masks. Change-Id: I9fcdf4498c4e984c7587814fb9019a75865c4a0d Cq-Include-Trybots: luci.golang.try:gotip-linux-ppc64_power10,gotip-linux-ppc64_power8,gotip-linux-ppc64le_power8,gotip-linux-ppc64le_power9,gotip-linux-ppc64le_power10 Reviewed-on: https://go-review.googlesource.com/c/go/+/704015 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Paul Murphy <paumurph@redhat.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Mark Freeman <markfreeman@google.com>
Diffstat (limited to 'src/cmd/compile/internal/ssa/rewritePPC64latelower.go')
-rw-r--r--src/cmd/compile/internal/ssa/rewritePPC64latelower.go22
1 files changed, 0 insertions, 22 deletions
diff --git a/src/cmd/compile/internal/ssa/rewritePPC64latelower.go b/src/cmd/compile/internal/ssa/rewritePPC64latelower.go
index 18c05280c0..011f66c769 100644
--- a/src/cmd/compile/internal/ssa/rewritePPC64latelower.go
+++ b/src/cmd/compile/internal/ssa/rewritePPC64latelower.go
@@ -55,28 +55,6 @@ func rewriteValuePPC64latelower_OpPPC64ADD(v *Value) bool {
func rewriteValuePPC64latelower_OpPPC64AND(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
- // match: (AND <t> x:(MOVDconst [m]) n)
- // cond: t.Size() <= 2
- // result: (ANDconst [int64(int16(m))] n)
- for {
- t := v.Type
- for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
- x := v_0
- if x.Op != OpPPC64MOVDconst {
- continue
- }
- m := auxIntToInt64(x.AuxInt)
- n := v_1
- if !(t.Size() <= 2) {
- continue
- }
- v.reset(OpPPC64ANDconst)
- v.AuxInt = int64ToAuxInt(int64(int16(m)))
- v.AddArg(n)
- return true
- }
- break
- }
// match: (AND x:(MOVDconst [m]) n)
// cond: isPPC64ValidShiftMask(m)
// result: (RLDICL [encodePPC64RotateMask(0,m,64)] n)