aboutsummaryrefslogtreecommitdiff
path: root/test/codegen
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2020-07-07 09:32:12 -0700
committerKeith Randall <khr@golang.org>2020-08-17 22:00:44 +0000
commitef9c8a38ad177fa7f48dfaad5d0e27f39a03529d (patch)
tree570eb06c97f9638080764d50a099e059e128a14e /test/codegen
parent8b8f926fc3f0e8f002d0a8e97aab9500e4db83a7 (diff)
downloadgo-ef9c8a38ad177fa7f48dfaad5d0e27f39a03529d.tar.gz
go-ef9c8a38ad177fa7f48dfaad5d0e27f39a03529d.zip
cmd/compile: don't rewrite (CMP (AND x y) 0) to TEST if AND has other uses
If the AND has other uses, we end up saving an argument to the AND in another register, so we can use it for the TEST. No point in doing that. Change-Id: I73444a6aeddd6f55e2328ce04d77c3e6cf4a83e0 Reviewed-on: https://go-review.googlesource.com/c/go/+/241280 Run-TryBot: Keith Randall <khr@golang.org> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'test/codegen')
-rw-r--r--test/codegen/logic.go24
1 files changed, 24 insertions, 0 deletions
diff --git a/test/codegen/logic.go b/test/codegen/logic.go
new file mode 100644
index 0000000000..9afdfd760f
--- /dev/null
+++ b/test/codegen/logic.go
@@ -0,0 +1,24 @@
+// asmcheck
+
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package codegen
+
+var gx, gy int
+
+// Test to make sure that (CMPQ (ANDQ x y) [0]) does not get rewritten to
+// (TESTQ x y) if the ANDQ has other uses. If that rewrite happens, then one
+// of the args of the ANDQ needs to be saved so it can be used as the arg to TESTQ.
+func andWithUse(x, y int) int {
+ // Load x,y into registers, so those MOVQ will not appear at the z := x&y line.
+ gx, gy = x, y
+ // amd64:-"MOVQ"
+ z := x & y
+ if z == 0 {
+ return 77
+ }
+ // use z by returning it
+ return z
+}