From 802473cfda17a116f705e4060d7b70828e763689 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Thu, 21 Mar 2024 09:15:30 -0700 Subject: [PATCH] cmd/compile: include constant bools in memcombine Constant bools are like constant 1-byte values, they memcombine just fine. (There are still trickier cases that this pass doesn't catch yet, see TODO at memcombine.go:503.) Fixes #66413 Change-Id: Ia67cf72ed1c416e27ac22da443bd88a3f09a6cc8 Reviewed-on: https://go-review.googlesource.com/c/go/+/573416 LUCI-TryBot-Result: Go LUCI Reviewed-by: David Chase Reviewed-by: Joseph Tsai Reviewed-by: Mauri de Souza Meneguzzo Reviewed-by: Keith Randall --- src/cmd/compile/internal/ssa/memcombine.go | 2 +- test/codegen/memcombine.go | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/ssa/memcombine.go b/src/cmd/compile/internal/ssa/memcombine.go index b1a47510be..a7e8ede5bc 100644 --- a/src/cmd/compile/internal/ssa/memcombine.go +++ b/src/cmd/compile/internal/ssa/memcombine.go @@ -534,7 +534,7 @@ func combineStores(root *Value, n int64) bool { isConst := true for i := int64(0); i < n; i++ { switch a[i].store.Args[1].Op { - case OpConst32, OpConst16, OpConst8: + case OpConst32, OpConst16, OpConst8, OpConstBool: default: isConst = false break diff --git a/test/codegen/memcombine.go b/test/codegen/memcombine.go index 6d6c33d947..ff67a442e4 100644 --- a/test/codegen/memcombine.go +++ b/test/codegen/memcombine.go @@ -918,3 +918,23 @@ func store16be(p *struct{ a, b uint16 }, x uint32) { // s390x:-"MOVH",-"SRW" p.b = uint16(x) } + +func storeBoolConst(p *struct{ a, b bool }) { + // amd64:"MOVW",-"MOVB" + // arm64:"MOVH",-"MOVB" + p.a = true + p.b = true +} +func issue66413(p *struct { + a byte + b bool + c bool + d int8 +}) { + // amd64:"MOVL",-"MOVB" + // arm64:"MOVW",-"MOVB" + p.a = 31 + p.b = false + p.c = true + p.d = 12 +} -- 2.50.0