From c70c642ddb0cfa158d5f9148076dca109fec9165 Mon Sep 17 00:00:00 2001 From: Michael McLoughlin Date: Thu, 13 Dec 2018 00:34:44 -0800 Subject: [PATCH] attempt to make register allocation deterministic --- examples/sum/sum.s | 16 ++++++++-------- pass/alloc.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/sum/sum.s b/examples/sum/sum.s index 82945d1..fab47b1 100644 --- a/examples/sum/sum.s +++ b/examples/sum/sum.s @@ -3,16 +3,16 @@ // func Sum(xs []uint64) uint64 TEXT ·Sum(SB),0,$0-32 - MOVQ xs_base(FP), DX - MOVQ xs_len+8(FP), AX - XORQ CX, CX + MOVQ xs_base(FP), AX + MOVQ xs_len+8(FP), CX + XORQ DX, DX loop: - CMPQ AX, $0x0 + CMPQ CX, $0x0 JE done - ADDQ (DX), CX - ADDQ $0x8, DX - DECQ AX + ADDQ (AX), DX + ADDQ $0x8, AX + DECQ CX JMP loop done: - MOVQ CX, ret+24(FP) + MOVQ DX, ret+24(FP) RET diff --git a/pass/alloc.go b/pass/alloc.go index 8bef077..ce07890 100644 --- a/pass/alloc.go +++ b/pass/alloc.go @@ -111,7 +111,7 @@ func (a *Allocator) mostrestricted() reg.Virtual { n := int(math.MaxInt32) var v reg.Virtual for r, p := range a.possible { - if len(p) < n { + if len(p) < n || (len(p) == n && v != nil && r.VirtualID() < v.VirtualID()) { n = len(p) v = r }