Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/compile: triple negation on arm64 #48467

Closed
greatroar opened this issue Sep 19, 2021 · 1 comment
Closed

cmd/compile: triple negation on arm64 #48467

greatroar opened this issue Sep 19, 2021 · 1 comment

Comments

@greatroar
Copy link

@greatroar greatroar commented Sep 19, 2021

What version of Go are you using (go version)?

$ go version
go version go1.17.1 linux/amd64

Does this issue reproduce with the latest release?

Reproduces with

$ gotip version
go version devel go1.18-771b8ea4f4c Sun Sep 19 02:43:09 2021 +0000 linux/amd64

What operating system and processor architecture are you using (go env)?

GOARCH=arm64

What did you do?

// Branchless max.
func max(x, y uint) uint {
	d, borrow := bits.Sub(x, y, 0)
	return x - d&(-borrow)
}

What did you expect to see?

SUBS	R1, R0, R1
NGC	ZR, R2
AND	R2, R1, R1
SUB	R1, R0, R0

What did you see instead?

SUBS	R1, R0, R1
NGC	ZR, R2
NEG	R2, R2
NEG	R2, R2
AND	R2, R1, R1
SUB	R1, R0, R0

Looks like the rule that eliminates double negation fires too early.

@ALTree ALTree changed the title Compiler produces triple negation on arm64 cmd/compile: triple negation on arm64 Sep 19, 2021
@gopherbot
Copy link

@gopherbot gopherbot commented Sep 19, 2021

Change https://golang.org/cl/350910 mentions this issue: cmd/compile: fold double negate on arm64

Loading

@gopherbot gopherbot closed this in 315dbd1 Sep 19, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants