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>
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
// 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
+}