| // 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 | |
| } |