]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/gc: minor Cgen_checknil cleanup
authorMichael Munday <munday@ca.ibm.com>
Tue, 12 Apr 2016 14:27:16 +0000 (10:27 -0400)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 12 Apr 2016 15:11:51 +0000 (15:11 +0000)
Most architectures can only generate nil checks when the
the address to check is in a register. Currently only
amd64 and 386 can generate checks for addresses that
reside in memory. This is unlikely to change so the architecture
check has been inverted.

Change-Id: I73697488a183406c79a9039c62823712b510bb6a
Reviewed-on: https://go-review.googlesource.com/21861
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/compile/internal/gc/pgen.go

index bfb65ade388c4f5838df73f9822c1b1c12857a21..f6e9ab3b067c102071a3efb7310b8009e558dab1 100644 (file)
@@ -324,7 +324,12 @@ func Cgen_checknil(n *Node) {
                Fatalf("bad checknil")
        }
 
-       if (Thearch.LinkArch.InFamily(sys.MIPS64, sys.ARM, sys.ARM64, sys.PPC64) && n.Op != OREGISTER) || !n.Addable || n.Op == OLITERAL {
+       // Most architectures require that the address to be checked is
+       // in a register (it could be in memory).
+       needsReg := !Thearch.LinkArch.InFamily(sys.AMD64, sys.I386)
+
+       // Move the address to be checked into a register if necessary.
+       if (needsReg && n.Op != OREGISTER) || !n.Addable || n.Op == OLITERAL {
                var reg Node
                Regalloc(&reg, Types[Tptr], n)
                Cgen(n, &reg)