aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorkhr@golang.org <khr@golang.org>2026-02-14 10:04:13 -0800
committerKeith Randall <khr@golang.org>2026-02-15 07:19:01 -0800
commitf65692ea562bf24c21ae46854e98584dd4bcc201 (patch)
treeac7f3fcf1e642981bba9ba35b206c59023b56dce /src/cmd
parent3c8b5e673816c733f13a38b1ed1f53d7d49ea084 (diff)
downloadgo-f65692ea562bf24c21ae46854e98584dd4bcc201.tar.xz
cmd/compile: don't drop same register twice
For instructions that clobber both of their input registers, make sure we don't clobber the same register twice when both input registers are the same. This is rare, but it can happen. Fixes #77604 Change-Id: I794249cf43a8cc4ab3262055daef9193e2442f73 Reviewed-on: https://go-review.googlesource.com/c/go/+/745621 Reviewed-by: Keith Randall <khr@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Jorropo <jorropo.pgm@gmail.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/compile/internal/ssa/regalloc.go2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/ssa/regalloc.go b/src/cmd/compile/internal/ssa/regalloc.go
index dbcc93a7dd..c1cef741fa 100644
--- a/src/cmd/compile/internal/ssa/regalloc.go
+++ b/src/cmd/compile/internal/ssa/regalloc.go
@@ -1810,7 +1810,7 @@ func (s *regAllocState) regalloc(f *Func) {
if regspec.clobbersArg0 {
s.freeReg(register(s.f.getHome(args[0].ID).(*Register).num))
}
- if regspec.clobbersArg1 {
+ if regspec.clobbersArg1 && !(regspec.clobbersArg0 && s.f.getHome(args[0].ID) == s.f.getHome(args[1].ID)) {
s.freeReg(register(s.f.getHome(args[1].ID).(*Register).num))
}