From d6c29c71562df407cc18846efd2e9d8fe0b28960 Mon Sep 17 00:00:00 2001 From: Junyang Shao Date: Wed, 21 May 2025 18:50:39 +0000 Subject: [PATCH] cmd/compile: fix offset calculation error in memcombine Fixes #73812 Change-Id: If7a6e103ae9e1442a2cf4a3c6b1270b6a1887196 Reviewed-on: https://go-review.googlesource.com/c/go/+/675175 Reviewed-by: Keith Randall Auto-Submit: Junyang Shao Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI --- src/cmd/compile/internal/ssa/memcombine.go | 2 +- test/codegen/issue72832.go | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/ssa/memcombine.go b/src/cmd/compile/internal/ssa/memcombine.go index 416f5540a7..b8fcd39495 100644 --- a/src/cmd/compile/internal/ssa/memcombine.go +++ b/src/cmd/compile/internal/ssa/memcombine.go @@ -581,7 +581,7 @@ func combineStores(root *Value) { mask := int64(1)<<(8*a[i].size) - 1 s := 8 * (a[i].offset - a[0].offset) if root.Block.Func.Config.BigEndian { - s = aTotalSize*8 - a[i].size - s + s = (aTotalSize-a[i].size)*8 - s } c |= (a[i].store.Args[1].AuxInt & mask) << s } diff --git a/test/codegen/issue72832.go b/test/codegen/issue72832.go index a7f6ca8c5c..392b41b173 100644 --- a/test/codegen/issue72832.go +++ b/test/codegen/issue72832.go @@ -35,7 +35,16 @@ type tile3 struct { func store_shifted(t *tile3, x uint32) { // amd64:`MOVL` + // ppc64:`MOVHBR` t.a = uint8(x) t.b = uint8(x >> 8) t.c = uint16(x >> 16) } + +func store_const(t *tile3) { + // 0x00030201 + // amd64:`MOVL\s\$197121` + // 0x01020003 + // ppc64:`MOVD\s\$16908291` + t.a, t.b, t.c = 1, 2, 3 +} -- 2.50.0