mirror of https://github.com/golang/go.git
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:
parent
5e1e3a0025
commit
802473cfda
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue