aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile
diff options
context:
space:
mode:
authorJunyang Shao <shaojunyang@google.com>2025-07-07 03:08:01 +0000
committerJunyang Shao <shaojunyang@google.com>2025-07-07 09:58:31 -0700
commitd8fa853b37e364bb6a2356deda9073b1a1bc761d (patch)
treebcac5c34a9e6bb918a450165d6b568022e8ee45d /src/cmd/compile
parentdfd75f82d4aa21c4fc841f85c175934915590b5e (diff)
downloadgo-d8fa853b37e364bb6a2356deda9073b1a1bc761d.tar.xz
[dev.simd] cmd/compile: make regalloc simd aware on copy
When making a temporary copy, regalloc should be aware of the SIMD-ness of the type; otherwise it might generate invalid moves. Change-Id: I722c3a0111d0990af32d84c6aaa151f1ac8c1f00 Reviewed-on: https://go-review.googlesource.com/c/go/+/685895 Reviewed-by: David Chase <drchase@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/cmd/compile')
-rw-r--r--src/cmd/compile/internal/ssa/regalloc.go8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/ssa/regalloc.go b/src/cmd/compile/internal/ssa/regalloc.go
index f1e210fe9b..d4ce7a815b 100644
--- a/src/cmd/compile/internal/ssa/regalloc.go
+++ b/src/cmd/compile/internal/ssa/regalloc.go
@@ -898,6 +898,14 @@ func (s *regAllocState) compatRegs(t *types.Type) regMask {
if t.IsTuple() || t.IsFlags() {
return 0
}
+ if t.IsSIMD() {
+ if t.Size() > 8 {
+ return s.f.Config.fpRegMask & s.allocatable
+ } else {
+ // K mask
+ return s.f.Config.gpRegMask & s.allocatable
+ }
+ }
if t.IsFloat() || t == types.TypeInt128 {
if t.Kind() == types.TFLOAT32 && s.f.Config.fp32RegMask != 0 {
m = s.f.Config.fp32RegMask