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 <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Joseph Tsai <joetsai@digital-static.net>
Reviewed-by: Mauri de Souza Meneguzzo <mauri870@gmail.com>
Reviewed-by: Keith Randall <khr@google.com>
This commit is contained in:
Keith Randall 2024-03-21 09:15:30 -07:00
parent 5e1e3a0025
commit 802473cfda
2 changed files with 21 additions and 1 deletions

View file

@ -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

View file

@ -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
}