diff options
| author | khr@golang.org <khr@golang.org> | 2026-02-14 10:04:13 -0800 |
|---|---|---|
| committer | Keith Randall <khr@golang.org> | 2026-02-15 07:19:01 -0800 |
| commit | f65692ea562bf24c21ae46854e98584dd4bcc201 (patch) | |
| tree | ac7f3fcf1e642981bba9ba35b206c59023b56dce /src | |
| parent | 3c8b5e673816c733f13a38b1ed1f53d7d49ea084 (diff) | |
| download | go-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')
| -rw-r--r-- | src/cmd/compile/internal/ssa/regalloc.go | 2 |
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)) } |
